Unpack postgres arrays for process idle times correctly (#855)

Signed-off-by: Ben Kochie <superq@gmail.com>
This commit is contained in:
Tom Hughes 2023-07-06 08:33:54 +01:00 committed by GitHub
parent 401711b2e3
commit 6b56e2f057
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 9 deletions

View File

@ -18,6 +18,7 @@ import (
"database/sql" "database/sql"
"github.com/go-kit/log" "github.com/go-kit/log"
"github.com/lib/pq"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
) )
@ -82,22 +83,22 @@ func (PGProcessIdleCollector) Update(ctx context.Context, instance *instance, ch
GROUP BY 1, 2, 3;`) GROUP BY 1, 2, 3;`)
var applicationName sql.NullString var applicationName sql.NullString
var secondsSum sql.NullInt64 var secondsSum sql.NullFloat64
var secondsCount sql.NullInt64 var secondsCount sql.NullInt64
var seconds []uint64 var seconds []float64
var secondsBucket []uint64 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)) var buckets = make(map[float64]uint64, len(seconds))
for i, second := range seconds { for i, second := range seconds {
if i >= len(secondsBucket) { if i >= len(secondsBucket) {
break break
} }
buckets[float64(second)] = secondsBucket[i] buckets[second] = uint64(secondsBucket[i])
}
if err != nil {
return err
} }
applicationNameLabel := "unknown" applicationNameLabel := "unknown"
@ -111,7 +112,7 @@ func (PGProcessIdleCollector) Update(ctx context.Context, instance *instance, ch
} }
secondsSumMetric := 0.0 secondsSumMetric := 0.0
if secondsSum.Valid { if secondsSum.Valid {
secondsSumMetric = float64(secondsSum.Int64) secondsSumMetric = secondsSum.Float64
} }
ch <- prometheus.MustNewConstHistogram( ch <- prometheus.MustNewConstHistogram(
pgProcessIdleSeconds, pgProcessIdleSeconds,