-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for MaxIdleTimeClosed stat in go version 1.15+ (#12)
- Loading branch information
1 parent
c437853
commit 1c82b80
Showing
7 changed files
with
307 additions
and
143 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,4 +12,4 @@ | |
*.out | ||
|
||
# Dependency directories (remove the comment below to include it) | ||
# vendor/ | ||
vendor/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
// +build go1.11,!go1.15 | ||
|
||
package sqlstats | ||
|
||
import ( | ||
"github.com/prometheus/client_golang/prometheus" | ||
) | ||
|
||
// StatsCollector implements the prometheus.Collector interface. | ||
type StatsCollector struct { | ||
sg StatsGetter | ||
|
||
// descriptions of exported metrics | ||
maxOpenDesc *prometheus.Desc | ||
openDesc *prometheus.Desc | ||
inUseDesc *prometheus.Desc | ||
idleDesc *prometheus.Desc | ||
waitedForDesc *prometheus.Desc | ||
blockedSecondsDesc *prometheus.Desc | ||
closedMaxIdleDesc *prometheus.Desc | ||
closedMaxLifetimeDesc *prometheus.Desc | ||
} | ||
|
||
// NewStatsCollector creates a new StatsCollector. | ||
func NewStatsCollector(dbName string, sg StatsGetter) *StatsCollector { | ||
labels := prometheus.Labels{"db_name": dbName} | ||
return &StatsCollector{ | ||
sg: sg, | ||
maxOpenDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "max_open"), | ||
"Maximum number of open connections to the database.", | ||
nil, | ||
labels, | ||
), | ||
openDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "open"), | ||
"The number of established connections both in use and idle.", | ||
nil, | ||
labels, | ||
), | ||
inUseDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "in_use"), | ||
"The number of connections currently in use.", | ||
nil, | ||
labels, | ||
), | ||
idleDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "idle"), | ||
"The number of idle connections.", | ||
nil, | ||
labels, | ||
), | ||
waitedForDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "waited_for"), | ||
"The total number of connections waited for.", | ||
nil, | ||
labels, | ||
), | ||
blockedSecondsDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "blocked_seconds"), | ||
"The total time blocked waiting for a new connection.", | ||
nil, | ||
labels, | ||
), | ||
closedMaxIdleDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "closed_max_idle"), | ||
"The total number of connections closed due to SetMaxIdleConns.", | ||
nil, | ||
labels, | ||
), | ||
closedMaxLifetimeDesc: prometheus.NewDesc( | ||
prometheus.BuildFQName(namespace, subsystem, "closed_max_lifetime"), | ||
"The total number of connections closed due to SetConnMaxLifetime.", | ||
nil, | ||
labels, | ||
), | ||
} | ||
} | ||
|
||
// Describe implements the prometheus.Collector interface. | ||
func (c StatsCollector) Describe(ch chan<- *prometheus.Desc) { | ||
ch <- c.maxOpenDesc | ||
ch <- c.openDesc | ||
ch <- c.inUseDesc | ||
ch <- c.idleDesc | ||
ch <- c.waitedForDesc | ||
ch <- c.blockedSecondsDesc | ||
ch <- c.closedMaxIdleDesc | ||
ch <- c.closedMaxLifetimeDesc | ||
} | ||
|
||
// Collect implements the prometheus.Collector interface. | ||
func (c StatsCollector) Collect(ch chan<- prometheus.Metric) { | ||
stats := c.sg.Stats() | ||
|
||
ch <- prometheus.MustNewConstMetric( | ||
c.maxOpenDesc, | ||
prometheus.GaugeValue, | ||
float64(stats.MaxOpenConnections), | ||
) | ||
ch <- prometheus.MustNewConstMetric( | ||
c.openDesc, | ||
prometheus.GaugeValue, | ||
float64(stats.OpenConnections), | ||
) | ||
ch <- prometheus.MustNewConstMetric( | ||
c.inUseDesc, | ||
prometheus.GaugeValue, | ||
float64(stats.InUse), | ||
) | ||
ch <- prometheus.MustNewConstMetric( | ||
c.idleDesc, | ||
prometheus.GaugeValue, | ||
float64(stats.Idle), | ||
) | ||
ch <- prometheus.MustNewConstMetric( | ||
c.waitedForDesc, | ||
prometheus.CounterValue, | ||
float64(stats.WaitCount), | ||
) | ||
ch <- prometheus.MustNewConstMetric( | ||
c.blockedSecondsDesc, | ||
prometheus.CounterValue, | ||
stats.WaitDuration.Seconds(), | ||
) | ||
ch <- prometheus.MustNewConstMetric( | ||
c.closedMaxIdleDesc, | ||
prometheus.CounterValue, | ||
float64(stats.MaxIdleClosed), | ||
) | ||
ch <- prometheus.MustNewConstMetric( | ||
c.closedMaxLifetimeDesc, | ||
prometheus.CounterValue, | ||
float64(stats.MaxLifetimeClosed), | ||
) | ||
} |
Oops, something went wrong.