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) }) } }