Skip to content

Commit fd8b246

Browse files
authored
Tag status in encoding time metrics (#873)
Tag the encoding time measurements with success/failure. Fixes inconsistent error check across `defer` statements measuring time.
1 parent 146ffe4 commit fd8b246

File tree

2 files changed

+18
-24
lines changed

2 files changed

+18
-24
lines changed

internal/encoding/encoding.go

+10-16
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,9 @@ func NewCBOR[T CBORMarshalUnmarshaler]() *CBOR[T] {
4444

4545
func (c *CBOR[T]) Encode(m T) (_ []byte, _err error) {
4646
defer func(start time.Time) {
47-
if _err != nil {
48-
metrics.encodingTime.Record(context.Background(),
49-
time.Since(start).Seconds(),
50-
metric.WithAttributeSet(attrSetCborEncode))
51-
}
47+
metrics.encodingTime.Record(context.Background(),
48+
time.Since(start).Seconds(),
49+
metric.WithAttributes(attrCodecCbor, attrActionEncode, attrSuccessFromErr(_err)))
5250
}(time.Now())
5351
var out bytes.Buffer
5452
if err := m.MarshalCBOR(&out); err != nil {
@@ -59,11 +57,9 @@ func (c *CBOR[T]) Encode(m T) (_ []byte, _err error) {
5957

6058
func (c *CBOR[T]) Decode(v []byte, t T) (_err error) {
6159
defer func(start time.Time) {
62-
if _err != nil {
63-
metrics.encodingTime.Record(context.Background(),
64-
time.Since(start).Seconds(),
65-
metric.WithAttributeSet(attrSetCborDecode))
66-
}
60+
metrics.encodingTime.Record(context.Background(),
61+
time.Since(start).Seconds(),
62+
metric.WithAttributes(attrCodecCbor, attrActionDecode, attrSuccessFromErr(_err)))
6763
}(time.Now())
6864
r := bytes.NewReader(v)
6965
return t.UnmarshalCBOR(r)
@@ -100,7 +96,7 @@ func (c *ZSTD[T]) Encode(t T) (_ []byte, _err error) {
10096
defer func(start time.Time) {
10197
metrics.encodingTime.Record(context.Background(),
10298
time.Since(start).Seconds(),
103-
metric.WithAttributeSet(attrSetZstdEncode))
99+
metric.WithAttributes(attrCodecZstd, attrActionEncode, attrSuccessFromErr(_err)))
104100
}(time.Now())
105101
decompressed, err := c.cborEncoding.Encode(t)
106102
if len(decompressed) > maxDecompressedSize {
@@ -117,11 +113,9 @@ func (c *ZSTD[T]) Encode(t T) (_ []byte, _err error) {
117113

118114
func (c *ZSTD[T]) Decode(compressed []byte, t T) (_err error) {
119115
defer func(start time.Time) {
120-
if _err != nil {
121-
metrics.encodingTime.Record(context.Background(),
122-
time.Since(start).Seconds(),
123-
metric.WithAttributeSet(attrSetZstdDecode))
124-
}
116+
metrics.encodingTime.Record(context.Background(),
117+
time.Since(start).Seconds(),
118+
metric.WithAttributes(attrCodecZstd, attrActionDecode, attrSuccessFromErr(_err)))
125119
}(time.Now())
126120
buf := bufferPool.Get().(*[]byte)
127121
defer bufferPool.Put(buf)

internal/encoding/metrics.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,10 @@ import (
88
)
99

1010
var (
11-
attrCodecCbor = attribute.String("codec", "cbor")
12-
attrCodecZstd = attribute.String("codec", "zstd")
13-
attrActionEncode = attribute.String("action", "encode")
14-
attrActionDecode = attribute.String("action", "decode")
15-
attrSetCborEncode = attribute.NewSet(attrCodecCbor, attrActionEncode)
16-
attrSetCborDecode = attribute.NewSet(attrCodecCbor, attrActionDecode)
17-
attrSetZstdEncode = attribute.NewSet(attrCodecZstd, attrActionEncode)
18-
attrSetZstdDecode = attribute.NewSet(attrCodecZstd, attrActionDecode)
11+
attrCodecCbor = attribute.String("codec", "cbor")
12+
attrCodecZstd = attribute.String("codec", "zstd")
13+
attrActionEncode = attribute.String("action", "encode")
14+
attrActionDecode = attribute.String("action", "decode")
1915

2016
meter = otel.Meter("f3/internal/encoding")
2117

@@ -36,3 +32,7 @@ var (
3632
)),
3733
}
3834
)
35+
36+
func attrSuccessFromErr(err error) attribute.KeyValue {
37+
return attribute.Bool("success", err == nil)
38+
}

0 commit comments

Comments
 (0)