@@ -16,6 +16,7 @@ const (
16
16
execSubsystem = "exec"
17
17
filestoreSubsystem = "file"
18
18
environmentSubsystem = "environment"
19
+ workerSubsystem = "worker"
19
20
)
20
21
21
22
var (
88
89
Name : "current_count" ,
89
90
Help : "Total number of environment currently in use" ,
90
91
})
92
+
93
+ workerQueue = prometheus .NewDesc (
94
+ prometheus .BuildFQName (metricsNamespace , workerSubsystem , "queue_count" ),
95
+ "Number of requests waiting in worker queue" , nil , nil ,
96
+ )
97
+
98
+ workerRunning = prometheus .NewDesc (
99
+ prometheus .BuildFQName (metricsNamespace , workerSubsystem , "running_count" ),
100
+ "Number of request running by workers" , nil , nil ,
101
+ )
91
102
)
92
103
93
104
func init () {
@@ -205,3 +216,32 @@ func (p *metricsEnvPool) Put(env envexec.Environment) {
205
216
p .EnvironmentPool .Put (env )
206
217
envInUse .Dec ()
207
218
}
219
+
220
+ var _ worker.Worker = & metricsWorker {}
221
+ var _ prometheus.Collector = & metricsWorker {}
222
+
223
+ type metricsWorker struct {
224
+ worker.Worker
225
+ }
226
+
227
+ // Collect implements prometheus.Collector.
228
+ func (m * metricsWorker ) Collect (ch chan <- prometheus.Metric ) {
229
+ s := m .Stat ()
230
+ ch <- prometheus .MustNewConstMetric (
231
+ workerQueue , prometheus .GaugeValue , float64 (s .Queue ),
232
+ )
233
+ ch <- prometheus .MustNewConstMetric (
234
+ workerRunning , prometheus .GaugeValue , float64 (s .Running ),
235
+ )
236
+ }
237
+
238
+ // Describe implements prometheus.Collector.
239
+ func (m * metricsWorker ) Describe (ch chan <- * prometheus.Desc ) {
240
+ prometheus .DescribeByCollect (m , ch )
241
+ }
242
+
243
+ func newMetricsWorker (w worker.Worker ) worker.Worker {
244
+ rt := & metricsWorker {w }
245
+ prometheus .MustRegister (rt )
246
+ return rt
247
+ }
0 commit comments