github.com/netdata/go.d.plugin@v0.58.1/modules/mysql/collect_user_statistics.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package mysql
     4  
     5  import (
     6  	"strings"
     7  )
     8  
     9  const queryShowUserStatistics = "SHOW USER_STATISTICS;"
    10  
    11  func (m *MySQL) collectUserStatistics(mx map[string]int64) error {
    12  	// https://mariadb.com/kb/en/user-statistics/
    13  	// https://mariadb.com/kb/en/information-schema-user_statistics-table/
    14  	q := queryShowUserStatistics
    15  	m.Debugf("executing query: '%s'", q)
    16  
    17  	var user, prefix string
    18  	_, err := m.collectQuery(q, func(column, value string, _ bool) {
    19  		switch column {
    20  		case "User":
    21  			user = value
    22  			prefix = "userstats_" + user + "_"
    23  			if !m.collectedUsers[user] {
    24  				m.collectedUsers[user] = true
    25  				m.addUserStatisticsCharts(user)
    26  			}
    27  		case "Cpu_time":
    28  			mx[strings.ToLower(prefix+column)] = int64(parseFloat(value) * 1000)
    29  		case
    30  			"Total_connections",
    31  			"Lost_connections",
    32  			"Denied_connections",
    33  			"Empty_queries",
    34  			"Binlog_bytes_written",
    35  			"Rows_read",
    36  			"Rows_sent",
    37  			"Rows_deleted",
    38  			"Rows_inserted",
    39  			"Rows_updated",
    40  			"Rows_fetched", // Percona
    41  			"Select_commands",
    42  			"Update_commands",
    43  			"Other_commands",
    44  			"Access_denied",
    45  			"Commit_transactions",
    46  			"Rollback_transactions":
    47  			mx[strings.ToLower(prefix+column)] = parseInt(value)
    48  		}
    49  	})
    50  	return err
    51  }