github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/log/discovery.go (about)

     1  package log
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/kv"
     7  	"github.com/ydb-platform/ydb-go-sdk/v3/trace"
     8  )
     9  
    10  // Discovery makes trace.Discovery with logging events from details
    11  func Discovery(l Logger, d trace.Detailer, opts ...Option) (t trace.Discovery) {
    12  	return internalDiscovery(wrapLogger(l, opts...), d)
    13  }
    14  
    15  func internalDiscovery(l Logger, d trace.Detailer) (t trace.Discovery) {
    16  	t.OnDiscover = func(info trace.DiscoveryDiscoverStartInfo) func(trace.DiscoveryDiscoverDoneInfo) {
    17  		if d.Details()&trace.DiscoveryEvents == 0 {
    18  			return nil
    19  		}
    20  		ctx := with(*info.Context, DEBUG, "ydb", "discovery", "list", "endpoints")
    21  		l.Log(ctx, "start",
    22  			kv.String("address", info.Address),
    23  			kv.String("database", info.Database),
    24  		)
    25  		start := time.Now()
    26  
    27  		return func(info trace.DiscoveryDiscoverDoneInfo) {
    28  			if info.Error == nil {
    29  				l.Log(WithLevel(ctx, INFO), "done",
    30  					kv.Latency(start),
    31  					kv.Stringer("endpoints", kv.Endpoints(info.Endpoints)),
    32  				)
    33  			} else {
    34  				l.Log(WithLevel(ctx, ERROR), "failed",
    35  					kv.Error(info.Error),
    36  					kv.Latency(start),
    37  					kv.Version(),
    38  				)
    39  			}
    40  		}
    41  	}
    42  	t.OnWhoAmI = func(info trace.DiscoveryWhoAmIStartInfo) func(doneInfo trace.DiscoveryWhoAmIDoneInfo) {
    43  		if d.Details()&trace.DiscoveryEvents == 0 {
    44  			return nil
    45  		}
    46  		ctx := with(*info.Context, TRACE, "ydb", "discovery", "whoAmI")
    47  		l.Log(ctx, "start")
    48  		start := time.Now()
    49  
    50  		return func(info trace.DiscoveryWhoAmIDoneInfo) {
    51  			if info.Error == nil {
    52  				l.Log(ctx, "done",
    53  					kv.Latency(start),
    54  					kv.String("user", info.User),
    55  					kv.Strings("groups", info.Groups),
    56  				)
    57  			} else {
    58  				l.Log(WithLevel(ctx, WARN), "failed",
    59  					kv.Error(info.Error),
    60  					kv.Latency(start),
    61  					kv.Version(),
    62  				)
    63  			}
    64  		}
    65  	}
    66  
    67  	return t
    68  }