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 }