generated from keboola/template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
meters.go
65 lines (55 loc) · 2.62 KB
/
meters.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package otel
import otelMetric "go.opentelemetry.io/otel/metric"
const (
// Low-level metrics, for each redirect and retry.
httpMeterPrefix = "keboola.go.http."
// High level metrics.
clientMeterPrefix = "keboola.go.client."
)
type allMeters struct {
client clientMeters
http httpMeters
}
type clientMeters struct {
inFlight otelMetric.Int64UpDownCounter
duration otelMetric.Float64Histogram
parseInFlight otelMetric.Int64UpDownCounter
parseDuration otelMetric.Float64Histogram
}
type httpMeters struct {
inFlight otelMetric.Int64UpDownCounter
duration otelMetric.Float64Histogram
requestContentLength otelMetric.Int64Counter
responseContentLength otelMetric.Int64Counter
}
func newMeters(meter otelMetric.Meter) *allMeters {
return &allMeters{
client: clientMeters{
inFlight: upDownCounter(meter, clientMeterPrefix+"request.in_flight", "HTTP client: in flight requests.", ""),
duration: histogram(meter, clientMeterPrefix+"request.duration", "HTTP client: requests duration.", "ms"),
parseInFlight: upDownCounter(meter, clientMeterPrefix+"request.parse.in_flight", "HTTP client: in flight request parsing.", ""),
parseDuration: histogram(meter, clientMeterPrefix+"request.parse.duration", "HTTP client: request parse duration.", "ms"),
},
http: httpMeters{
inFlight: upDownCounter(meter, httpMeterPrefix+"request.in_flight", "HTTP request: in flight requests.", ""),
duration: histogram(meter, httpMeterPrefix+"request.duration", "HTTP request: response received duration (without parsing).", "ms"),
requestContentLength: counter(meter, httpMeterPrefix+"request.content_length", "HTTP request: length of sent content after compression.", "By"),
responseContentLength: counter(meter, httpMeterPrefix+"response.content_length", "HTTP response: length of received content before decompression.", "By"),
},
}
}
func counter(meter otelMetric.Meter, name, desc, unit string) otelMetric.Int64Counter {
return mustInstrument(meter.Int64Counter(name, otelMetric.WithDescription(desc), otelMetric.WithUnit(unit)))
}
func upDownCounter(meter otelMetric.Meter, name, desc, unit string) otelMetric.Int64UpDownCounter {
return mustInstrument(meter.Int64UpDownCounter(name, otelMetric.WithDescription(desc), otelMetric.WithUnit(unit)))
}
func histogram(meter otelMetric.Meter, name, desc, unit string) otelMetric.Float64Histogram {
return mustInstrument(meter.Float64Histogram(name, otelMetric.WithDescription(desc), otelMetric.WithUnit(unit)))
}
func mustInstrument[T any](instrument T, err error) T {
if err != nil {
panic(err)
}
return instrument
}