From a905031a9e42dff352f507b435f829117d191705 Mon Sep 17 00:00:00 2001 From: alitto Date: Thu, 31 Dec 2020 14:04:42 -0300 Subject: [PATCH] Add task metrics to prometheus example --- examples/prometheus/prometheus.go | 52 ++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/examples/prometheus/prometheus.go b/examples/prometheus/prometheus.go index a1ef0f7..423e0ac 100644 --- a/examples/prometheus/prometheus.go +++ b/examples/prometheus/prometheus.go @@ -13,12 +13,14 @@ import ( func main() { // Create a worker pool - pool := pond.New(10, 0) + pool := pond.New(10, 100) // Register pool metrics collectors + + // Worker pool metrics prometheus.MustRegister(prometheus.NewGaugeFunc( prometheus.GaugeOpts{ - Name: "pond_running_workers", + Name: "pool_workers_running", Help: "Number of running worker goroutines", }, func() float64 { @@ -26,13 +28,55 @@ func main() { })) prometheus.MustRegister(prometheus.NewGaugeFunc( prometheus.GaugeOpts{ - Name: "pond_idle_workers", + Name: "pool_workers_idle", Help: "Number of idle worker goroutines", }, func() float64 { return float64(pool.IdleWorkers()) })) + // Task metrics + prometheus.MustRegister(prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Name: "pool_tasks_submitted_total", + Help: "Number of tasks submitted", + }, + func() float64 { + return float64(pool.SubmittedTasks()) + })) + prometheus.MustRegister(prometheus.NewGaugeFunc( + prometheus.GaugeOpts{ + Name: "pool_tasks_waiting_total", + Help: "Number of tasks waiting in the queue", + }, + func() float64 { + return float64(pool.WaitingTasks()) + })) + prometheus.MustRegister(prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Name: "pool_tasks_successful_total", + Help: "Number of tasks that completed successfully", + }, + func() float64 { + return float64(pool.SuccessfulTasks()) + })) + prometheus.MustRegister(prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Name: "pool_tasks_failed_total", + Help: "Number of tasks that completed with panic", + }, + func() float64 { + return float64(pool.FailedTasks()) + })) + prometheus.MustRegister(prometheus.NewCounterFunc( + prometheus.CounterOpts{ + Name: "pool_tasks_completed_total", + Help: "Number of tasks that completed either successfully or with panic", + }, + func() float64 { + return float64(pool.CompletedTasks()) + })) + // Expose the registered metrics via HTTP http.Handle("/metrics", promhttp.Handler()) @@ -50,7 +94,7 @@ func submitTasks(pool *pond.WorkerPool) { n := i pool.Submit(func() { fmt.Printf("Running task #%d\n", n) - time.Sleep(3 * time.Second) + time.Sleep(500 * time.Millisecond) }) } }