From 23771871e770ce1f66eb6b7f3dcfd10708685a86 Mon Sep 17 00:00:00 2001 From: Ilham Syahid S Date: Sun, 13 Oct 2024 07:59:35 +0300 Subject: [PATCH] feat: add response size metrics Signed-off-by: Ilham Syahid S --- metrics/response_size.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 metrics/response_size.go diff --git a/metrics/response_size.go b/metrics/response_size.go new file mode 100644 index 0000000..3cc03aa --- /dev/null +++ b/metrics/response_size.go @@ -0,0 +1,36 @@ +package metrics + +import ( + "context" + "fmt" + + "github.com/riandyrn/otelchi" + otelmetric "go.opentelemetry.io/otel/metric" +) + +// [NewResponseSizeBytes] creates a new instance of [responseSizeBytes]. +func NewResponseSizeBytes() otelchi.MetricsRecorder { + return &responseSizeBytes{} +} + +// [responseSizeBytes] is a metrics recorder for recording response size in bytes. +type responseSizeBytes struct { + responseSizeBytes otelmetric.Int64Histogram +} + +func (r *responseSizeBytes) RegisterMetric(ctx context.Context, cfg otelchi.RegisterMetricConfig) { + httpResponseSizeBytes, err := cfg.Meter.Int64Histogram("response_size_bytes") + if err != nil { + panic(fmt.Sprintf("unable to create response_size_bytes histogram: %v", err)) + } + r.responseSizeBytes = httpResponseSizeBytes +} + +func (r *responseSizeBytes) StartMetric(ctx context.Context, opts otelchi.MetricOpts) {} + +func (r *responseSizeBytes) EndMetric(ctx context.Context, opts otelchi.MetricOpts) { + r.responseSizeBytes.Record(ctx, + int64(opts.ResponseData.WrittenBytes), + opts.Measurement, + ) +}