summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/mysql/charts.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/mysql/charts.go1239
1 files changed, 1239 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/mysql/charts.go b/src/go/collectors/go.d.plugin/modules/mysql/charts.go
new file mode 100644
index 000000000..054e4e01d
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/mysql/charts.go
@@ -0,0 +1,1239 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package mysql
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+)
+
+const (
+ prioBandwidth = module.Priority + iota
+ prioQueries
+ prioQueriesType
+ prioHandlers
+ prioTableOpenCacheOverflows
+ prioTableLocks
+ prioTableJoinIssues
+ prioTableSortIssues
+ prioTmpOperations
+ prioConnections
+ prioActiveConnections
+ prioBinlogCache
+ prioBinlogStatementCache
+ prioThreads
+ prioThreadsCreated
+ prioThreadCacheMisses
+ prioInnoDBIO
+ prioInnoDBIOOperations
+ prioInnoDBIOPendingOperations
+ prioInnoDBLog
+ prioInnoDBOSLog
+ prioInnoDBOSLogFsyncWrites
+ prioInnoDBOSLogIO
+ prioInnoDBCurRowLock
+ prioInnoDBRows
+ prioInnoDBBufferPoolPages
+ prioInnoDBBufferPoolPagesFlushed
+ prioInnoDBBufferPoolBytes
+ prioInnoDBBufferPoolReadAhead
+ prioInnoDBBufferPoolReadAheadRnd
+ prioInnoDBBufferPoolOperations
+ prioMyISAMKeyBlocks
+ prioMyISAMKeyRequests
+ prioMyISAMKeyDiskOperations
+ prioOpenFiles
+ prioOpenFilesRate
+ prioConnectionErrors
+ prioOpenedTables
+ prioOpenTables
+ prioProcessListFetchQueryDuration
+ prioProcessListQueries
+ prioProcessListLongestQueryDuration
+ prioInnoDBDeadlocks
+ prioQCacheOperations
+ prioQCacheQueries
+ prioQCacheFreeMem
+ prioQCacheMemBlocks
+ prioGaleraWriteSets
+ prioGaleraBytes
+ prioGaleraQueue
+ prioGaleraConflicts
+ prioGaleraFlowControl
+ prioGaleraClusterStatus
+ prioGaleraClusterState
+ prioGaleraClusterSize
+ prioGaleraClusterWeight
+ prioGaleraClusterConnectionStatus
+ prioGaleraReadinessState
+ prioGaleraOpenTransactions
+ prioGaleraThreadCount
+ prioSlaveSecondsBehindMaster
+ prioSlaveSQLIOThreadRunningState
+ prioUserStatsCPUTime
+ prioUserStatsRows
+ prioUserStatsCommands
+ prioUserStatsDeniedCommands
+ prioUserStatsTransactions
+ prioUserStatsBinlogWritten
+ prioUserStatsEmptyQueries
+ prioUserStatsConnections
+ prioUserStatsLostConnections
+ prioUserStatsDeniedConnections
+)
+
+var baseCharts = module.Charts{
+ chartBandwidth.Copy(),
+ chartQueries.Copy(),
+ chartQueriesType.Copy(),
+ chartHandlers.Copy(),
+ chartTableLocks.Copy(),
+ chartTableJoinIssues.Copy(),
+ chartTableSortIssues.Copy(),
+ chartTmpOperations.Copy(),
+ chartConnections.Copy(),
+ chartActiveConnections.Copy(),
+ chartThreads.Copy(),
+ chartThreadCreationRate.Copy(),
+ chartThreadsCacheMisses.Copy(),
+ chartInnoDBIO.Copy(),
+ chartInnoDBIOOperations.Copy(),
+ chartInnoDBPendingIOOperations.Copy(),
+ chartInnoDBLogOperations.Copy(),
+ chartInnoDBCurrentRowLocks.Copy(),
+ chartInnoDBRowsOperations.Copy(),
+ chartInnoDBBufferPoolPages.Copy(),
+ chartInnoDBBufferPoolPagesFlushed.Copy(),
+ chartInnoDBBufferPoolBytes.Copy(),
+ chartInnoDBBufferPoolReadAhead.Copy(),
+ chartInnoDBBufferPoolReadAheadRnd.Copy(),
+ chartInnoDBBufferPoolOperations.Copy(),
+ chartOpenFiles.Copy(),
+ chartOpenedFilesRate.Copy(),
+ chartConnectionErrors.Copy(),
+ chartOpenedTables.Copy(),
+ chartOpenTables.Copy(),
+ chartProcessListFetchQueryDuration.Copy(),
+ chartProcessListQueries.Copy(),
+ chartProcessListLongestQueryDuration.Copy(),
+}
+
+var (
+ chartBandwidth = module.Chart{
+ ID: "net",
+ Title: "Bandwidth",
+ Units: "kilobits/s",
+ Fam: "bandwidth",
+ Ctx: "mysql.net",
+ Type: module.Area,
+ Priority: prioBandwidth,
+ Dims: module.Dims{
+ {ID: "bytes_received", Name: "in", Algo: module.Incremental, Mul: 8, Div: 1000},
+ {ID: "bytes_sent", Name: "out", Algo: module.Incremental, Mul: -8, Div: 1000},
+ },
+ }
+ chartQueries = module.Chart{
+ ID: "queries",
+ Title: "Queries",
+ Units: "queries/s",
+ Fam: "queries",
+ Ctx: "mysql.queries",
+ Priority: prioQueries,
+ Dims: module.Dims{
+ {ID: "queries", Name: "queries", Algo: module.Incremental},
+ {ID: "questions", Name: "questions", Algo: module.Incremental},
+ {ID: "slow_queries", Name: "slow_queries", Algo: module.Incremental},
+ },
+ }
+ chartQueriesType = module.Chart{
+ ID: "queries_type",
+ Title: "Queries By Type",
+ Units: "queries/s",
+ Fam: "queries",
+ Ctx: "mysql.queries_type",
+ Type: module.Stacked,
+ Priority: prioQueriesType,
+ Dims: module.Dims{
+ {ID: "com_select", Name: "select", Algo: module.Incremental},
+ {ID: "com_delete", Name: "delete", Algo: module.Incremental},
+ {ID: "com_update", Name: "update", Algo: module.Incremental},
+ {ID: "com_insert", Name: "insert", Algo: module.Incremental},
+ {ID: "com_replace", Name: "replace", Algo: module.Incremental},
+ },
+ }
+ chartHandlers = module.Chart{
+ ID: "handlers",
+ Title: "Handlers",
+ Units: "handlers/s",
+ Fam: "handlers",
+ Ctx: "mysql.handlers",
+ Priority: prioHandlers,
+ Dims: module.Dims{
+ {ID: "handler_commit", Name: "commit", Algo: module.Incremental},
+ {ID: "handler_delete", Name: "delete", Algo: module.Incremental},
+ {ID: "handler_prepare", Name: "prepare", Algo: module.Incremental},
+ {ID: "handler_read_first", Name: "read first", Algo: module.Incremental},
+ {ID: "handler_read_key", Name: "read key", Algo: module.Incremental},
+ {ID: "handler_read_next", Name: "read next", Algo: module.Incremental},
+ {ID: "handler_read_prev", Name: "read prev", Algo: module.Incremental},
+ {ID: "handler_read_rnd", Name: "read rnd", Algo: module.Incremental},
+ {ID: "handler_read_rnd_next", Name: "read rnd next", Algo: module.Incremental},
+ {ID: "handler_rollback", Name: "rollback", Algo: module.Incremental},
+ {ID: "handler_savepoint", Name: "savepoint", Algo: module.Incremental},
+ {ID: "handler_savepoint_rollback", Name: "savepointrollback", Algo: module.Incremental},
+ {ID: "handler_update", Name: "update", Algo: module.Incremental},
+ {ID: "handler_write", Name: "write", Algo: module.Incremental},
+ },
+ }
+ chartTableOpenCacheOverflows = module.Chart{
+ ID: "table_open_cache_overflows",
+ Title: "Table open cache overflows",
+ Units: "overflows/s",
+ Fam: "open cache",
+ Ctx: "mysql.table_open_cache_overflows",
+ Priority: prioTableOpenCacheOverflows,
+ Dims: module.Dims{
+ {ID: "table_open_cache_overflows", Name: "open_cache", Algo: module.Incremental},
+ },
+ }
+ chartTableLocks = module.Chart{
+ ID: "table_locks",
+ Title: "Table Locks",
+ Units: "locks/s",
+ Fam: "locks",
+ Ctx: "mysql.table_locks",
+ Priority: prioTableLocks,
+ Dims: module.Dims{
+ {ID: "table_locks_immediate", Name: "immediate", Algo: module.Incremental},
+ {ID: "table_locks_waited", Name: "waited", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartTableJoinIssues = module.Chart{
+ ID: "join_issues",
+ Title: "Table Select Join Issues",
+ Units: "joins/s",
+ Fam: "issues",
+ Ctx: "mysql.join_issues",
+ Priority: prioTableJoinIssues,
+ Dims: module.Dims{
+ {ID: "select_full_join", Name: "full join", Algo: module.Incremental},
+ {ID: "select_full_range_join", Name: "full range join", Algo: module.Incremental},
+ {ID: "select_range", Name: "range", Algo: module.Incremental},
+ {ID: "select_range_check", Name: "range check", Algo: module.Incremental},
+ {ID: "select_scan", Name: "scan", Algo: module.Incremental},
+ },
+ }
+ chartTableSortIssues = module.Chart{
+ ID: "sort_issues",
+ Title: "Table Sort Issues",
+ Units: "issues/s",
+ Fam: "issues",
+ Ctx: "mysql.sort_issues",
+ Priority: prioTableSortIssues,
+ Dims: module.Dims{
+ {ID: "sort_merge_passes", Name: "merge passes", Algo: module.Incremental},
+ {ID: "sort_range", Name: "range", Algo: module.Incremental},
+ {ID: "sort_scan", Name: "scan", Algo: module.Incremental},
+ },
+ }
+ chartTmpOperations = module.Chart{
+ ID: "tmp",
+ Title: "Tmp Operations",
+ Units: "events/s",
+ Fam: "temporaries",
+ Ctx: "mysql.tmp",
+ Priority: prioTmpOperations,
+ Dims: module.Dims{
+ {ID: "created_tmp_disk_tables", Name: "disk tables", Algo: module.Incremental},
+ {ID: "created_tmp_files", Name: "files", Algo: module.Incremental},
+ {ID: "created_tmp_tables", Name: "tables", Algo: module.Incremental},
+ },
+ }
+ chartConnections = module.Chart{
+ ID: "connections",
+ Title: "Connections",
+ Units: "connections/s",
+ Fam: "connections",
+ Ctx: "mysql.connections",
+ Priority: prioConnections,
+ Dims: module.Dims{
+ {ID: "connections", Name: "all", Algo: module.Incremental},
+ {ID: "aborted_connects", Name: "aborted", Algo: module.Incremental},
+ },
+ }
+ chartActiveConnections = module.Chart{
+ ID: "connections_active",
+ Title: "Active Connections",
+ Units: "connections",
+ Fam: "connections",
+ Ctx: "mysql.connections_active",
+ Priority: prioActiveConnections,
+ Dims: module.Dims{
+ {ID: "threads_connected", Name: "active"},
+ {ID: "max_connections", Name: "limit"},
+ {ID: "max_used_connections", Name: "max active"},
+ },
+ }
+ chartThreads = module.Chart{
+ ID: "threads",
+ Title: "Threads",
+ Units: "threads",
+ Fam: "threads",
+ Ctx: "mysql.threads",
+ Priority: prioThreads,
+ Dims: module.Dims{
+ {ID: "threads_connected", Name: "connected"},
+ {ID: "threads_cached", Name: "cached", Mul: -1},
+ {ID: "threads_running", Name: "running"},
+ },
+ }
+ chartThreadCreationRate = module.Chart{
+ ID: "threads_creation_rate",
+ Title: "Threads Creation Rate",
+ Units: "threads/s",
+ Fam: "threads",
+ Ctx: "mysql.threads_created",
+ Priority: prioThreadsCreated,
+ Dims: module.Dims{
+ {ID: "threads_created", Name: "created", Algo: module.Incremental},
+ },
+ }
+ chartThreadsCacheMisses = module.Chart{
+ ID: "thread_cache_misses",
+ Title: "Threads Cache Misses",
+ Units: "misses",
+ Fam: "threads",
+ Ctx: "mysql.thread_cache_misses",
+ Type: module.Area,
+ Priority: prioThreadCacheMisses,
+ Dims: module.Dims{
+ {ID: "thread_cache_misses", Name: "misses", Div: 100},
+ },
+ }
+ chartInnoDBIO = module.Chart{
+ ID: "innodb_io",
+ Title: "InnoDB I/O Bandwidth",
+ Units: "KiB/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_io",
+ Type: module.Area,
+ Priority: prioInnoDBIO,
+ Dims: module.Dims{
+ {ID: "innodb_data_read", Name: "read", Algo: module.Incremental, Div: 1024},
+ {ID: "innodb_data_written", Name: "write", Algo: module.Incremental, Div: 1024},
+ },
+ }
+ chartInnoDBIOOperations = module.Chart{
+ ID: "innodb_io_ops",
+ Title: "InnoDB I/O Operations",
+ Units: "operations/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_io_ops",
+ Priority: prioInnoDBIOOperations,
+ Dims: module.Dims{
+ {ID: "innodb_data_reads", Name: "reads", Algo: module.Incremental},
+ {ID: "innodb_data_writes", Name: "writes", Algo: module.Incremental, Mul: -1},
+ {ID: "innodb_data_fsyncs", Name: "fsyncs", Algo: module.Incremental},
+ },
+ }
+ chartInnoDBPendingIOOperations = module.Chart{
+ ID: "innodb_io_pending_ops",
+ Title: "InnoDB Pending I/O Operations",
+ Units: "operations",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_io_pending_ops",
+ Priority: prioInnoDBIOPendingOperations,
+ Dims: module.Dims{
+ {ID: "innodb_data_pending_reads", Name: "reads"},
+ {ID: "innodb_data_pending_writes", Name: "writes", Mul: -1},
+ {ID: "innodb_data_pending_fsyncs", Name: "fsyncs"},
+ },
+ }
+ chartInnoDBLogOperations = module.Chart{
+ ID: "innodb_log",
+ Title: "InnoDB Log Operations",
+ Units: "operations/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_log",
+ Priority: prioInnoDBLog,
+ Dims: module.Dims{
+ {ID: "innodb_log_waits", Name: "waits", Algo: module.Incremental},
+ {ID: "innodb_log_write_requests", Name: "write requests", Algo: module.Incremental, Mul: -1},
+ {ID: "innodb_log_writes", Name: "writes", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartInnoDBCurrentRowLocks = module.Chart{
+ ID: "innodb_cur_row_lock",
+ Title: "InnoDB Current Row Locks",
+ Units: "operations",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_cur_row_lock",
+ Type: module.Area,
+ Priority: prioInnoDBCurRowLock,
+ Dims: module.Dims{
+ {ID: "innodb_row_lock_current_waits", Name: "current waits"},
+ },
+ }
+ chartInnoDBRowsOperations = module.Chart{
+ ID: "innodb_rows",
+ Title: "InnoDB Row Operations",
+ Units: "operations/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_rows",
+ Type: module.Area,
+ Priority: prioInnoDBRows,
+ Dims: module.Dims{
+ {ID: "innodb_rows_inserted", Name: "inserted", Algo: module.Incremental},
+ {ID: "innodb_rows_read", Name: "read", Algo: module.Incremental},
+ {ID: "innodb_rows_updated", Name: "updated", Algo: module.Incremental},
+ {ID: "innodb_rows_deleted", Name: "deleted", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartInnoDBBufferPoolPages = module.Chart{
+ ID: "innodb_buffer_pool_pages",
+ Title: "InnoDB Buffer Pool Pages",
+ Units: "pages",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_buffer_pool_pages",
+ Priority: prioInnoDBBufferPoolPages,
+ Dims: module.Dims{
+ {ID: "innodb_buffer_pool_pages_data", Name: "data"},
+ {ID: "innodb_buffer_pool_pages_dirty", Name: "dirty", Mul: -1},
+ {ID: "innodb_buffer_pool_pages_free", Name: "free"},
+ {ID: "innodb_buffer_pool_pages_misc", Name: "misc", Mul: -1},
+ {ID: "innodb_buffer_pool_pages_total", Name: "total"},
+ },
+ }
+ chartInnoDBBufferPoolPagesFlushed = module.Chart{
+ ID: "innodb_buffer_pool_flush_pages_requests",
+ Title: "InnoDB Buffer Pool Flush Pages Requests",
+ Units: "requests/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_buffer_pool_pages_flushed",
+ Priority: prioInnoDBBufferPoolPagesFlushed,
+ Dims: module.Dims{
+ {ID: "innodb_buffer_pool_pages_flushed", Name: "flush pages", Algo: module.Incremental},
+ },
+ }
+ chartInnoDBBufferPoolBytes = module.Chart{
+ ID: "innodb_buffer_pool_bytes",
+ Title: "InnoDB Buffer Pool Bytes",
+ Units: "MiB",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_buffer_pool_bytes",
+ Type: module.Area,
+ Priority: prioInnoDBBufferPoolBytes,
+ Dims: module.Dims{
+ {ID: "innodb_buffer_pool_bytes_data", Name: "data", Div: 1024 * 1024},
+ {ID: "innodb_buffer_pool_bytes_dirty", Name: "dirty", Mul: -1, Div: 1024 * 1024},
+ },
+ }
+ chartInnoDBBufferPoolReadAhead = module.Chart{
+ ID: "innodb_buffer_pool_read_ahead",
+ Title: "InnoDB Buffer Pool Read Pages",
+ Units: "pages/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_buffer_pool_read_ahead",
+ Type: module.Area,
+ Priority: prioInnoDBBufferPoolReadAhead,
+ Dims: module.Dims{
+ {ID: "innodb_buffer_pool_read_ahead", Name: "all", Algo: module.Incremental},
+ {ID: "innodb_buffer_pool_read_ahead_evicted", Name: "evicted", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartInnoDBBufferPoolReadAheadRnd = module.Chart{
+ ID: "innodb_buffer_pool_read_ahead_rnd",
+ Title: "InnoDB Buffer Pool Random Read-Aheads",
+ Units: "operations/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_buffer_pool_read_ahead_rnd",
+ Priority: prioInnoDBBufferPoolReadAheadRnd,
+ Dims: module.Dims{
+ {ID: "innodb_buffer_pool_read_ahead_rnd", Name: "read-ahead", Algo: module.Incremental},
+ },
+ }
+ chartInnoDBBufferPoolOperations = module.Chart{
+ ID: "innodb_buffer_pool_ops",
+ Title: "InnoDB Buffer Pool Operations",
+ Units: "operations/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_buffer_pool_ops",
+ Type: module.Area,
+ Priority: prioInnoDBBufferPoolOperations,
+ Dims: module.Dims{
+ {ID: "innodb_buffer_pool_reads", Name: "disk reads", Algo: module.Incremental},
+ {ID: "innodb_buffer_pool_wait_free", Name: "wait free", Algo: module.Incremental, Mul: -1, Div: 1},
+ },
+ }
+ chartOpenFiles = module.Chart{
+ ID: "files",
+ Title: "Open Files",
+ Units: "files",
+ Fam: "files",
+ Ctx: "mysql.files",
+ Priority: prioOpenFiles,
+ Dims: module.Dims{
+ {ID: "open_files", Name: "files"},
+ },
+ }
+ chartOpenedFilesRate = module.Chart{
+ ID: "files_rate",
+ Title: "Opened Files Rate",
+ Units: "files/s",
+ Fam: "files",
+ Ctx: "mysql.files_rate",
+ Priority: prioOpenFilesRate,
+ Dims: module.Dims{
+ {ID: "opened_files", Name: "files", Algo: module.Incremental},
+ },
+ }
+ chartConnectionErrors = module.Chart{
+ ID: "connection_errors",
+ Title: "Connection Errors",
+ Units: "errors/s",
+ Fam: "connections",
+ Ctx: "mysql.connection_errors",
+ Priority: prioConnectionErrors,
+ Dims: module.Dims{
+ {ID: "connection_errors_accept", Name: "accept", Algo: module.Incremental},
+ {ID: "connection_errors_internal", Name: "internal", Algo: module.Incremental},
+ {ID: "connection_errors_max_connections", Name: "max", Algo: module.Incremental},
+ {ID: "connection_errors_peer_address", Name: "peer addr", Algo: module.Incremental},
+ {ID: "connection_errors_select", Name: "select", Algo: module.Incremental},
+ {ID: "connection_errors_tcpwrap", Name: "tcpwrap", Algo: module.Incremental},
+ },
+ }
+ chartOpenedTables = module.Chart{
+ ID: "opened_tables",
+ Title: "Opened Tables",
+ Units: "tables/s",
+ Fam: "open tables",
+ Ctx: "mysql.opened_tables",
+ Priority: prioOpenedTables,
+ Dims: module.Dims{
+ {ID: "opened_tables", Name: "tables", Algo: module.Incremental},
+ },
+ }
+ chartOpenTables = module.Chart{
+ ID: "open_tables",
+ Title: "Open Tables",
+ Units: "tables",
+ Fam: "open tables",
+ Ctx: "mysql.open_tables",
+ Type: module.Area,
+ Priority: prioOpenTables,
+ Dims: module.Dims{
+ {ID: "table_open_cache", Name: "cache"},
+ {ID: "open_tables", Name: "tables"},
+ },
+ }
+ chartProcessListFetchQueryDuration = module.Chart{
+ ID: "process_list_fetch_duration",
+ Title: "Process List Fetch Duration",
+ Units: "milliseconds",
+ Fam: "process list",
+ Ctx: "mysql.process_list_fetch_query_duration",
+ Priority: prioProcessListFetchQueryDuration,
+ Dims: module.Dims{
+ {ID: "process_list_fetch_query_duration", Name: "duration"},
+ },
+ }
+ chartProcessListQueries = module.Chart{
+ ID: "process_list_queries_count",
+ Title: "Queries Count",
+ Units: "queries",
+ Fam: "process list",
+ Ctx: "mysql.process_list_queries_count",
+ Type: module.Stacked,
+ Priority: prioProcessListQueries,
+ Dims: module.Dims{
+ {ID: "process_list_queries_count_system", Name: "system"},
+ {ID: "process_list_queries_count_user", Name: "user"},
+ },
+ }
+ chartProcessListLongestQueryDuration = module.Chart{
+ ID: "process_list_longest_query_duration",
+ Title: "Longest Query Duration",
+ Units: "seconds",
+ Fam: "process list",
+ Ctx: "mysql.process_list_longest_query_duration",
+ Priority: prioProcessListLongestQueryDuration,
+ Dims: module.Dims{
+ {ID: "process_list_longest_query_duration", Name: "duration"},
+ },
+ }
+)
+
+var chartsInnoDBOSLog = module.Charts{
+ chartInnoDBOSLogPendingOperations.Copy(),
+ chartInnoDBOSLogOperations.Copy(),
+ chartInnoDBOSLogIO.Copy(),
+}
+
+var (
+ chartInnoDBOSLogPendingOperations = module.Chart{
+ ID: "innodb_os_log",
+ Title: "InnoDB OS Log Pending Operations",
+ Units: "operations",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_os_log",
+ Priority: prioInnoDBOSLog,
+ Dims: module.Dims{
+ {ID: "innodb_os_log_pending_fsyncs", Name: "fsyncs"},
+ {ID: "innodb_os_log_pending_writes", Name: "writes", Mul: -1},
+ },
+ }
+ chartInnoDBOSLogOperations = module.Chart{
+ ID: "innodb_os_log_fsync_writes",
+ Title: "InnoDB OS Log Operations",
+ Units: "operations/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_os_log_fsync_writes",
+ Priority: prioInnoDBOSLogFsyncWrites,
+ Dims: module.Dims{
+ {ID: "innodb_os_log_fsyncs", Name: "fsyncs", Algo: module.Incremental},
+ },
+ }
+ chartInnoDBOSLogIO = module.Chart{
+ ID: "innodb_os_log_io",
+ Title: "InnoDB OS Log Bandwidth",
+ Units: "KiB/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_os_log_io",
+ Type: module.Area,
+ Priority: prioInnoDBOSLogIO,
+ Dims: module.Dims{
+ {ID: "innodb_os_log_written", Name: "write", Algo: module.Incremental, Mul: -1, Div: 1024},
+ },
+ }
+)
+
+var chartInnoDBDeadlocks = module.Chart{
+ ID: "innodb_deadlocks",
+ Title: "InnoDB Deadlocks",
+ Units: "operations/s",
+ Fam: "innodb",
+ Ctx: "mysql.innodb_deadlocks",
+ Type: module.Area,
+ Priority: prioInnoDBDeadlocks,
+ Dims: module.Dims{
+ {ID: "innodb_deadlocks", Name: "deadlocks", Algo: module.Incremental},
+ },
+}
+
+var chartsQCache = module.Charts{
+ chartQCacheOperations.Copy(),
+ chartQCacheQueries.Copy(),
+ chartQCacheFreeMemory.Copy(),
+ chartQCacheMemoryBlocks.Copy(),
+}
+
+var (
+ chartQCacheOperations = module.Chart{
+ ID: "qcache_ops",
+ Title: "QCache Operations",
+ Units: "queries/s",
+ Fam: "qcache",
+ Ctx: "mysql.qcache_ops",
+ Priority: prioQCacheOperations,
+ Dims: module.Dims{
+ {ID: "qcache_hits", Name: "hits", Algo: module.Incremental},
+ {ID: "qcache_lowmem_prunes", Name: "lowmem prunes", Algo: module.Incremental, Mul: -1},
+ {ID: "qcache_inserts", Name: "inserts", Algo: module.Incremental},
+ {ID: "qcache_not_cached", Name: "not cached", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartQCacheQueries = module.Chart{
+ ID: "qcache",
+ Title: "QCache Queries in Cache",
+ Units: "queries",
+ Fam: "qcache",
+ Ctx: "mysql.qcache",
+ Priority: prioQCacheQueries,
+ Dims: module.Dims{
+ {ID: "qcache_queries_in_cache", Name: "queries", Algo: module.Absolute},
+ },
+ }
+ chartQCacheFreeMemory = module.Chart{
+ ID: "qcache_freemem",
+ Title: "QCache Free Memory",
+ Units: "MiB",
+ Fam: "qcache",
+ Ctx: "mysql.qcache_freemem",
+ Type: module.Area,
+ Priority: prioQCacheFreeMem,
+ Dims: module.Dims{
+ {ID: "qcache_free_memory", Name: "free", Div: 1024 * 1024},
+ },
+ }
+ chartQCacheMemoryBlocks = module.Chart{
+ ID: "qcache_memblocks",
+ Title: "QCache Memory Blocks",
+ Units: "blocks",
+ Fam: "qcache",
+ Ctx: "mysql.qcache_memblocks",
+ Priority: prioQCacheMemBlocks,
+ Dims: module.Dims{
+ {ID: "qcache_free_blocks", Name: "free"},
+ {ID: "qcache_total_blocks", Name: "total"},
+ },
+ }
+)
+
+var chartsGalera = module.Charts{
+ chartGaleraWriteSets.Copy(),
+ chartGaleraBytes.Copy(),
+ chartGaleraQueue.Copy(),
+ chartGaleraConflicts.Copy(),
+ chartGaleraFlowControl.Copy(),
+ chartGaleraClusterStatus.Copy(),
+ chartGaleraClusterState.Copy(),
+ chartGaleraClusterSize.Copy(),
+ chartGaleraClusterWeight.Copy(),
+ chartGaleraClusterConnectionStatus.Copy(),
+ chartGaleraReadinessState.Copy(),
+ chartGaleraOpenTransactions.Copy(),
+ chartGaleraThreads.Copy(),
+}
+var (
+ chartGaleraWriteSets = module.Chart{
+ ID: "galera_writesets",
+ Title: "Replicated Writesets",
+ Units: "writesets/s",
+ Fam: "galera",
+ Ctx: "mysql.galera_writesets",
+ Priority: prioGaleraWriteSets,
+ Dims: module.Dims{
+ {ID: "wsrep_received", Name: "rx", Algo: module.Incremental},
+ {ID: "wsrep_replicated", Name: "tx", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartGaleraBytes = module.Chart{
+ ID: "galera_bytes",
+ Title: "Replicated Bytes",
+ Units: "KiB/s",
+ Fam: "galera",
+ Ctx: "mysql.galera_bytes",
+ Type: module.Area,
+ Priority: prioGaleraBytes,
+ Dims: module.Dims{
+ {ID: "wsrep_received_bytes", Name: "rx", Algo: module.Incremental, Div: 1024},
+ {ID: "wsrep_replicated_bytes", Name: "tx", Algo: module.Incremental, Mul: -1, Div: 1024},
+ },
+ }
+ chartGaleraQueue = module.Chart{
+ ID: "galera_queue",
+ Title: "Galera Queue",
+ Units: "writesets",
+ Fam: "galera",
+ Ctx: "mysql.galera_queue",
+ Priority: prioGaleraQueue,
+ Dims: module.Dims{
+ {ID: "wsrep_local_recv_queue", Name: "rx"},
+ {ID: "wsrep_local_send_queue", Name: "tx", Mul: -1},
+ },
+ }
+ chartGaleraConflicts = module.Chart{
+ ID: "galera_conflicts",
+ Title: "Replication Conflicts",
+ Units: "transactions",
+ Fam: "galera",
+ Ctx: "mysql.galera_conflicts",
+ Type: module.Area,
+ Priority: prioGaleraConflicts,
+ Dims: module.Dims{
+ {ID: "wsrep_local_bf_aborts", Name: "bf aborts", Algo: module.Incremental},
+ {ID: "wsrep_local_cert_failures", Name: "cert fails", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartGaleraFlowControl = module.Chart{
+ ID: "galera_flow_control",
+ Title: "Flow Control",
+ Units: "ms",
+ Fam: "galera",
+ Ctx: "mysql.galera_flow_control",
+ Type: module.Area,
+ Priority: prioGaleraFlowControl,
+ Dims: module.Dims{
+ {ID: "wsrep_flow_control_paused_ns", Name: "paused", Algo: module.Incremental, Div: 1000000},
+ },
+ }
+ chartGaleraClusterStatus = module.Chart{
+ ID: "galera_cluster_status",
+ Title: "Cluster Component Status",
+ Units: "status",
+ Fam: "galera",
+ Ctx: "mysql.galera_cluster_status",
+ Priority: prioGaleraClusterStatus,
+ Dims: module.Dims{
+ {ID: "wsrep_cluster_status_primary", Name: "primary"},
+ {ID: "wsrep_cluster_status_non_primary", Name: "non_primary"},
+ {ID: "wsrep_cluster_status_disconnected", Name: "disconnected"},
+ },
+ }
+ chartGaleraClusterState = module.Chart{
+ ID: "galera_cluster_state",
+ Title: "Cluster Component State",
+ Units: "state",
+ Fam: "galera",
+ Ctx: "mysql.galera_cluster_state",
+ Priority: prioGaleraClusterState,
+ Dims: module.Dims{
+ {ID: "wsrep_local_state_undefined", Name: "undefined"},
+ {ID: "wsrep_local_state_joiner", Name: "joining"},
+ {ID: "wsrep_local_state_donor", Name: "donor"},
+ {ID: "wsrep_local_state_joined", Name: "joined"},
+ {ID: "wsrep_local_state_synced", Name: "synced"},
+ {ID: "wsrep_local_state_error", Name: "error"},
+ },
+ }
+ chartGaleraClusterSize = module.Chart{
+ ID: "galera_cluster_size",
+ Title: "Number of Nodes in the Cluster",
+ Units: "nodes",
+ Fam: "galera",
+ Ctx: "mysql.galera_cluster_size",
+ Priority: prioGaleraClusterSize,
+ Dims: module.Dims{
+ {ID: "wsrep_cluster_size", Name: "nodes"},
+ },
+ }
+ chartGaleraClusterWeight = module.Chart{
+ ID: "galera_cluster_weight",
+ Title: "The Total Weight of the Current Members in the Cluster",
+ Units: "weight",
+ Fam: "galera",
+ Ctx: "mysql.galera_cluster_weight",
+ Priority: prioGaleraClusterWeight,
+ Dims: module.Dims{
+ {ID: "wsrep_cluster_weight", Name: "weight"},
+ },
+ }
+ chartGaleraClusterConnectionStatus = module.Chart{
+ ID: "galera_connected",
+ Title: "Cluster Connection Status",
+ Units: "boolean",
+ Fam: "galera",
+ Ctx: "mysql.galera_connected",
+ Priority: prioGaleraClusterConnectionStatus,
+ Dims: module.Dims{
+ {ID: "wsrep_connected", Name: "connected"},
+ },
+ }
+ chartGaleraReadinessState = module.Chart{
+ ID: "galera_ready",
+ Title: "Accept Queries Readiness Status",
+ Units: "boolean",
+ Fam: "galera",
+ Ctx: "mysql.galera_ready",
+ Priority: prioGaleraReadinessState,
+ Dims: module.Dims{
+ {ID: "wsrep_ready", Name: "ready"},
+ },
+ }
+ chartGaleraOpenTransactions = module.Chart{
+ ID: "galera_open_transactions",
+ Title: "Open Transactions",
+ Units: "transactions",
+ Fam: "galera",
+ Ctx: "mysql.galera_open_transactions",
+ Priority: prioGaleraOpenTransactions,
+ Dims: module.Dims{
+ {ID: "wsrep_open_transactions", Name: "open"},
+ },
+ }
+ chartGaleraThreads = module.Chart{
+ ID: "galera_thread_count",
+ Title: "Total Number of WSRep (applier/rollbacker) Threads",
+ Units: "threads",
+ Fam: "galera",
+ Ctx: "mysql.galera_thread_count",
+ Priority: prioGaleraThreadCount,
+ Dims: module.Dims{
+ {ID: "wsrep_thread_count", Name: "threads"},
+ },
+ }
+)
+
+var chartsMyISAM = module.Charts{
+ chartMyISAMKeyCacheBlocks.Copy(),
+ chartMyISAMKeyCacheRequests.Copy(),
+ chartMyISAMKeyCacheDiskOperations.Copy(),
+}
+var (
+ chartMyISAMKeyCacheBlocks = module.Chart{
+ ID: "key_blocks",
+ Title: "MyISAM Key Cache Blocks",
+ Units: "blocks",
+ Fam: "myisam",
+ Ctx: "mysql.key_blocks",
+ Priority: prioMyISAMKeyBlocks,
+ Dims: module.Dims{
+ {ID: "key_blocks_unused", Name: "unused"},
+ {ID: "key_blocks_used", Name: "used", Mul: -1},
+ {ID: "key_blocks_not_flushed", Name: "not flushed"},
+ },
+ }
+ chartMyISAMKeyCacheRequests = module.Chart{
+ ID: "key_requests",
+ Title: "MyISAM Key Cache Requests",
+ Units: "requests/s",
+ Fam: "myisam",
+ Ctx: "mysql.key_requests",
+ Type: module.Area,
+ Priority: prioMyISAMKeyRequests,
+ Dims: module.Dims{
+ {ID: "key_read_requests", Name: "reads", Algo: module.Incremental},
+ {ID: "key_write_requests", Name: "writes", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ chartMyISAMKeyCacheDiskOperations = module.Chart{
+ ID: "key_disk_ops",
+ Title: "MyISAM Key Cache Disk Operations",
+ Units: "operations/s",
+ Fam: "myisam",
+ Ctx: "mysql.key_disk_ops",
+ Priority: prioMyISAMKeyDiskOperations,
+ Type: module.Area,
+ Dims: module.Dims{
+ {ID: "key_reads", Name: "reads", Algo: module.Incremental},
+ {ID: "key_writes", Name: "writes", Algo: module.Incremental, Mul: -1},
+ },
+ }
+)
+
+var chartsBinlog = module.Charts{
+ chartBinlogCache.Copy(),
+ chartBinlogStatementCache.Copy(),
+}
+
+var (
+ chartBinlogCache = module.Chart{
+ ID: "binlog_cache",
+ Title: "Binlog Cache",
+ Units: "transactions/s",
+ Fam: "binlog",
+ Ctx: "mysql.binlog_cache",
+ Priority: prioBinlogCache,
+ Dims: module.Dims{
+ {ID: "binlog_cache_disk_use", Name: "disk", Algo: module.Incremental},
+ {ID: "binlog_cache_use", Name: "all", Algo: module.Incremental},
+ },
+ }
+ chartBinlogStatementCache = module.Chart{
+ ID: "binlog_stmt_cache",
+ Title: "Binlog Statement Cache",
+ Units: "statements/s",
+ Fam: "binlog",
+ Ctx: "mysql.binlog_stmt_cache",
+ Priority: prioBinlogStatementCache,
+ Dims: module.Dims{
+ {ID: "binlog_stmt_cache_disk_use", Name: "disk", Algo: module.Incremental},
+ {ID: "binlog_stmt_cache_use", Name: "all", Algo: module.Incremental},
+ },
+ }
+)
+
+var (
+ chartsSlaveReplication = module.Charts{
+ chartSlaveBehindSeconds.Copy(),
+ chartSlaveSQLIOThreadRunningState.Copy(),
+ }
+
+ chartSlaveBehindSeconds = module.Chart{
+ ID: "slave_behind",
+ Title: "Slave Behind Seconds",
+ Units: "seconds",
+ Fam: "slave",
+ Ctx: "mysql.slave_behind",
+ Priority: prioSlaveSecondsBehindMaster,
+ Dims: module.Dims{
+ {ID: "seconds_behind_master", Name: "seconds"},
+ },
+ }
+ chartSlaveSQLIOThreadRunningState = module.Chart{
+ ID: "slave_thread_running",
+ Title: "I/O / SQL Thread Running State",
+ Units: "boolean",
+ Fam: "slave",
+ Ctx: "mysql.slave_status",
+ Priority: prioSlaveSQLIOThreadRunningState,
+ Dims: module.Dims{
+ {ID: "slave_sql_running", Name: "sql_running"},
+ {ID: "slave_io_running", Name: "io_running"},
+ },
+ }
+)
+
+func newSlaveReplConnCharts(conn string) *module.Charts {
+ orig := conn
+ conn = strings.ToLower(conn)
+ cs := chartsSlaveReplication.Copy()
+ for _, chart := range *cs {
+ chart.ID += "_" + conn
+ chart.Title += " Connection " + orig
+ for _, dim := range chart.Dims {
+ dim.ID += "_" + conn
+ }
+ }
+ return cs
+}
+
+func newMariaDBUserStatisticsCharts(user string) *module.Charts {
+ lcUser := strings.ToLower(user)
+ charts := chartsTmplUserStats.Copy()
+ for _, c := range *charts {
+ c.ID = fmt.Sprintf(c.ID, lcUser)
+ c.Labels = []module.Label{
+ {Key: "user", Value: user},
+ }
+ for _, d := range c.Dims {
+ d.ID = fmt.Sprintf(d.ID, lcUser)
+ }
+ }
+ return charts
+}
+
+func newPerconaUserStatisticsCharts(user string) *module.Charts {
+ lcUser := strings.ToLower(user)
+ charts := chartsTmplPerconaUserStats.Copy()
+ for _, c := range *charts {
+ c.ID = fmt.Sprintf(c.ID, lcUser)
+ c.Labels = []module.Label{
+ {Key: "user", Value: user},
+ }
+ for _, d := range c.Dims {
+ d.ID = fmt.Sprintf(d.ID, lcUser)
+ }
+ }
+ return charts
+}
+
+var (
+ chartsTmplUserStats = module.Charts{
+ chartUserStatsCPU.Copy(),
+ chartTmplUserStatsRowsOperations.Copy(),
+ chartTmplUserStatsCommands.Copy(),
+ chartTmplUserStatsDeniedCommands.Copy(),
+ chartTmplUserStatsTransactions.Copy(),
+ chartTmplUserStatsBinlogWritten.Copy(),
+ chartTmplUserStatsEmptyQueries.Copy(),
+ chartTmplUserStatsCreatedConnections.Copy(),
+ chartTmplUserStatsLostConnections.Copy(),
+ chartTmplUserStatsDeniedConnections.Copy(),
+ }
+ chartsTmplPerconaUserStats = module.Charts{
+ chartUserStatsCPU.Copy(),
+ chartTmplPerconaUserStatsRowsOperations.Copy(),
+ chartTmplUserStatsCommands.Copy(),
+ chartTmplUserStatsDeniedCommands.Copy(),
+ chartTmplUserStatsTransactions.Copy(),
+ chartTmplUserStatsBinlogWritten.Copy(),
+ chartTmplUserStatsEmptyQueries.Copy(),
+ chartTmplUserStatsCreatedConnections.Copy(),
+ chartTmplUserStatsLostConnections.Copy(),
+ chartTmplUserStatsDeniedConnections.Copy(),
+ }
+
+ chartUserStatsCPU = module.Chart{
+ ID: "userstats_cpu_%s",
+ Title: "User CPU Time",
+ Units: "percentage",
+ Fam: "user cpu time",
+ Ctx: "mysql.userstats_cpu",
+ Priority: prioUserStatsCPUTime,
+ Dims: module.Dims{
+ {ID: "userstats_%s_cpu_time", Name: "used", Mul: 100, Div: 1000, Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsRowsOperations = module.Chart{
+ ID: "userstats_rows_%s",
+ Title: "User Rows Operations",
+ Units: "operations/s",
+ Fam: "user operations",
+ Ctx: "mysql.userstats_rows",
+ Type: module.Stacked,
+ Priority: prioUserStatsRows,
+ Dims: module.Dims{
+ {ID: "userstats_%s_rows_read", Name: "read", Algo: module.Incremental},
+ {ID: "userstats_%s_rows_sent", Name: "sent", Algo: module.Incremental},
+ {ID: "userstats_%s_rows_updated", Name: "updated", Algo: module.Incremental},
+ {ID: "userstats_%s_rows_inserted", Name: "inserted", Algo: module.Incremental},
+ {ID: "userstats_%s_rows_deleted", Name: "deleted", Algo: module.Incremental},
+ },
+ }
+ chartTmplPerconaUserStatsRowsOperations = module.Chart{
+ ID: "userstats_rows_%s",
+ Title: "User Rows Operations",
+ Units: "operations/s",
+ Fam: "user operations",
+ Ctx: "mysql.userstats_rows",
+ Type: module.Stacked,
+ Priority: prioUserStatsRows,
+ Dims: module.Dims{
+ {ID: "userstats_%s_rows_fetched", Name: "fetched", Algo: module.Incremental},
+ {ID: "userstats_%s_rows_updated", Name: "updated", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsCommands = module.Chart{
+ ID: "userstats_commands_%s",
+ Title: "User Commands",
+ Units: "commands/s",
+ Fam: "user commands",
+ Ctx: "mysql.userstats_commands",
+ Type: module.Stacked,
+ Priority: prioUserStatsCommands,
+ Dims: module.Dims{
+ {ID: "userstats_%s_select_commands", Name: "select", Algo: module.Incremental},
+ {ID: "userstats_%s_update_commands", Name: "update", Algo: module.Incremental},
+ {ID: "userstats_%s_other_commands", Name: "other", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsDeniedCommands = module.Chart{
+ ID: "userstats_denied_commands_%s",
+ Title: "User Denied Commands",
+ Units: "commands/s",
+ Fam: "user commands denied",
+ Ctx: "mysql.userstats_denied_commands",
+ Priority: prioUserStatsDeniedCommands,
+ Dims: module.Dims{
+ {ID: "userstats_%s_access_denied", Name: "denied", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsTransactions = module.Chart{
+ ID: "userstats_transactions_%s",
+ Title: "User Transactions",
+ Units: "transactions/s",
+ Fam: "user transactions",
+ Ctx: "mysql.userstats_created_transactions",
+ Type: module.Area,
+ Priority: prioUserStatsTransactions,
+ Dims: module.Dims{
+ {ID: "userstats_%s_commit_transactions", Name: "commit", Algo: module.Incremental},
+ {ID: "userstats_%s_rollback_transactions", Name: "rollback", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsBinlogWritten = module.Chart{
+ ID: "userstats_binlog_written_%s",
+ Title: "User Binlog Written",
+ Units: "B/s",
+ Fam: "user binlog written",
+ Ctx: "mysql.userstats_binlog_written",
+ Priority: prioUserStatsBinlogWritten,
+ Dims: module.Dims{
+ {ID: "userstats_%s_binlog_bytes_written", Name: "written", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsEmptyQueries = module.Chart{
+ ID: "userstats_empty_queries_%s",
+ Title: "User Empty Queries",
+ Units: "queries/s",
+ Fam: "user empty queries",
+ Ctx: "mysql.userstats_empty_queries",
+ Priority: prioUserStatsEmptyQueries,
+ Dims: module.Dims{
+ {ID: "userstats_%s_empty_queries", Name: "empty", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsCreatedConnections = module.Chart{
+ ID: "userstats_connections_%s",
+ Title: "User Created Connections",
+ Units: "connections/s",
+ Fam: "user connections created ",
+ Ctx: "mysql.userstats_connections",
+ Priority: prioUserStatsConnections,
+ Dims: module.Dims{
+ {ID: "userstats_%s_total_connections", Name: "created", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsLostConnections = module.Chart{
+ ID: "userstats_lost_connections_%s",
+ Title: "User Lost Connections",
+ Units: "connections/s",
+ Fam: "user connections lost",
+ Ctx: "mysql.userstats_lost_connections",
+ Priority: prioUserStatsLostConnections,
+ Dims: module.Dims{
+ {ID: "userstats_%s_lost_connections", Name: "lost", Algo: module.Incremental},
+ },
+ }
+ chartTmplUserStatsDeniedConnections = module.Chart{
+ ID: "userstats_denied_connections_%s",
+ Title: "User Denied Connections",
+ Units: "connections/s",
+ Fam: "user connections denied",
+ Ctx: "mysql.userstats_denied_connections",
+ Priority: prioUserStatsDeniedConnections,
+ Dims: module.Dims{
+ {ID: "userstats_%s_denied_connections", Name: "denied", Algo: module.Incremental},
+ },
+ }
+)
+
+func (m *MySQL) addSlaveReplicationConnCharts(conn string) {
+ var charts *module.Charts
+ if conn == "" {
+ charts = chartsSlaveReplication.Copy()
+ } else {
+ charts = newSlaveReplConnCharts(conn)
+ }
+ if err := m.Charts().Add(*charts...); err != nil {
+ m.Warning(err)
+ }
+}
+
+func (m *MySQL) addUserStatisticsCharts(user string) {
+ if m.isPercona {
+ if err := m.Charts().Add(*newPerconaUserStatisticsCharts(user)...); err != nil {
+ m.Warning(err)
+ }
+ } else {
+ if err := m.Charts().Add(*newMariaDBUserStatisticsCharts(user)...); err != nil {
+ m.Warning(err)
+ }
+ }
+}
+
+func (m *MySQL) addInnoDBOSLogCharts() {
+ if err := m.Charts().Add(*chartsInnoDBOSLog.Copy()...); err != nil {
+ m.Warning(err)
+ }
+}
+
+func (m *MySQL) addMyISAMCharts() {
+ if err := m.Charts().Add(*chartsMyISAM.Copy()...); err != nil {
+ m.Warning(err)
+ }
+}
+
+func (m *MySQL) addBinlogCharts() {
+ if err := m.Charts().Add(*chartsBinlog.Copy()...); err != nil {
+ m.Warning(err)
+ }
+}
+
+func (m *MySQL) addInnodbDeadlocksChart() {
+ if err := m.Charts().Add(chartInnoDBDeadlocks.Copy()); err != nil {
+ m.Warning(err)
+ }
+}
+
+func (m *MySQL) addQCacheCharts() {
+ if err := m.Charts().Add(*chartsQCache.Copy()...); err != nil {
+ m.Warning(err)
+ }
+}
+
+func (m *MySQL) addGaleraCharts() {
+ if err := m.Charts().Add(*chartsGalera.Copy()...); err != nil {
+ m.Warning(err)
+ }
+}
+
+func (m *MySQL) addTableOpenCacheOverflowChart() {
+ if err := m.Charts().Add(chartTableOpenCacheOverflows.Copy()); err != nil {
+ m.Warning(err)
+ }
+}