diff --git a/collector/pg_statio_user_indexes.go b/collector/pg_statio_user_indexes.go index c53f52185..b38755930 100644 --- a/collector/pg_statio_user_indexes.go +++ b/collector/pg_statio_user_indexes.go @@ -38,18 +38,19 @@ var ( statioUserIndexesIdxBlksRead = prometheus.NewDesc( prometheus.BuildFQName(namespace, statioUserIndexesSubsystem, "idx_blks_read_total"), "Number of disk blocks read from this index", - []string{"schemaname", "relname", "indexrelname"}, + []string{"datname", "schemaname", "relname", "indexrelname"}, prometheus.Labels{}, ) statioUserIndexesIdxBlksHit = prometheus.NewDesc( prometheus.BuildFQName(namespace, statioUserIndexesSubsystem, "idx_blks_hit_total"), "Number of buffer hits in this index", - []string{"schemaname", "relname", "indexrelname"}, + []string{"datname", "schemaname", "relname", "indexrelname"}, prometheus.Labels{}, ) statioUserIndexesQuery = ` SELECT + current_database() AS datname, schemaname, relname, indexrelname, @@ -69,12 +70,17 @@ func (c *PGStatioUserIndexesCollector) Update(ctx context.Context, instance *ins } defer rows.Close() for rows.Next() { - var schemaname, relname, indexrelname sql.NullString + var datname, schemaname, relname, indexrelname sql.NullString var idxBlksRead, idxBlksHit sql.NullFloat64 - if err := rows.Scan(&schemaname, &relname, &indexrelname, &idxBlksRead, &idxBlksHit); err != nil { + if err := rows.Scan(&datname, &schemaname, &relname, &indexrelname, &idxBlksRead, &idxBlksHit); err != nil { return err } + + datnameLabel := "unknown" + if datname.Valid { + datnameLabel = datname.String + } schemanameLabel := "unknown" if schemaname.Valid { schemanameLabel = schemaname.String @@ -87,7 +93,7 @@ func (c *PGStatioUserIndexesCollector) Update(ctx context.Context, instance *ins if indexrelname.Valid { indexrelnameLabel = indexrelname.String } - labels := []string{schemanameLabel, relnameLabel, indexrelnameLabel} + labels := []string{datnameLabel, schemanameLabel, relnameLabel, indexrelnameLabel} idxBlksReadMetric := 0.0 if idxBlksRead.Valid { diff --git a/collector/pg_statio_user_indexes_test.go b/collector/pg_statio_user_indexes_test.go index 174012162..096272ae3 100644 --- a/collector/pg_statio_user_indexes_test.go +++ b/collector/pg_statio_user_indexes_test.go @@ -30,6 +30,7 @@ func TestPgStatioUserIndexesCollector(t *testing.T) { defer db.Close() inst := &instance{db: db} columns := []string{ + "datname", "schemaname", "relname", "indexrelname", @@ -37,7 +38,7 @@ func TestPgStatioUserIndexesCollector(t *testing.T) { "idx_blks_hit", } rows := sqlmock.NewRows(columns). - AddRow("public", "pgtest_accounts", "pgtest_accounts_pkey", 8, 9) + AddRow("postgres", "public", "pgtest_accounts", "pgtest_accounts_pkey", 8, 9) mock.ExpectQuery(sanitizeQuery(statioUserIndexesQuery)).WillReturnRows(rows) @@ -51,8 +52,8 @@ func TestPgStatioUserIndexesCollector(t *testing.T) { } }() expected := []MetricResult{ - {labels: labelMap{"schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 8, metricType: dto.MetricType_COUNTER}, - {labels: labelMap{"schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 9, metricType: dto.MetricType_COUNTER}, + {labels: labelMap{"datname": "postgres", "schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 8, metricType: dto.MetricType_COUNTER}, + {labels: labelMap{"datname": "postgres", "schemaname": "public", "relname": "pgtest_accounts", "indexrelname": "pgtest_accounts_pkey"}, value: 9, metricType: dto.MetricType_COUNTER}, } convey.Convey("Metrics comparison", t, func() { for _, expect := range expected { @@ -73,6 +74,7 @@ func TestPgStatioUserIndexesCollectorNull(t *testing.T) { defer db.Close() inst := &instance{db: db} columns := []string{ + "datname", "schemaname", "relname", "indexrelname", @@ -80,7 +82,7 @@ func TestPgStatioUserIndexesCollectorNull(t *testing.T) { "idx_blks_hit", } rows := sqlmock.NewRows(columns). - AddRow(nil, nil, nil, nil, nil) + AddRow(nil, nil, nil, nil, nil, nil) mock.ExpectQuery(sanitizeQuery(statioUserIndexesQuery)).WillReturnRows(rows) @@ -94,8 +96,8 @@ func TestPgStatioUserIndexesCollectorNull(t *testing.T) { } }() expected := []MetricResult{ - {labels: labelMap{"schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER}, - {labels: labelMap{"schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER}, + {labels: labelMap{"datname": "unknown", "schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER}, + {labels: labelMap{"datname": "unknown", "schemaname": "unknown", "relname": "unknown", "indexrelname": "unknown"}, value: 0, metricType: dto.MetricType_COUNTER}, } convey.Convey("Metrics comparison", t, func() { for _, expect := range expected {