Skip to content

Commit 988f865

Browse files
committed
Unpack postgres arrays for process idle times correctly
Signed-off-by: Tom Hughes <[email protected]>
1 parent d01184f commit 988f865

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

collector/pg_process_idle.go

+20-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"database/sql"
1919

2020
"github.com/go-kit/log"
21+
"github.com/lib/pq"
2122
"github.com/prometheus/client_golang/prometheus"
2223
)
2324

@@ -84,20 +85,32 @@ func (PGProcessIdleCollector) Update(ctx context.Context, instance *instance, ch
8485
var applicationName sql.NullString
8586
var secondsSum sql.NullInt64
8687
var secondsCount sql.NullInt64
87-
var seconds []uint64
88-
var secondsBucket []uint64
88+
var rawSeconds []byte
89+
var rawSecondsBucket []byte
8990

90-
err := row.Scan(&applicationName, &secondsSum, &secondsCount, &seconds, &secondsBucket)
91+
err := row.Scan(&applicationName, &secondsSum, &secondsCount, &rawSeconds, &rawSecondsBucket)
92+
if err != nil {
93+
return err
94+
}
95+
96+
var seconds []float64
97+
err = pq.Array(&seconds).Scan(rawSeconds)
98+
if err != nil {
99+
return err
100+
}
101+
102+
var secondsBucket []int64
103+
err = pq.Array(&secondsBucket).Scan(rawSecondsBucket)
104+
if err != nil {
105+
return err
106+
}
91107

92108
var buckets = make(map[float64]uint64, len(seconds))
93109
for i, second := range seconds {
94110
if i >= len(secondsBucket) {
95111
break
96112
}
97-
buckets[float64(second)] = secondsBucket[i]
98-
}
99-
if err != nil {
100-
return err
113+
buckets[second] = uint64(secondsBucket[i])
101114
}
102115

103116
applicationNameLabel := "unknown"

0 commit comments

Comments
 (0)