master
go 59 lines 1.44 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package postgres
4
5 import (
6 "database/sql"
7 )
8
9 func (c *Collector) doQueryIndexesMetrics() error {
10 if err := c.doQueryStatUserIndexes(); err != nil {
11 return err
12 }
13
14 return nil
15 }
16
17 func (c *Collector) doQueryStatUserIndexes() error {
18 if err := c.doDBQueryStatUserIndexes(c.db); err != nil {
19 c.Warning(err)
20 }
21 for _, conn := range c.dbConns {
22 if conn.db == nil {
23 continue
24 }
25 if err := c.doDBQueryStatUserIndexes(conn.db); err != nil {
26 c.Warning(err)
27 }
28 }
29 return nil
30 }
31
32 func (c *Collector) doDBQueryStatUserIndexes(db *sql.DB) error {
33 q := queryStatUserIndexes()
34
35 var dbname, schema, table, name string
36 return c.doDBQuery(db, q, func(column, value string, _ bool) {
37 switch column {
38 case "datname":
39 dbname = value
40 case "schemaname":
41 schema = value
42 case "relname":
43 table = value
44 case "indexrelname":
45 name = removeSpaces(value)
46 c.getIndexMetrics(name, table, dbname, schema).updated = true
47 case "parent_relname":
48 c.getIndexMetrics(name, table, dbname, schema).parentTable = value
49 case "idx_scan":
50 c.getIndexMetrics(name, table, dbname, schema).idxScan = parseInt(value)
51 case "idx_tup_read":
52 c.getIndexMetrics(name, table, dbname, schema).idxTupRead = parseInt(value)
53 case "idx_tup_fetch":
54 c.getIndexMetrics(name, table, dbname, schema).idxTupFetch = parseInt(value)
55 case "size":
56 c.getIndexMetrics(name, table, dbname, schema).size = parseInt(value)
57 }
58 })
59 }