From 80b01e9a5aad86883f8ae3cd7d568d794281241f Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Tue, 4 Jul 2023 11:13:42 +0100 Subject: [PATCH 1/2] Unpack postgres arrays for process idle times correctly Signed-off-by: Tom Hughes --- collector/pg_process_idle.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/collector/pg_process_idle.go b/collector/pg_process_idle.go index 57df723a3..e9a7f6247 100644 --- a/collector/pg_process_idle.go +++ b/collector/pg_process_idle.go @@ -18,6 +18,7 @@ import ( "database/sql" "github.com/go-kit/log" + "github.com/lib/pq" "github.com/prometheus/client_golang/prometheus" ) @@ -84,20 +85,20 @@ func (PGProcessIdleCollector) Update(ctx context.Context, instance *instance, ch var applicationName sql.NullString var secondsSum sql.NullInt64 var secondsCount sql.NullInt64 - var seconds []uint64 - var secondsBucket []uint64 + var seconds []float64 + var secondsBucket []int64 - err := row.Scan(&applicationName, &secondsSum, &secondsCount, &seconds, &secondsBucket) + err := row.Scan(&applicationName, &secondsSum, &secondsCount, pq.Array(&seconds), pq.Array(&secondsBucket)) + if err != nil { + return err + } var buckets = make(map[float64]uint64, len(seconds)) for i, second := range seconds { if i >= len(secondsBucket) { break } - buckets[float64(second)] = secondsBucket[i] - } - if err != nil { - return err + buckets[second] = uint64(secondsBucket[i]) } applicationNameLabel := "unknown" From e3a73d3533e53ffcb943fbc411b70b31e82a9aa6 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Tue, 4 Jul 2023 11:19:57 +0100 Subject: [PATCH 2/2] Expect a floating point value for the total seconds Signed-off-by: Tom Hughes --- collector/pg_process_idle.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collector/pg_process_idle.go b/collector/pg_process_idle.go index e9a7f6247..8d995ab55 100644 --- a/collector/pg_process_idle.go +++ b/collector/pg_process_idle.go @@ -83,7 +83,7 @@ func (PGProcessIdleCollector) Update(ctx context.Context, instance *instance, ch GROUP BY 1, 2, 3;`) var applicationName sql.NullString - var secondsSum sql.NullInt64 + var secondsSum sql.NullFloat64 var secondsCount sql.NullInt64 var seconds []float64 var secondsBucket []int64 @@ -112,7 +112,7 @@ func (PGProcessIdleCollector) Update(ctx context.Context, instance *instance, ch } secondsSumMetric := 0.0 if secondsSum.Valid { - secondsSumMetric = float64(secondsSum.Int64) + secondsSumMetric = secondsSum.Float64 } ch <- prometheus.MustNewConstHistogram( pgProcessIdleSeconds,