github.com/netdata/go.d.plugin@v0.58.1/modules/postgres/do_query_indexes.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package postgres
     4  
     5  import (
     6  	"database/sql"
     7  )
     8  
     9  func (p *Postgres) doQueryIndexesMetrics() error {
    10  	if err := p.doQueryStatUserIndexes(); err != nil {
    11  		return err
    12  	}
    13  
    14  	return nil
    15  }
    16  
    17  func (p *Postgres) doQueryStatUserIndexes() error {
    18  	if err := p.doDBQueryStatUserIndexes(p.db); err != nil {
    19  		p.Warning(err)
    20  	}
    21  	for _, conn := range p.dbConns {
    22  		if conn.db == nil {
    23  			continue
    24  		}
    25  		if err := p.doDBQueryStatUserIndexes(conn.db); err != nil {
    26  			p.Warning(err)
    27  		}
    28  	}
    29  	return nil
    30  }
    31  
    32  func (p *Postgres) doDBQueryStatUserIndexes(db *sql.DB) error {
    33  	q := queryStatUserIndexes()
    34  
    35  	var dbname, schema, table, name string
    36  	return p.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 = value
    46  			p.getIndexMetrics(name, table, dbname, schema).updated = true
    47  		case "parent_relname":
    48  			p.getIndexMetrics(name, table, dbname, schema).parentTable = value
    49  		case "idx_scan":
    50  			p.getIndexMetrics(name, table, dbname, schema).idxScan = parseInt(value)
    51  		case "idx_tup_read":
    52  			p.getIndexMetrics(name, table, dbname, schema).idxTupRead = parseInt(value)
    53  		case "idx_tup_fetch":
    54  			p.getIndexMetrics(name, table, dbname, schema).idxTupFetch = parseInt(value)
    55  		case "size":
    56  			p.getIndexMetrics(name, table, dbname, schema).size = parseInt(value)
    57  		}
    58  	})
    59  }