diff --git a/extra/redisotel/metrics.go b/extra/redisotel/metrics.go index 7fe5545278..0bab948131 100644 --- a/extra/redisotel/metrics.go +++ b/extra/redisotel/metrics.go @@ -2,6 +2,7 @@ package redisotel import ( "context" + "errors" "fmt" "net" "sync" @@ -271,9 +272,10 @@ func (mh *metricsHook) DialHook(hook redis.DialHook) redis.DialHook { dur := time.Since(start) - attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+1) + attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+2) attrs = append(attrs, mh.attrs...) attrs = append(attrs, statusAttr(err)) + attrs = append(attrs, cancelledAttr(err)) mh.createTime.Record(ctx, milliseconds(dur), metric.WithAttributeSet(attribute.NewSet(attrs...))) return conn, err @@ -288,10 +290,11 @@ func (mh *metricsHook) ProcessHook(hook redis.ProcessHook) redis.ProcessHook { dur := time.Since(start) - attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+2) + attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+3) attrs = append(attrs, mh.attrs...) attrs = append(attrs, attribute.String("type", "command")) attrs = append(attrs, statusAttr(err)) + attrs = append(attrs, cancelledAttr(err)) mh.useTime.Record(ctx, milliseconds(dur), metric.WithAttributeSet(attribute.NewSet(attrs...))) @@ -309,10 +312,11 @@ func (mh *metricsHook) ProcessPipelineHook( dur := time.Since(start) - attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+2) + attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+3) attrs = append(attrs, mh.attrs...) attrs = append(attrs, attribute.String("type", "pipeline")) attrs = append(attrs, statusAttr(err)) + attrs = append(attrs, cancelledAttr(err)) mh.useTime.Record(ctx, milliseconds(dur), metric.WithAttributeSet(attribute.NewSet(attrs...))) @@ -330,3 +334,10 @@ func statusAttr(err error) attribute.KeyValue { } return attribute.String("status", "ok") } + +func cancelledAttr(err error) attribute.KeyValue { + if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { + return attribute.Bool("canceled", true) + } + return attribute.Bool("canceled", false) +}