Skip to content

Commit 9c7a458

Browse files
committed
Add datname label to pg_statio_user_indexes.
Signed-off-by: Aleš Zelený <[email protected]>
1 parent b0e61bf commit 9c7a458

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

collector/pg_statio_user_indexes.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,19 @@ var (
3838
statioUserIndexesIdxBlksRead = prometheus.NewDesc(
3939
prometheus.BuildFQName(namespace, statioUserIndexesSubsystem, "idx_blks_read_total"),
4040
"Number of disk blocks read from this index",
41-
[]string{"schemaname", "relname", "indexrelname"},
41+
[]string{"datname", "schemaname", "relname", "indexrelname"},
4242
prometheus.Labels{},
4343
)
4444
statioUserIndexesIdxBlksHit = prometheus.NewDesc(
4545
prometheus.BuildFQName(namespace, statioUserIndexesSubsystem, "idx_blks_hit_total"),
4646
"Number of buffer hits in this index",
47-
[]string{"schemaname", "relname", "indexrelname"},
47+
[]string{"datname", "schemaname", "relname", "indexrelname"},
4848
prometheus.Labels{},
4949
)
5050

5151
statioUserIndexesQuery = `
5252
SELECT
53+
current_database() AS datname,
5354
schemaname,
5455
relname,
5556
indexrelname,
@@ -69,12 +70,17 @@ func (c *PGStatioUserIndexesCollector) Update(ctx context.Context, instance *ins
6970
}
7071
defer rows.Close()
7172
for rows.Next() {
72-
var schemaname, relname, indexrelname sql.NullString
73+
var datname, schemaname, relname, indexrelname sql.NullString
7374
var idxBlksRead, idxBlksHit sql.NullFloat64
7475

75-
if err := rows.Scan(&schemaname, &relname, &indexrelname, &idxBlksRead, &idxBlksHit); err != nil {
76+
if err := rows.Scan(&datname, &schemaname, &relname, &indexrelname, &idxBlksRead, &idxBlksHit); err != nil {
7677
return err
7778
}
79+
80+
datnameLabel := "unknown"
81+
if datname.Valid {
82+
datnameLabel = datname.String
83+
}
7884
schemanameLabel := "unknown"
7985
if schemaname.Valid {
8086
schemanameLabel = schemaname.String
@@ -87,7 +93,7 @@ func (c *PGStatioUserIndexesCollector) Update(ctx context.Context, instance *ins
8793
if indexrelname.Valid {
8894
indexrelnameLabel = indexrelname.String
8995
}
90-
labels := []string{schemanameLabel, relnameLabel, indexrelnameLabel}
96+
labels := []string{datnameLabel, schemanameLabel, relnameLabel, indexrelnameLabel}
9197

9298
idxBlksReadMetric := 0.0
9399
if idxBlksRead.Valid {

collector/pg_statio_user_indexes_test.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,15 @@ func TestPgStatioUserIndexesCollector(t *testing.T) {
3030
defer db.Close()
3131
inst := &instance{db: db}
3232
columns := []string{
33+
"datname",
3334
"schemaname",
3435
"relname",
3536
"indexrelname",
3637
"idx_blks_read",
3738
"idx_blks_hit",
3839
}
3940
rows := sqlmock.NewRows(columns).
40-
AddRow("public", "pgtest_accounts", "pgtest_accounts_pkey", 8, 9)
41+
AddRow("postgres", "public", "pgtest_accounts", "pgtest_accounts_pkey", 8, 9)
4142

4243
mock.ExpectQuery(sanitizeQuery(statioUserIndexesQuery)).WillReturnRows(rows)
4344

@@ -51,8 +52,8 @@ func TestPgStatioUserIndexesCollector(t *testing.T) {
5152
}
5253
}()
5354
expected := []MetricResult{
54-
{labels: labelMap{"schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 8, metricType: dto.MetricType_COUNTER},
55-
{labels: labelMap{"schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 9, metricType: dto.MetricType_COUNTER},
55+
{labels: labelMap{"datname": "postgres", "schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 8, metricType: dto.MetricType_COUNTER},
56+
{labels: labelMap{"datname": "postgres", "schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 9, metricType: dto.MetricType_COUNTER},
5657
}
5758
convey.Convey("Metrics comparison", t, func() {
5859
for _, expect := range expected {
@@ -73,14 +74,15 @@ func TestPgStatioUserIndexesCollectorNull(t *testing.T) {
7374
defer db.Close()
7475
inst := &instance{db: db}
7576
columns := []string{
77+
"datname",
7678
"schemaname",
7779
"relname",
7880
"indexrelname",
7981
"idx_blks_read",
8082
"idx_blks_hit",
8183
}
8284
rows := sqlmock.NewRows(columns).
83-
AddRow(nil, nil, nil, nil, nil)
85+
AddRow(nil, nil, nil, nil, nil, nil)
8486

8587
mock.ExpectQuery(sanitizeQuery(statioUserIndexesQuery)).WillReturnRows(rows)
8688

@@ -94,8 +96,8 @@ func TestPgStatioUserIndexesCollectorNull(t *testing.T) {
9496
}
9597
}()
9698
expected := []MetricResult{
97-
{labels: labelMap{"schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER},
98-
{labels: labelMap{"schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER},
99+
{labels: labelMap{"datname": "unknown", "schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER},
100+
{labels: labelMap{"datname": "unknown", "schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER},
99101
}
100102
convey.Convey("Metrics comparison", t, func() {
101103
for _, expect := range expected {

0 commit comments

Comments
 (0)