diff --git a/options.go b/options.go index 88630db..c1c6103 100644 --- a/options.go +++ b/options.go @@ -227,20 +227,18 @@ func TraceLastInsertID() DriverOption { }) } -// WithMinimumReadDBStatsInterval sets the minimum interval between calls to db.Stats(). Negative values are ignored. -func WithMinimumReadDBStatsInterval(interval time.Duration) StatsOption { - return statsOptionFunc(func(o *statsOptions) { - o.minimumReadDBStatsInterval = interval - }) +// WithMinimumReadDBStatsInterval does nothing. +// +// Deprecated: does not have any effect since [database/sql.DB.Stats] calls are +// cheap. +func WithMinimumReadDBStatsInterval(_ time.Duration) StatsOption { + return statsOptionFunc(func(_ *statsOptions) {}) } type statsOptions struct { // meterProvider sets the metric.MeterProvider. If nil, the global Provider will be used. meterProvider metric.MeterProvider - // minimumReadDBStatsInterval sets the minimum interval between calls to db.Stats(). Negative values are ignored. - minimumReadDBStatsInterval time.Duration - // defaultAttributes will be set to each metrics as default. defaultAttributes []attribute.KeyValue } diff --git a/stats.go b/stats.go index d5c0984..fd2d3a7 100644 --- a/stats.go +++ b/stats.go @@ -4,16 +4,12 @@ import ( "context" "database/sql" "sync" - "time" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" ) -// defaultMinimumReadDBStatsInterval is the default minimum interval between calls to db.Stats(). -const defaultMinimumReadDBStatsInterval = time.Second - const ( dbSQLConnectionsOpen = "db.sql.connections.open" dbSQLConnectionsIdle = "db.sql.connections.idle" @@ -28,8 +24,7 @@ const ( // RecordStats records database statistics for provided sql.DB at the provided interval. func RecordStats(db *sql.DB, opts ...StatsOption) error { o := statsOptions{ - meterProvider: otel.GetMeterProvider(), - minimumReadDBStatsInterval: defaultMinimumReadDBStatsInterval, + meterProvider: otel.GetMeterProvider(), } for _, opt := range opts { @@ -38,14 +33,13 @@ func RecordStats(db *sql.DB, opts ...StatsOption) error { meter := o.meterProvider.Meter(instrumentationName) - return recordStats(meter, db, o.minimumReadDBStatsInterval, o.defaultAttributes...) + return recordStats(meter, db, o.defaultAttributes...) } // nolint: funlen func recordStats( meter metric.Meter, db *sql.DB, - minimumReadDBStatsInterval time.Duration, attrs ...attribute.KeyValue, ) error { var ( @@ -60,9 +54,6 @@ func recordStats( idleTimeClosed metric.Int64ObservableCounter lifetimeClosed metric.Int64ObservableCounter - dbStats sql.DBStats - lastDBStats time.Time - // lock prevents a race between batch observer and instrument registration. lock sync.Mutex ) @@ -130,11 +121,7 @@ func recordStats( lock.Lock() defer lock.Unlock() - now := time.Now() - if now.Sub(lastDBStats) >= minimumReadDBStatsInterval { - dbStats = db.Stats() - lastDBStats = now - } + dbStats := db.Stats() obs.ObserveInt64(openConnections, int64(dbStats.OpenConnections), metric.WithAttributes(attrs...)) obs.ObserveInt64(idleConnections, int64(dbStats.Idle), metric.WithAttributes(attrs...)) diff --git a/stats_test.go b/stats_test.go index 0b18ddb..b30a2fa 100644 --- a/stats_test.go +++ b/stats_test.go @@ -2,7 +2,6 @@ package otelsql_test import ( "testing" - "time" "github.com/stretchr/testify/require" semconv "go.opentelemetry.io/otel/semconv/v1.20.0" @@ -29,7 +28,6 @@ func TestRecordStats(t *testing.T) { err = otelsql.RecordStats(db, otelsql.WithMeterProvider(sc.MeterProvider()), - otelsql.WithMinimumReadDBStatsInterval(100*time.Millisecond), otelsql.WithInstanceName("default"), otelsql.WithSystem(semconv.DBSystemPostgreSQL), )