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

     1  package log
     2  
     3  import (
     4  	"context"
     5  	"strconv"
     6  	"time"
     7  
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/kv"
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/trace"
    10  )
    11  
    12  // Coordination makes trace.Coordination with logging events from details
    13  func Coordination(l Logger, d trace.Detailer, opts ...Option) (t trace.Coordination) {
    14  	return internalCoordination(wrapLogger(l, opts...), d)
    15  }
    16  
    17  //nolint:funlen
    18  func internalCoordination(
    19  	l *wrapper, //nolint:interfacer
    20  	d trace.Detailer,
    21  ) trace.Coordination {
    22  	return trace.Coordination{
    23  		OnNew: func(info trace.CoordinationNewStartInfo) func(trace.CoordinationNewDoneInfo) {
    24  			if d.Details()&trace.CoordinationEvents == 0 {
    25  				return nil
    26  			}
    27  			ctx := with(*info.Context, TRACE, "ydb", "coordination", "new")
    28  			l.Log(ctx, "start")
    29  			start := time.Now()
    30  
    31  			return func(info trace.CoordinationNewDoneInfo) {
    32  				l.Log(WithLevel(ctx, INFO), "done",
    33  					kv.Latency(start),
    34  					kv.Version(),
    35  				)
    36  			}
    37  		},
    38  		OnCreateNode: func(info trace.CoordinationCreateNodeStartInfo) func(trace.CoordinationCreateNodeDoneInfo) {
    39  			if d.Details()&trace.CoordinationEvents == 0 {
    40  				return nil
    41  			}
    42  			ctx := with(*info.Context, TRACE, "ydb", "coordination", "node", "create")
    43  			l.Log(ctx, "start",
    44  				kv.String("path", info.Path),
    45  			)
    46  			start := time.Now()
    47  
    48  			return func(info trace.CoordinationCreateNodeDoneInfo) {
    49  				if info.Error == nil {
    50  					l.Log(WithLevel(ctx, INFO), "done",
    51  						kv.Latency(start),
    52  					)
    53  				} else {
    54  					l.Log(WithLevel(ctx, ERROR), "fail",
    55  						kv.Latency(start),
    56  						kv.Version(),
    57  					)
    58  				}
    59  			}
    60  		},
    61  		OnAlterNode: func(info trace.CoordinationAlterNodeStartInfo) func(trace.CoordinationAlterNodeDoneInfo) {
    62  			if d.Details()&trace.CoordinationEvents == 0 {
    63  				return nil
    64  			}
    65  			ctx := with(*info.Context, TRACE, "ydb", "coordination", "node", "alter")
    66  			l.Log(ctx, "start",
    67  				kv.String("path", info.Path),
    68  			)
    69  			start := time.Now()
    70  
    71  			return func(info trace.CoordinationAlterNodeDoneInfo) {
    72  				if info.Error == nil {
    73  					l.Log(WithLevel(ctx, INFO), "done",
    74  						kv.Latency(start),
    75  					)
    76  				} else {
    77  					l.Log(WithLevel(ctx, ERROR), "fail",
    78  						kv.Latency(start),
    79  						kv.Version(),
    80  					)
    81  				}
    82  			}
    83  		},
    84  		OnDropNode: func(info trace.CoordinationDropNodeStartInfo) func(trace.CoordinationDropNodeDoneInfo) {
    85  			if d.Details()&trace.CoordinationEvents == 0 {
    86  				return nil
    87  			}
    88  			ctx := with(*info.Context, TRACE, "ydb", "coordination", "node", "drop")
    89  			l.Log(ctx, "start",
    90  				kv.String("path", info.Path),
    91  			)
    92  			start := time.Now()
    93  
    94  			return func(info trace.CoordinationDropNodeDoneInfo) {
    95  				if info.Error == nil {
    96  					l.Log(WithLevel(ctx, INFO), "done",
    97  						kv.Latency(start),
    98  					)
    99  				} else {
   100  					l.Log(WithLevel(ctx, ERROR), "fail",
   101  						kv.Latency(start),
   102  						kv.Version(),
   103  					)
   104  				}
   105  			}
   106  		},
   107  		OnDescribeNode: func(info trace.CoordinationDescribeNodeStartInfo) func(trace.CoordinationDescribeNodeDoneInfo) {
   108  			if d.Details()&trace.CoordinationEvents == 0 {
   109  				return nil
   110  			}
   111  			ctx := with(*info.Context, TRACE, "ydb", "coordination", "node", "describe")
   112  			l.Log(ctx, "start",
   113  				kv.String("path", info.Path),
   114  			)
   115  			start := time.Now()
   116  
   117  			return func(info trace.CoordinationDescribeNodeDoneInfo) {
   118  				if info.Error == nil {
   119  					l.Log(WithLevel(ctx, INFO), "done",
   120  						kv.Latency(start),
   121  					)
   122  				} else {
   123  					l.Log(WithLevel(ctx, ERROR), "fail",
   124  						kv.Latency(start),
   125  						kv.Version(),
   126  					)
   127  				}
   128  			}
   129  		},
   130  		OnSession: func(info trace.CoordinationSessionStartInfo) func(trace.CoordinationSessionDoneInfo) {
   131  			if d.Details()&trace.CoordinationEvents == 0 {
   132  				return nil
   133  			}
   134  			ctx := with(*info.Context, TRACE, "ydb", "coordination", "node", "describe")
   135  			l.Log(ctx, "start")
   136  			start := time.Now()
   137  
   138  			return func(info trace.CoordinationSessionDoneInfo) {
   139  				if info.Error == nil {
   140  					l.Log(WithLevel(ctx, INFO), "done",
   141  						kv.Latency(start),
   142  					)
   143  				} else {
   144  					l.Log(WithLevel(ctx, ERROR), "fail",
   145  						kv.Latency(start),
   146  						kv.Version(),
   147  					)
   148  				}
   149  			}
   150  		},
   151  		OnClose: func(info trace.CoordinationCloseStartInfo) func(trace.CoordinationCloseDoneInfo) {
   152  			if d.Details()&trace.CoordinationEvents == 0 {
   153  				return nil
   154  			}
   155  			ctx := with(*info.Context, TRACE, "ydb", "coordination", "close")
   156  			l.Log(ctx, "start")
   157  			start := time.Now()
   158  
   159  			return func(info trace.CoordinationCloseDoneInfo) {
   160  				if info.Error == nil {
   161  					l.Log(WithLevel(ctx, INFO), "done",
   162  						kv.Latency(start),
   163  					)
   164  				} else {
   165  					l.Log(WithLevel(ctx, ERROR), "fail",
   166  						kv.Latency(start),
   167  						kv.Version(),
   168  					)
   169  				}
   170  			}
   171  		},
   172  		OnStreamNew: func(
   173  			info trace.CoordinationStreamNewStartInfo,
   174  		) func(
   175  			info trace.CoordinationStreamNewDoneInfo,
   176  		) {
   177  			if d.Details()&trace.CoordinationEvents == 0 {
   178  				return nil
   179  			}
   180  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "stream", "new")
   181  			l.Log(ctx, "stream")
   182  			start := time.Now()
   183  
   184  			return func(info trace.CoordinationStreamNewDoneInfo) {
   185  				l.Log(ctx, "done",
   186  					kv.Latency(start),
   187  					kv.Error(info.Error),
   188  					kv.Version(),
   189  				)
   190  			}
   191  		},
   192  		OnSessionStarted: func(info trace.CoordinationSessionStartedInfo) {
   193  			if d.Details()&trace.CoordinationEvents == 0 {
   194  				return
   195  			}
   196  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "started")
   197  			l.Log(ctx, "",
   198  				kv.String("sessionID", strconv.FormatUint(info.SessionID, 10)),
   199  				kv.String("expectedSessionID", strconv.FormatUint(info.SessionID, 10)),
   200  			)
   201  		},
   202  		OnSessionStartTimeout: func(info trace.CoordinationSessionStartTimeoutInfo) {
   203  			if d.Details()&trace.CoordinationEvents == 0 {
   204  				return
   205  			}
   206  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "start", "timeout")
   207  			l.Log(ctx, "",
   208  				kv.Stringer("timeout", info.Timeout),
   209  			)
   210  		},
   211  		OnSessionKeepAliveTimeout: func(info trace.CoordinationSessionKeepAliveTimeoutInfo) {
   212  			if d.Details()&trace.CoordinationEvents == 0 {
   213  				return
   214  			}
   215  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "keepAlive", "timeout")
   216  			l.Log(ctx, "",
   217  				kv.Stringer("timeout", info.Timeout),
   218  				kv.Stringer("lastGoodResponseTime", info.LastGoodResponseTime),
   219  			)
   220  		},
   221  		OnSessionStopped: func(info trace.CoordinationSessionStoppedInfo) {
   222  			if d.Details()&trace.CoordinationEvents == 0 {
   223  				return
   224  			}
   225  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "stopped")
   226  			l.Log(ctx, "",
   227  				kv.String("sessionID", strconv.FormatUint(info.SessionID, 10)),
   228  				kv.String("expectedSessionID", strconv.FormatUint(info.SessionID, 10)),
   229  			)
   230  		},
   231  		OnSessionStopTimeout: func(info trace.CoordinationSessionStopTimeoutInfo) {
   232  			if d.Details()&trace.CoordinationEvents == 0 {
   233  				return
   234  			}
   235  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "stop", "timeout")
   236  			l.Log(ctx, "",
   237  				kv.Stringer("timeout", info.Timeout),
   238  			)
   239  		},
   240  		OnSessionClientTimeout: func(info trace.CoordinationSessionClientTimeoutInfo) {
   241  			if d.Details()&trace.CoordinationEvents == 0 {
   242  				return
   243  			}
   244  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "client", "timeout")
   245  			l.Log(ctx, "",
   246  				kv.Stringer("timeout", info.Timeout),
   247  				kv.Stringer("lastGoodResponseTime", info.LastGoodResponseTime),
   248  			)
   249  		},
   250  		OnSessionServerExpire: func(info trace.CoordinationSessionServerExpireInfo) {
   251  			if d.Details()&trace.CoordinationEvents == 0 {
   252  				return
   253  			}
   254  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "server", "expire")
   255  			l.Log(ctx, "",
   256  				kv.Stringer("failure", info.Failure),
   257  			)
   258  		},
   259  		OnSessionServerError: func(info trace.CoordinationSessionServerErrorInfo) {
   260  			if d.Details()&trace.CoordinationEvents == 0 {
   261  				return
   262  			}
   263  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "server", "error")
   264  			l.Log(ctx, "",
   265  				kv.Stringer("failure", info.Failure),
   266  			)
   267  		},
   268  		OnSessionReceive: func(
   269  			info trace.CoordinationSessionReceiveStartInfo,
   270  		) func(
   271  			info trace.CoordinationSessionReceiveDoneInfo,
   272  		) {
   273  			if d.Details()&trace.CoordinationEvents == 0 {
   274  				return nil
   275  			}
   276  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "receive")
   277  			l.Log(ctx, "receive")
   278  			start := time.Now()
   279  
   280  			return func(info trace.CoordinationSessionReceiveDoneInfo) {
   281  				l.Log(ctx, "done",
   282  					kv.Latency(start),
   283  					kv.Error(info.Error),
   284  					kv.Stringer("response", info.Response),
   285  					kv.Version(),
   286  				)
   287  			}
   288  		},
   289  		OnSessionReceiveUnexpected: func(info trace.CoordinationSessionReceiveUnexpectedInfo) {
   290  			if d.Details()&trace.CoordinationEvents == 0 {
   291  				return
   292  			}
   293  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "receive", "unexpected")
   294  			l.Log(ctx, "",
   295  				kv.Stringer("response", info.Response),
   296  			)
   297  		},
   298  		OnSessionStop: func(info trace.CoordinationSessionStopInfo) {
   299  			if d.Details()&trace.CoordinationEvents == 0 {
   300  				return
   301  			}
   302  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "stop")
   303  			l.Log(ctx, "",
   304  				kv.String("sessionID", strconv.FormatUint(info.SessionID, 10)),
   305  			)
   306  		},
   307  		OnSessionStart: func(
   308  			info trace.CoordinationSessionStartStartInfo,
   309  		) func(
   310  			info trace.CoordinationSessionStartDoneInfo,
   311  		) {
   312  			if d.Details()&trace.CoordinationEvents == 0 {
   313  				return nil
   314  			}
   315  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "start")
   316  			l.Log(ctx, "start")
   317  			start := time.Now()
   318  
   319  			return func(info trace.CoordinationSessionStartDoneInfo) {
   320  				l.Log(ctx, "done",
   321  					kv.Latency(start),
   322  					kv.Error(info.Error),
   323  					kv.Version(),
   324  				)
   325  			}
   326  		},
   327  		OnSessionSend: func(
   328  			info trace.CoordinationSessionSendStartInfo,
   329  		) func(
   330  			info trace.CoordinationSessionSendDoneInfo,
   331  		) {
   332  			if d.Details()&trace.CoordinationEvents == 0 {
   333  				return nil
   334  			}
   335  			ctx := with(context.Background(), TRACE, "ydb", "coordination", "session", "send")
   336  			l.Log(ctx, "start",
   337  				kv.Stringer("request", info.Request),
   338  			)
   339  			start := time.Now()
   340  
   341  			return func(info trace.CoordinationSessionSendDoneInfo) {
   342  				l.Log(ctx, "done",
   343  					kv.Latency(start),
   344  					kv.Error(info.Error),
   345  					kv.Version(),
   346  				)
   347  			}
   348  		},
   349  	}
   350  }