github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/trace/details.go (about) 1 package trace 2 3 import ( 4 "regexp" 5 "sort" 6 "strings" 7 ) 8 9 type Detailer interface { 10 Details() Details 11 } 12 13 var _ Detailer = Details(0) 14 15 type Details uint64 16 17 func (d Details) Details() Details { 18 return d 19 } 20 21 func (d Details) String() string { 22 ss := make([]string, 0) 23 for bit, name := range detailsMap { 24 if d&bit != 0 { 25 ss = append(ss, name) 26 } 27 } 28 sort.Strings(ss) 29 30 return strings.Join(ss, "|") 31 } 32 33 const ( 34 DriverNetEvents Details = 1 << iota // for bitmask: 1, 2, 4, 8, 16, 32, ... 35 DriverConnEvents 36 DriverConnStreamEvents 37 DriverBalancerEvents 38 DriverResolverEvents 39 DriverRepeaterEvents 40 DriverCredentialsEvents 41 42 TableSessionLifeCycleEvents 43 TableSessionQueryInvokeEvents 44 TableSessionQueryStreamEvents 45 TableSessionTransactionEvents 46 TablePoolLifeCycleEvents 47 TablePoolSessionLifeCycleEvents 48 TablePoolAPIEvents 49 50 QuerySessionEvents 51 QueryResultEvents 52 QueryTransactionEvents 53 QueryPoolEvents 54 55 TopicControlPlaneEvents 56 57 TopicReaderCustomerEvents 58 59 TopicReaderStreamLifeCycleEvents 60 TopicReaderStreamEvents 61 TopicReaderTransactionEvents 62 TopicReaderMessageEvents 63 TopicReaderPartitionEvents 64 65 TopicWriterStreamLifeCycleEvents 66 TopicWriterStreamEvents 67 68 DatabaseSQLConnectorEvents 69 DatabaseSQLConnEvents 70 DatabaseSQLTxEvents 71 DatabaseSQLStmtEvents 72 73 RetryEvents 74 75 DiscoveryEvents 76 77 SchemeEvents 78 79 ScriptingEvents 80 81 RatelimiterEvents 82 83 CoordinationEvents 84 85 DriverEvents = DriverConnEvents | 86 DriverConnStreamEvents | 87 DriverBalancerEvents | 88 DriverResolverEvents | 89 DriverRepeaterEvents | 90 DriverCredentialsEvents 91 92 TableEvents = TableSessionLifeCycleEvents | 93 TableSessionQueryInvokeEvents | 94 TableSessionQueryStreamEvents | 95 TableSessionTransactionEvents | 96 TablePoolLifeCycleEvents | 97 TablePoolSessionLifeCycleEvents | 98 TablePoolAPIEvents 99 100 QueryEvents = QuerySessionEvents | 101 QueryPoolEvents | 102 QueryResultEvents | 103 QueryTransactionEvents 104 105 TablePoolEvents = TablePoolLifeCycleEvents | 106 TablePoolSessionLifeCycleEvents | 107 TablePoolAPIEvents 108 109 TableSessionQueryEvents = TableSessionQueryInvokeEvents | 110 TableSessionQueryStreamEvents 111 TableSessionEvents = TableSessionLifeCycleEvents | 112 TableSessionQueryEvents | 113 TableSessionTransactionEvents 114 115 TopicReaderEvents = TopicReaderCustomerEvents | TopicReaderStreamEvents | TopicReaderMessageEvents | 116 TopicReaderPartitionEvents | 117 TopicReaderStreamLifeCycleEvents 118 119 TopicEvents = TopicControlPlaneEvents | TopicReaderEvents 120 121 DatabaseSQLEvents = DatabaseSQLConnectorEvents | 122 DatabaseSQLConnEvents | 123 DatabaseSQLTxEvents | 124 DatabaseSQLStmtEvents 125 126 DetailsAll = ^Details(0) // All bits enabled 127 ) 128 129 var ( 130 detailsMap = map[Details]string{ 131 DriverEvents: "ydb.driver", 132 DriverBalancerEvents: "ydb.driver.balancer", 133 DriverResolverEvents: "ydb.driver.resolver", 134 DriverRepeaterEvents: "ydb.driver.repeater", 135 DriverConnEvents: "ydb.driver.conn", 136 DriverConnStreamEvents: "ydb.driver.conn.stream", 137 DriverCredentialsEvents: "ydb.driver.credentials", 138 139 DiscoveryEvents: "ydb.discovery", 140 141 RetryEvents: "ydb.retry", 142 143 SchemeEvents: "ydb.scheme", 144 145 ScriptingEvents: "ydb.scripting", 146 147 CoordinationEvents: "ydb.coordination", 148 149 RatelimiterEvents: "ydb.ratelimiter", 150 151 TableEvents: "ydb.table", 152 TableSessionLifeCycleEvents: "ydb.table.session", 153 TableSessionQueryInvokeEvents: "ydb.table.session.query.invoke", 154 TableSessionQueryStreamEvents: "ydb.table.session.query.stream", 155 TableSessionTransactionEvents: "ydb.table.session.tx", 156 TablePoolLifeCycleEvents: "ydb.table.pool", 157 TablePoolSessionLifeCycleEvents: "ydb.table.pool.session", 158 TablePoolAPIEvents: "ydb.table.pool.api", 159 160 QueryEvents: "ydb.query", 161 QueryPoolEvents: "ydb.query.pool", 162 QuerySessionEvents: "ydb.query.session", 163 QueryResultEvents: "ydb.query.result", 164 QueryTransactionEvents: "ydb.query.tx", 165 166 DatabaseSQLEvents: "ydb.database.sql", 167 DatabaseSQLConnectorEvents: "ydb.database.sql.connector", 168 DatabaseSQLConnEvents: "ydb.database.sql.conn", 169 DatabaseSQLTxEvents: "ydb.database.sql.tx", 170 DatabaseSQLStmtEvents: "ydb.database.sql.stmt", 171 172 TopicEvents: "ydb.topic", 173 TopicControlPlaneEvents: "ydb.topic.controlplane", 174 TopicReaderEvents: "ydb.topic.reader", 175 TopicReaderStreamEvents: "ydb.topic.reader.stream", 176 TopicReaderMessageEvents: "ydb.topic.reader.message", 177 TopicReaderPartitionEvents: "ydb.topic.reader.partition", 178 TopicReaderStreamLifeCycleEvents: "ydb.topic.reader.lifecycle", 179 TopicWriterStreamLifeCycleEvents: "ydb.topic.writer.lifecycle", 180 TopicWriterStreamEvents: "ydb.topic.writer.stream", 181 } 182 defaultDetails = DetailsAll 183 ) 184 185 type matchDetailsOptionsHolder struct { 186 defaultDetails Details 187 posixMatch bool 188 } 189 190 type matchDetailsOption func(h *matchDetailsOptionsHolder) 191 192 func WithDefaultDetails(defaultDetails Details) matchDetailsOption { 193 return func(h *matchDetailsOptionsHolder) { 194 h.defaultDetails = defaultDetails 195 } 196 } 197 198 func WithPOSIXMatch() matchDetailsOption { 199 return func(h *matchDetailsOptionsHolder) { 200 h.posixMatch = true 201 } 202 } 203 204 func MatchDetails(pattern string, opts ...matchDetailsOption) (d Details) { 205 var ( 206 h = &matchDetailsOptionsHolder{ 207 defaultDetails: defaultDetails, 208 } 209 re *regexp.Regexp 210 err error 211 ) 212 213 for _, opt := range opts { 214 if opt != nil { 215 opt(h) 216 } 217 } 218 if h.posixMatch { 219 re, err = regexp.CompilePOSIX(pattern) 220 } else { 221 re, err = regexp.Compile(pattern) 222 } 223 if err != nil { 224 return h.defaultDetails 225 } 226 for k, v := range detailsMap { 227 if re.MatchString(v) { 228 d |= k 229 } 230 } 231 if d == 0 { 232 return h.defaultDetails 233 } 234 235 return d 236 }