99 "time"
1010
1111 "go.opencensus.io/stats"
12+ "go.opencensus.io/stats/view"
1213 "go.opencensus.io/tag"
1314 "golang.org/x/net/context"
1415
@@ -41,12 +42,12 @@ func (h *HatcherySwarm) InitWorkersMetrics(ctx context.Context) error {
4142 telemetry .MustNewKey (TagResourceName ),
4243 }
4344
44- return telemetry .RegisterView ( ctx ,
45- telemetry .NewViewLastFloat64 ("cds/hatchery/worker_cpu " , h .workerMetrics .CPU , tags ),
46- telemetry .NewViewLastFloat64 ("cds/hatchery/worker_cpu_request " , h .workerMetrics .CPURequest , tags ),
47- telemetry .NewViewLast ("cds/hatchery/worker_memory " , h .workerMetrics .Memory , tags ),
48- telemetry . NewViewLast ( "cds/hatchery/worker_memory_request" , h . workerMetrics . MemoryRequest , tags ),
49- )
45+ h . workerMetrics . CPUView = telemetry .NewViewLastFloat64 ( "cds/hatchery/worker_cpu" , h . workerMetrics . CPU , tags )
46+ h . workerMetrics . CPURequestView = telemetry .NewViewLastFloat64 ("cds/hatchery/worker_cpu_request " , h .workerMetrics .CPURequest , tags )
47+ h . workerMetrics . MemoryView = telemetry .NewViewLast ("cds/hatchery/worker_memory " , h .workerMetrics .Memory , tags )
48+ h . workerMetrics . MemoryRequestView = telemetry .NewViewLast ("cds/hatchery/worker_memory_request " , h .workerMetrics .MemoryRequest , tags )
49+
50+ return telemetry . RegisterView ( ctx , h . workerMetrics . CPUView , h . workerMetrics . CPURequestView , h . workerMetrics . MemoryView , h . workerMetrics . MemoryRequestView )
5051}
5152
5253func (h * HatcherySwarm ) StartWorkerMetricsRoutine (ctx context.Context , delay int64 ) {
@@ -57,6 +58,10 @@ func (h *HatcherySwarm) StartWorkerMetricsRoutine(ctx context.Context, delay int
5758 select {
5859 case <- ticker .C :
5960 h .GoRoutines .Exec (ctx , "compute-worker-metrics" , func (ctx context.Context ) {
61+ // Re-register view to drop ended workers metrics
62+ view .Unregister (h .workerMetrics .CPUView , h .workerMetrics .CPURequestView , h .workerMetrics .MemoryView , h .workerMetrics .MemoryRequestView )
63+ view .Register (h .workerMetrics .CPUView , h .workerMetrics .CPURequestView , h .workerMetrics .MemoryView , h .workerMetrics .MemoryRequestView )
64+
6065 ms , err := h .WorkersMetrics (ctx )
6166 if err != nil {
6267 log .ErrorWithStackTrace (ctx , err )
@@ -127,7 +132,7 @@ func (h *HatcherySwarm) WorkersMetrics(ctx context.Context) ([]WorkerMetricsReso
127132 }
128133 var stats types.Stats
129134 if err := json .Unmarshal (v , & stats ); err != nil {
130- log .ErrorWithStackTrace (ctx , sdk .WrapError (err , "unable to get unmarshal stats for container %s/%s" , host , c .ID ))
135+ log .ErrorWithStackTrace (ctx , sdk .WrapError (err , "unable to unmarshal stats for container %s/%s" , host , c .ID ))
131136 return
132137 }
133138
0 commit comments