mirror of
https://github.com/netbirdio/netbird.git
synced 2026-09-24 23:59:08 +02:00
50 lines
1.5 KiB
Go
50 lines
1.5 KiB
Go
package metrics_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
|
|
"go.opentelemetry.io/otel/sdk/metric/metricdata"
|
|
|
|
"github.com/netbirdio/netbird/proxy/internal/metrics"
|
|
)
|
|
|
|
func TestRegisterClientObserver(t *testing.T) {
|
|
reader := sdkmetric.NewManualReader()
|
|
provider := sdkmetric.NewMeterProvider(sdkmetric.WithReader(reader))
|
|
m, err := metrics.New(context.Background(), provider.Meter("test"))
|
|
require.NoError(t, err)
|
|
|
|
clients := 2
|
|
require.NoError(t, m.RegisterClientObserver(func() int { return clients }))
|
|
|
|
var rm metricdata.ResourceMetrics
|
|
require.NoError(t, reader.Collect(context.Background(), &rm))
|
|
assert.Equal(t, int64(2), gaugeValue(t, rm, "proxy.clients.count"), "gauge must report the current client count")
|
|
|
|
clients = 1
|
|
require.NoError(t, reader.Collect(context.Background(), &rm))
|
|
assert.Equal(t, int64(1), gaugeValue(t, rm, "proxy.clients.count"), "gauge must follow the client count on the next collection")
|
|
}
|
|
|
|
func gaugeValue(t *testing.T, rm metricdata.ResourceMetrics, name string) int64 {
|
|
t.Helper()
|
|
|
|
for _, sm := range rm.ScopeMetrics {
|
|
for _, mtr := range sm.Metrics {
|
|
if mtr.Name != name {
|
|
continue
|
|
}
|
|
gauge, ok := mtr.Data.(metricdata.Gauge[int64])
|
|
require.True(t, ok, "%s must be an int64 gauge", name)
|
|
require.Len(t, gauge.DataPoints, 1, "%s must have a single data point", name)
|
|
return gauge.DataPoints[0].Value
|
|
}
|
|
}
|
|
t.Fatalf("gauge %s not found", name)
|
|
return 0
|
|
}
|