docs: expose pool stats as metrics (#694)
Add some documentation regarding exposing metrics
Fixes: #693
diff --git a/redis/doc.go b/redis/doc.go
index 69ad506..a539219 100644
--- a/redis/doc.go
+++ b/redis/doc.go
@@ -174,4 +174,35 @@
// non-recoverable error such as a network error or protocol parsing error. If
// Err() returns a non-nil value, then the connection is not usable and should
// be closed.
+//
+// Metrics
+//
+// Metrics regarding the connection pool and its connections are exposed via
+// the pool.Stats() method, which can then be used with your preferred metrics
+// library.
+//
+// The below code snippet demonstrates an example using the
+// "github.com/prometheus/client_golang/prometheus" library.
+// Note that all the metrics exposed are gauges, even though the wait count and
+// wait duration are being used as counters - this is required to "set" the
+// value rather than add/increment it.
+//
+// func collectRedisPoolStats(pool *redis.Pool, maxConn float64) {
+// ticker := time.NewTicker(5 * time.Second)
+// redisPoolMax.Set(maxConn)
+//
+// go func() {
+// defer ticker.Stop()
+//
+// for range ticker.C {
+// stats := pool.Stats()
+//
+// redisPoolOpen.Set(float64(stats.ActiveCount))
+// redisPoolInUse.Set(float64(stats.ActiveCount - stats.IdleCount))
+// redisPoolIdle.Set(float64(stats.IdleCount))
+// redisPoolWaitCount.Set(float64(stats.WaitCount))
+// redisPoolWaitDuration.Set(stats.WaitDuration.Seconds())
+// }
+// }()
+// }
package redis
diff --git a/redis/pool.go b/redis/pool.go
index 8e22f66..82400e3 100644
--- a/redis/pool.go
+++ b/redis/pool.go
@@ -291,6 +291,7 @@
}
// Stats returns pool's statistics.
+// Example usage with metric libraries can be found in the package documentation.
func (p *Pool) Stats() PoolStats {
p.mu.Lock()
stats := PoolStats{