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  }