mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			145 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
| package sqlstore
 | |
| 
 | |
| import (
 | |
| 	"github.com/dlmiddlecote/sqlstats"
 | |
| 	"github.com/prometheus/client_golang/prometheus"
 | |
| )
 | |
| 
 | |
| type sqlStoreMetrics struct {
 | |
| 	db sqlstats.StatsGetter
 | |
| 
 | |
| 	// gauges
 | |
| 	maxOpenConnections *prometheus.Desc
 | |
| 	openConnections    *prometheus.Desc
 | |
| 	inUse              *prometheus.Desc
 | |
| 	idle               *prometheus.Desc
 | |
| 
 | |
| 	// counters
 | |
| 	waitCount         *prometheus.Desc
 | |
| 	waitDuration      *prometheus.Desc
 | |
| 	maxIdleClosed     *prometheus.Desc
 | |
| 	maxIdleTimeClosed *prometheus.Desc
 | |
| 	maxLifetimeClosed *prometheus.Desc
 | |
| }
 | |
| 
 | |
| func newSQLStoreMetrics(db sqlstats.StatsGetter) *sqlStoreMetrics {
 | |
| 	ns := "grafana"
 | |
| 	sub := "database"
 | |
| 
 | |
| 	return &sqlStoreMetrics{
 | |
| 		db: db,
 | |
| 		maxOpenConnections: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_max_open"),
 | |
| 			"Maximum number of open connections to the database",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 		openConnections: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_open"),
 | |
| 			"The number of established connections both in use and idle",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 		inUse: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_in_use"),
 | |
| 			"The number of connections currently in use",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 		idle: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_idle"),
 | |
| 			"The number of idle connections",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 
 | |
| 		waitCount: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_wait_count_total"),
 | |
| 			"The total number of connections waited for",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 		waitDuration: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_wait_duration_seconds"),
 | |
| 			"The total time blocked waiting for a new connection",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 		maxIdleClosed: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_max_idle_closed_total"),
 | |
| 			"The total number of connections closed due to SetMaxIdleConns",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 		maxIdleTimeClosed: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_max_idle_closed_seconds"),
 | |
| 			"The total number of connections closed due to SetConnMaxIdleTime",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 		maxLifetimeClosed: prometheus.NewDesc(
 | |
| 			prometheus.BuildFQName(ns, sub, "conn_max_lifetime_closed_total"),
 | |
| 			"The total number of connections closed due to SetConnMaxLifetime",
 | |
| 			nil, nil,
 | |
| 		),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Collect implements Prometheus.Collector.
 | |
| func (m *sqlStoreMetrics) Collect(ch chan<- prometheus.Metric) {
 | |
| 	stats := m.db.Stats()
 | |
| 
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.maxOpenConnections,
 | |
| 		prometheus.GaugeValue,
 | |
| 		float64(stats.MaxOpenConnections),
 | |
| 	)
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.openConnections,
 | |
| 		prometheus.GaugeValue,
 | |
| 		float64(stats.OpenConnections),
 | |
| 	)
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.inUse,
 | |
| 		prometheus.GaugeValue,
 | |
| 		float64(stats.InUse),
 | |
| 	)
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.idle,
 | |
| 		prometheus.GaugeValue,
 | |
| 		float64(stats.Idle),
 | |
| 	)
 | |
| 
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.waitCount,
 | |
| 		prometheus.CounterValue,
 | |
| 		float64(stats.WaitCount),
 | |
| 	)
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.waitDuration,
 | |
| 		prometheus.CounterValue,
 | |
| 		stats.WaitDuration.Seconds(),
 | |
| 	)
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.maxIdleClosed,
 | |
| 		prometheus.CounterValue,
 | |
| 		float64(stats.MaxIdleClosed),
 | |
| 	)
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.maxIdleTimeClosed,
 | |
| 		prometheus.CounterValue,
 | |
| 		float64(stats.MaxIdleTimeClosed),
 | |
| 	)
 | |
| 	ch <- prometheus.MustNewConstMetric(
 | |
| 		m.maxLifetimeClosed,
 | |
| 		prometheus.CounterValue,
 | |
| 		float64(stats.MaxLifetimeClosed),
 | |
| 	)
 | |
| }
 | |
| 
 | |
| // Describe implements Prometheus.Collector.
 | |
| func (m *sqlStoreMetrics) Describe(ch chan<- *prometheus.Desc) {
 | |
| 	ch <- m.maxOpenConnections
 | |
| 	ch <- m.openConnections
 | |
| 	ch <- m.inUse
 | |
| 	ch <- m.idle
 | |
| 
 | |
| 	ch <- m.waitCount
 | |
| 	ch <- m.waitDuration
 | |
| 	ch <- m.maxIdleClosed
 | |
| 	ch <- m.maxIdleTimeClosed
 | |
| 	ch <- m.maxLifetimeClosed
 | |
| }
 |