fix(go.d/k8sstate): use static list of warning/terminated reasons (#18885)
Ilya Mashchenko committed
Oct 28, 2024 at 18:10 UTC
e4653638978f21ec35fb002913920ed7c44492a9
6 files changed
+454
-322
src/go/plugin/go.d/modules/k8s_state/charts.go
+36
-54
@@ -681,24 +681,42 @@ var (
681
{ID: "pod_%s_container_%s_state_terminated", Name: "terminated"},
682
},
683
}
684
- containersStateWaitingChartTmpl = module.Chart{
685
- IDSep: true,
686
- ID: "pod_%s_container_%s.state_waiting_reason",
687
- Title: "Container waiting state reason",
688
- Units: "state",
689
- Fam: "container waiting reason",
690
- Ctx: "k8s_state.pod_container_waiting_state_reason",
691
- Priority: prioPodContainerWaitingStateReason,
692
- }
693
- containersStateTerminatedChartTmpl = module.Chart{
694
- IDSep: true,
695
- ID: "pod_%s_container_%s.state_terminated_reason",
696
- Title: "Container terminated state reason",
697
- Units: "state",
698
- Fam: "container terminated reason",
699
- Ctx: "k8s_state.pod_container_terminated_state_reason",
700
- Priority: prioPodContainerTerminatedStateReason,
701
- }
684
+ containersStateWaitingChartTmpl = func() module.Chart {
685
+ chart := module.Chart{
686
+ IDSep: true,
687
+ ID: "pod_%s_container_%s.state_waiting_reason",
688
+ Title: "Container waiting state reason",
689
+ Units: "state",
690
+ Fam: "container waiting reason",
691
+ Ctx: "k8s_state.pod_container_waiting_state_reason",
692
+ Priority: prioPodContainerWaitingStateReason,
693
+ }
694
+ for _, v := range containerWaitingStateReasons {
695
+ chart.Dims = append(chart.Dims, &module.Dim{
696
+ ID: "pod_%s_container_%s_state_waiting_reason_" + v,
697
+ Name: v,
698
+ })
699
+ }
700
+ return chart
701
+ }()
702
+ containersStateTerminatedChartTmpl = func() module.Chart {
703
+ chart := module.Chart{
704
+ IDSep: true,
705
+ ID: "pod_%s_container_%s.state_terminated_reason",
706
+ Title: "Container terminated state reason",
707
+ Units: "state",
708
+ Fam: "container terminated reason",
709
+ Ctx: "k8s_state.pod_container_terminated_state_reason",
710
+ Priority: prioPodContainerTerminatedStateReason,
711
+ }
712
+ for _, v := range containerTerminatedStateReasons {
713
+ chart.Dims = append(chart.Dims, &module.Dim{
714
+ ID: "pod_%s_container_%s_state_terminated_reason_" + v,
715
+ Name: v,
716
+ })
717
+ }
718
+ return chart
719
+ }()
720
)
721
722
func (ks *KubeState) newContainerCharts(ps *podState, cs *containerState) *module.Charts {
@@ -728,42 +746,6 @@ func (ks *KubeState) addContainerCharts(ps *podState, cs *containerState) {
746
}
747
}
748
731
-func (ks *KubeState) addContainerWaitingStateReasonToChart(ps *podState, cs *containerState, reason string) {
732
- id := fmt.Sprintf(containersStateWaitingChartTmpl.ID, replaceDots(ps.id()), cs.name)
733
- c := ks.Charts().Get(id)
734
- if c == nil {
735
- ks.Warningf("chart '%s' does not exist", id)
736
- return
737
- }
738
- dim := &module.Dim{
739
- ID: fmt.Sprintf("pod_%s_container_%s_state_waiting_reason_%s", ps.id(), cs.name, reason),
740
- Name: reason,
741
- }
742
- if err := c.AddDim(dim); err != nil {
743
- ks.Warning(err)
744
- return
745
- }
746
- c.MarkNotCreated()
747
-}
748
-
749
-func (ks *KubeState) addContainerTerminatedStateReasonToChart(ps *podState, cs *containerState, reason string) {
750
- id := fmt.Sprintf(containersStateTerminatedChartTmpl.ID, replaceDots(ps.id()), cs.name)
751
- c := ks.Charts().Get(id)
752
- if c == nil {
753
- ks.Warningf("chart '%s' does not exist", id)
754
- return
755
- }
756
- dim := &module.Dim{
757
- ID: fmt.Sprintf("pod_%s_container_%s_state_terminated_reason_%s", ps.id(), cs.name, reason),
758
- Name: reason,
759
- }
760
- if err := c.AddDim(dim); err != nil {
761
- ks.Warning(err)
762
- return
763
- }
764
- c.MarkNotCreated()
765
-}
766
-
749
var discoveryStatusChart = module.Chart{
750
ID: "discovery_discoverers_state",
751
Title: "Running discoverers state",
src/go/plugin/go.d/modules/k8s_state/collect.go
+40
-10
@@ -5,6 +5,7 @@ package k8s_state
5
import (
6
"errors"
7
"fmt"
8
+ "slices"
9
"strings"
10
"time"
11
@@ -15,6 +16,29 @@ import (
16
17
const precision = 1000
18
19
+var (
20
+ containerWaitingStateReasons = []string{
21
+ "PodInitializing",
22
+ "ContainerCreating",
23
+ "CrashLoopBackOff",
24
+ "CreateContainerConfigError",
25
+ "ErrImagePull",
26
+ "ImagePullBackOff",
27
+ "CreateContainerError",
28
+ "InvalidImageName",
29
+ "Other",
30
+ }
31
+ containerTerminatedStateReasons = []string{
32
+ "OOMKilled",
33
+ "Completed",
34
+ "Error",
35
+ "ContainerCannotRun",
36
+ "DeadlineExceeded",
37
+ "Evicted",
38
+ "Other",
39
+ }
40
+)
41
+
42
func (ks *KubeState) collect() (map[string]int64, error) {
43
if ks.discoverer == nil {
44
return nil, errors.New("nil discoverer")
@@ -165,19 +189,25 @@ func (ks *KubeState) collectPodsState(mx map[string]int64) {
189
mx[ppx+"state_terminated"] = boolToInt(cs.stateTerminated)
190
mx[ppx+"readiness"] = boolToInt(cs.ready)
191
mx[ppx+"restarts"] = cs.restarts
168
- for _, r := range cs.stateWaitingReasons {
169
- if r.new {
170
- r.new = false
171
- ks.addContainerWaitingStateReasonToChart(ps, cs, r.reason)
192
+
193
+ for _, v := range containerWaitingStateReasons {
194
+ mx[ppx+"state_waiting_reason_"+v] = 0
195
+ }
196
+ if v := cs.waitingReason; v != "" {
197
+ if !slices.Contains(containerWaitingStateReasons, cs.waitingReason) {
198
+ v = "Other"
199
}
173
- mx[ppx+"state_waiting_reason_"+r.reason] = boolToInt(r.active)
200
+ mx[ppx+"state_waiting_reason_"+v] = 1
201
+ }
202
+
203
+ for _, v := range containerTerminatedStateReasons {
204
+ mx[ppx+"state_terminated_reason_"+v] = 0
205
}
175
- for _, r := range cs.stateTerminatedReasons {
176
- if r.new {
177
- r.new = false
178
- ks.addContainerTerminatedStateReasonToChart(ps, cs, r.reason)
206
+ if v := cs.terminatedReason; v != "" {
207
+ if !slices.Contains(containerTerminatedStateReasons, cs.terminatedReason) {
208
+ v = "Other"
209
}
180
- mx[ppx+"state_terminated_reason_"+r.reason] = boolToInt(r.active)
210
+ mx[ppx+"state_terminated_reason_"+v] = 1
211
}
212
}
213
}
src/go/plugin/go.d/modules/k8s_state/kube_state_test.go
+343
-207
@@ -241,11 +241,13 @@ func TestKubeState_Collect(t *testing.T) {
241
"node_node01_pods_readiness_unready": 0,
242
}
243
copyAge(expected, mx)
244
+
245
assert.Equal(t, expected, mx)
246
assert.Equal(t,
247
len(nodeChartsTmpl)+len(baseCharts),
248
len(*ks.Charts()),
249
)
250
+ module.TestMetricsHasAllChartsDims(t, ks.Charts(), mx)
251
}
252
253
return testCase{
@@ -264,40 +266,73 @@ func TestKubeState_Collect(t *testing.T) {
266
step1 := func(t *testing.T, ks *KubeState) {
267
mx := ks.Collect()
268
expected := map[string]int64{
267
- "discovery_node_discoverer_state": 1,
268
- "discovery_pod_discoverer_state": 1,
269
- "pod_default_pod01_age": 3,
270
- "pod_default_pod01_cpu_limits_used": 400,
271
- "pod_default_pod01_cpu_requests_used": 200,
272
- "pod_default_pod01_mem_limits_used": 419430400,
273
- "pod_default_pod01_mem_requests_used": 209715200,
274
- "pod_default_pod01_cond_containersready": 1,
275
- "pod_default_pod01_cond_podinitialized": 1,
276
- "pod_default_pod01_cond_podready": 1,
277
- "pod_default_pod01_cond_podscheduled": 1,
278
- "pod_default_pod01_container_container1_readiness": 1,
279
- "pod_default_pod01_container_container1_restarts": 0,
280
- "pod_default_pod01_container_container1_state_running": 1,
281
- "pod_default_pod01_container_container1_state_terminated": 0,
282
- "pod_default_pod01_container_container1_state_waiting": 0,
283
- "pod_default_pod01_container_container2_readiness": 1,
284
- "pod_default_pod01_container_container2_restarts": 0,
285
- "pod_default_pod01_container_container2_state_running": 1,
286
- "pod_default_pod01_container_container2_state_terminated": 0,
287
- "pod_default_pod01_container_container2_state_waiting": 0,
288
- "pod_default_pod01_containers": 2,
289
- "pod_default_pod01_containers_state_running": 2,
290
- "pod_default_pod01_containers_state_terminated": 0,
291
- "pod_default_pod01_containers_state_waiting": 0,
292
- "pod_default_pod01_init_containers": 1,
293
- "pod_default_pod01_init_containers_state_running": 0,
294
- "pod_default_pod01_init_containers_state_terminated": 1,
295
- "pod_default_pod01_init_containers_state_waiting": 0,
296
- "pod_default_pod01_phase_failed": 0,
297
- "pod_default_pod01_phase_pending": 0,
298
- "pod_default_pod01_phase_running": 1,
299
- "pod_default_pod01_phase_succeeded": 0,
269
+ "discovery_node_discoverer_state": 1,
270
+ "discovery_pod_discoverer_state": 1,
271
+ "pod_default_pod01_age": 3,
272
+ "pod_default_pod01_cond_containersready": 1,
273
+ "pod_default_pod01_cond_podinitialized": 1,
274
+ "pod_default_pod01_cond_podready": 1,
275
+ "pod_default_pod01_cond_podscheduled": 1,
276
+ "pod_default_pod01_container_container1_readiness": 1,
277
+ "pod_default_pod01_container_container1_restarts": 0,
278
+ "pod_default_pod01_container_container1_state_running": 1,
279
+ "pod_default_pod01_container_container1_state_terminated": 0,
280
+ "pod_default_pod01_container_container1_state_terminated_reason_Completed": 0,
281
+ "pod_default_pod01_container_container1_state_terminated_reason_ContainerCannotRun": 0,
282
+ "pod_default_pod01_container_container1_state_terminated_reason_DeadlineExceeded": 0,
283
+ "pod_default_pod01_container_container1_state_terminated_reason_Error": 0,
284
+ "pod_default_pod01_container_container1_state_terminated_reason_Evicted": 0,
285
+ "pod_default_pod01_container_container1_state_terminated_reason_OOMKilled": 0,
286
+ "pod_default_pod01_container_container1_state_terminated_reason_Other": 0,
287
+ "pod_default_pod01_container_container1_state_waiting": 0,
288
+ "pod_default_pod01_container_container1_state_waiting_reason_ContainerCreating": 0,
289
+ "pod_default_pod01_container_container1_state_waiting_reason_CrashLoopBackOff": 0,
290
+ "pod_default_pod01_container_container1_state_waiting_reason_CreateContainerConfigError": 0,
291
+ "pod_default_pod01_container_container1_state_waiting_reason_CreateContainerError": 0,
292
+ "pod_default_pod01_container_container1_state_waiting_reason_ErrImagePull": 0,
293
+ "pod_default_pod01_container_container1_state_waiting_reason_ImagePullBackOff": 0,
294
+ "pod_default_pod01_container_container1_state_waiting_reason_InvalidImageName": 0,
295
+ "pod_default_pod01_container_container1_state_waiting_reason_Other": 0,
296
+ "pod_default_pod01_container_container1_state_waiting_reason_PodInitializing": 0,
297
+ "pod_default_pod01_container_container2_readiness": 1,
298
+ "pod_default_pod01_container_container2_restarts": 0,
299
+ "pod_default_pod01_container_container2_state_running": 1,
300
+ "pod_default_pod01_container_container2_state_terminated": 0,
301
+ "pod_default_pod01_container_container2_state_terminated_reason_Completed": 0,
302
+ "pod_default_pod01_container_container2_state_terminated_reason_ContainerCannotRun": 0,
303
+ "pod_default_pod01_container_container2_state_terminated_reason_DeadlineExceeded": 0,
304
+ "pod_default_pod01_container_container2_state_terminated_reason_Error": 0,
305
+ "pod_default_pod01_container_container2_state_terminated_reason_Evicted": 0,
306
+ "pod_default_pod01_container_container2_state_terminated_reason_OOMKilled": 0,
307
+ "pod_default_pod01_container_container2_state_terminated_reason_Other": 0,
308
+ "pod_default_pod01_container_container2_state_waiting": 0,
309
+ "pod_default_pod01_container_container2_state_waiting_reason_ContainerCreating": 0,
310
+ "pod_default_pod01_container_container2_state_waiting_reason_CrashLoopBackOff": 0,
311
+ "pod_default_pod01_container_container2_state_waiting_reason_CreateContainerConfigError": 0,
312
+ "pod_default_pod01_container_container2_state_waiting_reason_CreateContainerError": 0,
313
+ "pod_default_pod01_container_container2_state_waiting_reason_ErrImagePull": 0,
314
+ "pod_default_pod01_container_container2_state_waiting_reason_ImagePullBackOff": 0,
315
+ "pod_default_pod01_container_container2_state_waiting_reason_InvalidImageName": 0,
316
+ "pod_default_pod01_container_container2_state_waiting_reason_Other": 0,
317
+ "pod_default_pod01_container_container2_state_waiting_reason_PodInitializing": 0,
318
+ "pod_default_pod01_containers": 2,
319
+ "pod_default_pod01_containers_state_running": 2,
320
+ "pod_default_pod01_containers_state_terminated": 0,
321
+ "pod_default_pod01_containers_state_waiting": 0,
322
+ "pod_default_pod01_cpu_limits_used": 400,
323
+ "pod_default_pod01_cpu_requests_used": 200,
324
+ "pod_default_pod01_init_containers": 1,
325
+ "pod_default_pod01_init_containers_state_running": 0,
326
+ "pod_default_pod01_init_containers_state_terminated": 1,
327
+ "pod_default_pod01_init_containers_state_waiting": 0,
328
+ "pod_default_pod01_mem_limits_used": 419430400,
329
+ "pod_default_pod01_mem_requests_used": 209715200,
330
+ "pod_default_pod01_phase_failed": 0,
331
+ "pod_default_pod01_phase_pending": 0,
332
+ "pod_default_pod01_phase_running": 1,
333
+ "pod_default_pod01_phase_succeeded": 0,
334
}
335
+
336
copyAge(expected, mx)
337
338
assert.Equal(t, expected, mx)
@@ -305,6 +340,7 @@ func TestKubeState_Collect(t *testing.T) {
340
len(podChartsTmpl)+len(containerChartsTmpl)*len(pod.Spec.Containers)+len(baseCharts),
341
len(*ks.Charts()),
342
)
343
+ module.TestMetricsHasAllChartsDims(t, ks.Charts(), mx)
344
}
345
346
return testCase{
@@ -325,78 +361,111 @@ func TestKubeState_Collect(t *testing.T) {
361
step1 := func(t *testing.T, ks *KubeState) {
362
mx := ks.Collect()
363
expected := map[string]int64{
328
- "discovery_node_discoverer_state": 1,
329
- "discovery_pod_discoverer_state": 1,
330
- "node_node01_age": 3,
331
- "node_node01_alloc_cpu_limits_used": 400,
332
- "node_node01_alloc_cpu_limits_util": 11428,
333
- "node_node01_alloc_cpu_requests_used": 200,
334
- "node_node01_alloc_cpu_requests_util": 5714,
335
- "node_node01_alloc_mem_limits_used": 419430400,
336
- "node_node01_alloc_mem_limits_util": 11428,
337
- "node_node01_alloc_mem_requests_used": 209715200,
338
- "node_node01_alloc_mem_requests_util": 5714,
339
- "node_node01_alloc_pods_allocated": 1,
340
- "node_node01_alloc_pods_available": 109,
341
- "node_node01_alloc_pods_util": 909,
342
- "node_node01_cond_diskpressure": 0,
343
- "node_node01_cond_memorypressure": 0,
344
- "node_node01_cond_networkunavailable": 0,
345
- "node_node01_cond_pidpressure": 0,
346
- "node_node01_cond_ready": 1,
347
- "node_node01_schedulability_schedulable": 1,
348
- "node_node01_schedulability_unschedulable": 0,
349
- "node_node01_containers": 2,
350
- "node_node01_containers_state_running": 2,
351
- "node_node01_containers_state_terminated": 0,
352
- "node_node01_containers_state_waiting": 0,
353
- "node_node01_init_containers": 1,
354
- "node_node01_init_containers_state_running": 0,
355
- "node_node01_init_containers_state_terminated": 1,
356
- "node_node01_init_containers_state_waiting": 0,
357
- "node_node01_pods_cond_containersready": 1,
358
- "node_node01_pods_cond_podinitialized": 1,
359
- "node_node01_pods_cond_podready": 1,
360
- "node_node01_pods_cond_podscheduled": 1,
361
- "node_node01_pods_phase_failed": 0,
362
- "node_node01_pods_phase_pending": 0,
363
- "node_node01_pods_phase_running": 1,
364
- "node_node01_pods_phase_succeeded": 0,
365
- "node_node01_pods_readiness": 100000,
366
- "node_node01_pods_readiness_ready": 1,
367
- "node_node01_pods_readiness_unready": 0,
368
- "pod_default_pod01_age": 3,
369
- "pod_default_pod01_cpu_limits_used": 400,
370
- "pod_default_pod01_cpu_requests_used": 200,
371
- "pod_default_pod01_mem_limits_used": 419430400,
372
- "pod_default_pod01_mem_requests_used": 209715200,
373
- "pod_default_pod01_cond_containersready": 1,
374
- "pod_default_pod01_cond_podinitialized": 1,
375
- "pod_default_pod01_cond_podready": 1,
376
- "pod_default_pod01_cond_podscheduled": 1,
377
- "pod_default_pod01_container_container1_readiness": 1,
378
- "pod_default_pod01_container_container1_restarts": 0,
379
- "pod_default_pod01_container_container1_state_running": 1,
380
- "pod_default_pod01_container_container1_state_terminated": 0,
381
- "pod_default_pod01_container_container1_state_waiting": 0,
382
- "pod_default_pod01_container_container2_readiness": 1,
383
- "pod_default_pod01_container_container2_restarts": 0,
384
- "pod_default_pod01_container_container2_state_running": 1,
385
- "pod_default_pod01_container_container2_state_terminated": 0,
386
- "pod_default_pod01_container_container2_state_waiting": 0,
387
- "pod_default_pod01_containers": 2,
388
- "pod_default_pod01_containers_state_running": 2,
389
- "pod_default_pod01_containers_state_terminated": 0,
390
- "pod_default_pod01_containers_state_waiting": 0,
391
- "pod_default_pod01_init_containers": 1,
392
- "pod_default_pod01_init_containers_state_running": 0,
393
- "pod_default_pod01_init_containers_state_terminated": 1,
394
- "pod_default_pod01_init_containers_state_waiting": 0,
395
- "pod_default_pod01_phase_failed": 0,
396
- "pod_default_pod01_phase_pending": 0,
397
- "pod_default_pod01_phase_running": 1,
398
- "pod_default_pod01_phase_succeeded": 0,
364
+ "discovery_node_discoverer_state": 1,
365
+ "discovery_pod_discoverer_state": 1,
366
+ "node_node01_age": 3,
367
+ "node_node01_alloc_cpu_limits_used": 400,
368
+ "node_node01_alloc_cpu_limits_util": 11428,
369
+ "node_node01_alloc_cpu_requests_used": 200,
370
+ "node_node01_alloc_cpu_requests_util": 5714,
371
+ "node_node01_alloc_mem_limits_used": 419430400,
372
+ "node_node01_alloc_mem_limits_util": 11428,
373
+ "node_node01_alloc_mem_requests_used": 209715200,
374
+ "node_node01_alloc_mem_requests_util": 5714,
375
+ "node_node01_alloc_pods_allocated": 1,
376
+ "node_node01_alloc_pods_available": 109,
377
+ "node_node01_alloc_pods_util": 909,
378
+ "node_node01_cond_diskpressure": 0,
379
+ "node_node01_cond_memorypressure": 0,
380
+ "node_node01_cond_networkunavailable": 0,
381
+ "node_node01_cond_pidpressure": 0,
382
+ "node_node01_cond_ready": 1,
383
+ "node_node01_containers": 2,
384
+ "node_node01_containers_state_running": 2,
385
+ "node_node01_containers_state_terminated": 0,
386
+ "node_node01_containers_state_waiting": 0,
387
+ "node_node01_init_containers": 1,
388
+ "node_node01_init_containers_state_running": 0,
389
+ "node_node01_init_containers_state_terminated": 1,
390
+ "node_node01_init_containers_state_waiting": 0,
391
+ "node_node01_pods_cond_containersready": 1,
392
+ "node_node01_pods_cond_podinitialized": 1,
393
+ "node_node01_pods_cond_podready": 1,
394
+ "node_node01_pods_cond_podscheduled": 1,
395
+ "node_node01_pods_phase_failed": 0,
396
+ "node_node01_pods_phase_pending": 0,
397
+ "node_node01_pods_phase_running": 1,
398
+ "node_node01_pods_phase_succeeded": 0,
399
+ "node_node01_pods_readiness": 100000,
400
+ "node_node01_pods_readiness_ready": 1,
401
+ "node_node01_pods_readiness_unready": 0,
402
+ "node_node01_schedulability_schedulable": 1,
403
+ "node_node01_schedulability_unschedulable": 0,
404
+ "pod_default_pod01_age": 3,
405
+ "pod_default_pod01_cond_containersready": 1,
406
+ "pod_default_pod01_cond_podinitialized": 1,
407
+ "pod_default_pod01_cond_podready": 1,
408
+ "pod_default_pod01_cond_podscheduled": 1,
409
+ "pod_default_pod01_container_container1_readiness": 1,
410
+ "pod_default_pod01_container_container1_restarts": 0,
411
+ "pod_default_pod01_container_container1_state_running": 1,
412
+ "pod_default_pod01_container_container1_state_terminated": 0,
413
+ "pod_default_pod01_container_container1_state_terminated_reason_Completed": 0,
414
+ "pod_default_pod01_container_container1_state_terminated_reason_ContainerCannotRun": 0,
415
+ "pod_default_pod01_container_container1_state_terminated_reason_DeadlineExceeded": 0,
416
+ "pod_default_pod01_container_container1_state_terminated_reason_Error": 0,
417
+ "pod_default_pod01_container_container1_state_terminated_reason_Evicted": 0,
418
+ "pod_default_pod01_container_container1_state_terminated_reason_OOMKilled": 0,
419
+ "pod_default_pod01_container_container1_state_terminated_reason_Other": 0,
420
+ "pod_default_pod01_container_container1_state_waiting": 0,
421
+ "pod_default_pod01_container_container1_state_waiting_reason_ContainerCreating": 0,
422
+ "pod_default_pod01_container_container1_state_waiting_reason_CrashLoopBackOff": 0,
423
+ "pod_default_pod01_container_container1_state_waiting_reason_CreateContainerConfigError": 0,
424
+ "pod_default_pod01_container_container1_state_waiting_reason_CreateContainerError": 0,
425
+ "pod_default_pod01_container_container1_state_waiting_reason_ErrImagePull": 0,
426
+ "pod_default_pod01_container_container1_state_waiting_reason_ImagePullBackOff": 0,
427
+ "pod_default_pod01_container_container1_state_waiting_reason_InvalidImageName": 0,
428
+ "pod_default_pod01_container_container1_state_waiting_reason_Other": 0,
429
+ "pod_default_pod01_container_container1_state_waiting_reason_PodInitializing": 0,
430
+ "pod_default_pod01_container_container2_readiness": 1,
431
+ "pod_default_pod01_container_container2_restarts": 0,
432
+ "pod_default_pod01_container_container2_state_running": 1,
433
+ "pod_default_pod01_container_container2_state_terminated": 0,
434
+ "pod_default_pod01_container_container2_state_terminated_reason_Completed": 0,
435
+ "pod_default_pod01_container_container2_state_terminated_reason_ContainerCannotRun": 0,
436
+ "pod_default_pod01_container_container2_state_terminated_reason_DeadlineExceeded": 0,
437
+ "pod_default_pod01_container_container2_state_terminated_reason_Error": 0,
438
+ "pod_default_pod01_container_container2_state_terminated_reason_Evicted": 0,
439
+ "pod_default_pod01_container_container2_state_terminated_reason_OOMKilled": 0,
440
+ "pod_default_pod01_container_container2_state_terminated_reason_Other": 0,
441
+ "pod_default_pod01_container_container2_state_waiting": 0,
442
+ "pod_default_pod01_container_container2_state_waiting_reason_ContainerCreating": 0,
443
+ "pod_default_pod01_container_container2_state_waiting_reason_CrashLoopBackOff": 0,
444
+ "pod_default_pod01_container_container2_state_waiting_reason_CreateContainerConfigError": 0,
445
+ "pod_default_pod01_container_container2_state_waiting_reason_CreateContainerError": 0,
446
+ "pod_default_pod01_container_container2_state_waiting_reason_ErrImagePull": 0,
447
+ "pod_default_pod01_container_container2_state_waiting_reason_ImagePullBackOff": 0,
448
+ "pod_default_pod01_container_container2_state_waiting_reason_InvalidImageName": 0,
449
+ "pod_default_pod01_container_container2_state_waiting_reason_Other": 0,
450
+ "pod_default_pod01_container_container2_state_waiting_reason_PodInitializing": 0,
451
+ "pod_default_pod01_containers": 2,
452
+ "pod_default_pod01_containers_state_running": 2,
453
+ "pod_default_pod01_containers_state_terminated": 0,
454
+ "pod_default_pod01_containers_state_waiting": 0,
455
+ "pod_default_pod01_cpu_limits_used": 400,
456
+ "pod_default_pod01_cpu_requests_used": 200,
457
+ "pod_default_pod01_init_containers": 1,
458
+ "pod_default_pod01_init_containers_state_running": 0,
459
+ "pod_default_pod01_init_containers_state_terminated": 1,
460
+ "pod_default_pod01_init_containers_state_waiting": 0,
461
+ "pod_default_pod01_mem_limits_used": 419430400,
462
+ "pod_default_pod01_mem_requests_used": 209715200,
463
+ "pod_default_pod01_phase_failed": 0,
464
+ "pod_default_pod01_phase_pending": 0,
465
+ "pod_default_pod01_phase_running": 1,
466
+ "pod_default_pod01_phase_succeeded": 0,
467
}
468
+
469
copyAge(expected, mx)
470
471
assert.Equal(t, expected, mx)
@@ -404,6 +473,7 @@ func TestKubeState_Collect(t *testing.T) {
473
len(nodeChartsTmpl)+len(podChartsTmpl)+len(containerChartsTmpl)*len(pod.Spec.Containers)+len(baseCharts),
474
len(*ks.Charts()),
475
)
476
+ module.TestMetricsHasAllChartsDims(t, ks.Charts(), mx)
477
}
478
479
return testCase{
@@ -481,6 +551,7 @@ func TestKubeState_Collect(t *testing.T) {
551
len(podChartsTmpl)+len(containerChartsTmpl)*len(pod.Spec.Containers),
552
calcObsoleteCharts(*ks.Charts()),
553
)
554
+ module.TestMetricsHasAllChartsDims(t, ks.Charts(), mx)
555
}
556
557
return testCase{
@@ -506,7 +577,7 @@ func TestKubeState_Collect(t *testing.T) {
577
for _, c := range *ks.Charts() {
578
if strings.HasPrefix(c.ID, "pod_") {
579
ok := isLabelValueSet(c, labelKeyNodeName)
509
- assert.Falsef(t, ok, "chart '%s' has not empty %s label", c.ID, labelKeyNodeName)
580
+ assert.Falsef(t, ok, "chart '%s' has no empty %s label", c.ID, labelKeyNodeName)
581
}
582
}
583
}
@@ -547,108 +618,172 @@ func TestKubeState_Collect(t *testing.T) {
618
step2 := func(t *testing.T, ks *KubeState) {
619
mx := ks.Collect()
620
expected := map[string]int64{
550
- "discovery_node_discoverer_state": 1,
551
- "discovery_pod_discoverer_state": 1,
552
- "node_node01_age": 4,
553
- "node_node01_alloc_cpu_limits_used": 800,
554
- "node_node01_alloc_cpu_limits_util": 22857,
555
- "node_node01_alloc_cpu_requests_used": 400,
556
- "node_node01_alloc_cpu_requests_util": 11428,
557
- "node_node01_alloc_mem_limits_used": 838860800,
558
- "node_node01_alloc_mem_limits_util": 22857,
559
- "node_node01_alloc_mem_requests_used": 419430400,
560
- "node_node01_alloc_mem_requests_util": 11428,
561
- "node_node01_alloc_pods_allocated": 2,
562
- "node_node01_alloc_pods_available": 108,
563
- "node_node01_alloc_pods_util": 1818,
564
- "node_node01_cond_diskpressure": 0,
565
- "node_node01_cond_memorypressure": 0,
566
- "node_node01_cond_networkunavailable": 0,
567
- "node_node01_cond_pidpressure": 0,
568
- "node_node01_cond_ready": 1,
569
- "node_node01_schedulability_schedulable": 1,
570
- "node_node01_schedulability_unschedulable": 0,
571
- "node_node01_containers": 4,
572
- "node_node01_containers_state_running": 4,
573
- "node_node01_containers_state_terminated": 0,
574
- "node_node01_containers_state_waiting": 0,
575
- "node_node01_init_containers": 2,
576
- "node_node01_init_containers_state_running": 0,
577
- "node_node01_init_containers_state_terminated": 2,
578
- "node_node01_init_containers_state_waiting": 0,
579
- "node_node01_pods_cond_containersready": 2,
580
- "node_node01_pods_cond_podinitialized": 2,
581
- "node_node01_pods_cond_podready": 2,
582
- "node_node01_pods_cond_podscheduled": 2,
583
- "node_node01_pods_phase_failed": 0,
584
- "node_node01_pods_phase_pending": 0,
585
- "node_node01_pods_phase_running": 2,
586
- "node_node01_pods_phase_succeeded": 0,
587
- "node_node01_pods_readiness": 100000,
588
- "node_node01_pods_readiness_ready": 2,
589
- "node_node01_pods_readiness_unready": 0,
590
- "pod_default_pod01_age": 4,
591
- "pod_default_pod01_cpu_limits_used": 400,
592
- "pod_default_pod01_cpu_requests_used": 200,
593
- "pod_default_pod01_mem_limits_used": 419430400,
594
- "pod_default_pod01_mem_requests_used": 209715200,
595
- "pod_default_pod01_cond_containersready": 1,
596
- "pod_default_pod01_cond_podinitialized": 1,
597
- "pod_default_pod01_cond_podready": 1,
598
- "pod_default_pod01_cond_podscheduled": 1,
599
- "pod_default_pod01_container_container1_readiness": 1,
600
- "pod_default_pod01_container_container1_restarts": 0,
601
- "pod_default_pod01_container_container1_state_running": 1,
602
- "pod_default_pod01_container_container1_state_terminated": 0,
603
- "pod_default_pod01_container_container1_state_waiting": 0,
604
- "pod_default_pod01_container_container2_readiness": 1,
605
- "pod_default_pod01_container_container2_restarts": 0,
606
- "pod_default_pod01_container_container2_state_running": 1,
607
- "pod_default_pod01_container_container2_state_terminated": 0,
608
- "pod_default_pod01_container_container2_state_waiting": 0,
609
- "pod_default_pod01_containers": 2,
610
- "pod_default_pod01_containers_state_running": 2,
611
- "pod_default_pod01_containers_state_terminated": 0,
612
- "pod_default_pod01_containers_state_waiting": 0,
613
- "pod_default_pod01_init_containers": 1,
614
- "pod_default_pod01_init_containers_state_running": 0,
615
- "pod_default_pod01_init_containers_state_terminated": 1,
616
- "pod_default_pod01_init_containers_state_waiting": 0,
617
- "pod_default_pod01_phase_failed": 0,
618
- "pod_default_pod01_phase_pending": 0,
619
- "pod_default_pod01_phase_running": 1,
620
- "pod_default_pod01_phase_succeeded": 0,
621
- "pod_default_pod02_age": 4,
622
- "pod_default_pod02_cpu_limits_used": 400,
623
- "pod_default_pod02_cpu_requests_used": 200,
624
- "pod_default_pod02_mem_limits_used": 419430400,
625
- "pod_default_pod02_mem_requests_used": 209715200,
626
- "pod_default_pod02_cond_containersready": 1,
627
- "pod_default_pod02_cond_podinitialized": 1,
628
- "pod_default_pod02_cond_podready": 1,
629
- "pod_default_pod02_cond_podscheduled": 1,
630
- "pod_default_pod02_container_container1_readiness": 1,
631
- "pod_default_pod02_container_container1_restarts": 0,
632
- "pod_default_pod02_container_container1_state_running": 1,
633
- "pod_default_pod02_container_container1_state_terminated": 0,
634
- "pod_default_pod02_container_container1_state_waiting": 0,
635
- "pod_default_pod02_container_container2_readiness": 1,
636
- "pod_default_pod02_container_container2_restarts": 0,
637
- "pod_default_pod02_container_container2_state_running": 1,
638
- "pod_default_pod02_container_container2_state_terminated": 0,
639
- "pod_default_pod02_container_container2_state_waiting": 0,
640
- "pod_default_pod02_containers": 2,
641
- "pod_default_pod02_containers_state_running": 2,
642
- "pod_default_pod02_containers_state_terminated": 0,
643
- "pod_default_pod02_containers_state_waiting": 0,
644
- "pod_default_pod02_init_containers": 1,
645
- "pod_default_pod02_init_containers_state_running": 0,
646
- "pod_default_pod02_init_containers_state_terminated": 1,
647
- "pod_default_pod02_init_containers_state_waiting": 0,
648
- "pod_default_pod02_phase_failed": 0,
649
- "pod_default_pod02_phase_pending": 0,
650
- "pod_default_pod02_phase_running": 1,
651
- "pod_default_pod02_phase_succeeded": 0,
621
+ "discovery_node_discoverer_state": 1,
622
+ "discovery_pod_discoverer_state": 1,
623
+ "node_node01_age": 4,
624
+ "node_node01_alloc_cpu_limits_used": 800,
625
+ "node_node01_alloc_cpu_limits_util": 22857,
626
+ "node_node01_alloc_cpu_requests_used": 400,
627
+ "node_node01_alloc_cpu_requests_util": 11428,
628
+ "node_node01_alloc_mem_limits_used": 838860800,
629
+ "node_node01_alloc_mem_limits_util": 22857,
630
+ "node_node01_alloc_mem_requests_used": 419430400,
631
+ "node_node01_alloc_mem_requests_util": 11428,
632
+ "node_node01_alloc_pods_allocated": 2,
633
+ "node_node01_alloc_pods_available": 108,
634
+ "node_node01_alloc_pods_util": 1818,
635
+ "node_node01_cond_diskpressure": 0,
636
+ "node_node01_cond_memorypressure": 0,
637
+ "node_node01_cond_networkunavailable": 0,
638
+ "node_node01_cond_pidpressure": 0,
639
+ "node_node01_cond_ready": 1,
640
+ "node_node01_containers": 4,
641
+ "node_node01_containers_state_running": 4,
642
+ "node_node01_containers_state_terminated": 0,
643
+ "node_node01_containers_state_waiting": 0,
644
+ "node_node01_init_containers": 2,
645
+ "node_node01_init_containers_state_running": 0,
646
+ "node_node01_init_containers_state_terminated": 2,
647
+ "node_node01_init_containers_state_waiting": 0,
648
+ "node_node01_pods_cond_containersready": 2,
649
+ "node_node01_pods_cond_podinitialized": 2,
650
+ "node_node01_pods_cond_podready": 2,
651
+ "node_node01_pods_cond_podscheduled": 2,
652
+ "node_node01_pods_phase_failed": 0,
653
+ "node_node01_pods_phase_pending": 0,
654
+ "node_node01_pods_phase_running": 2,
655
+ "node_node01_pods_phase_succeeded": 0,
656
+ "node_node01_pods_readiness": 100000,
657
+ "node_node01_pods_readiness_ready": 2,
658
+ "node_node01_pods_readiness_unready": 0,
659
+ "node_node01_schedulability_schedulable": 1,
660
+ "node_node01_schedulability_unschedulable": 0,
661
+ "pod_default_pod01_age": 4,
662
+ "pod_default_pod01_cond_containersready": 1,
663
+ "pod_default_pod01_cond_podinitialized": 1,
664
+ "pod_default_pod01_cond_podready": 1,
665
+ "pod_default_pod01_cond_podscheduled": 1,
666
+ "pod_default_pod01_container_container1_readiness": 1,
667
+ "pod_default_pod01_container_container1_restarts": 0,
668
+ "pod_default_pod01_container_container1_state_running": 1,
669
+ "pod_default_pod01_container_container1_state_terminated": 0,
670
+ "pod_default_pod01_container_container1_state_terminated_reason_Completed": 0,
671
+ "pod_default_pod01_container_container1_state_terminated_reason_ContainerCannotRun": 0,
672
+ "pod_default_pod01_container_container1_state_terminated_reason_DeadlineExceeded": 0,
673
+ "pod_default_pod01_container_container1_state_terminated_reason_Error": 0,
674
+ "pod_default_pod01_container_container1_state_terminated_reason_Evicted": 0,
675
+ "pod_default_pod01_container_container1_state_terminated_reason_OOMKilled": 0,
676
+ "pod_default_pod01_container_container1_state_terminated_reason_Other": 0,
677
+ "pod_default_pod01_container_container1_state_waiting": 0,
678
+ "pod_default_pod01_container_container1_state_waiting_reason_ContainerCreating": 0,
679
+ "pod_default_pod01_container_container1_state_waiting_reason_CrashLoopBackOff": 0,
680
+ "pod_default_pod01_container_container1_state_waiting_reason_CreateContainerConfigError": 0,
681
+ "pod_default_pod01_container_container1_state_waiting_reason_CreateContainerError": 0,
682
+ "pod_default_pod01_container_container1_state_waiting_reason_ErrImagePull": 0,
683
+ "pod_default_pod01_container_container1_state_waiting_reason_ImagePullBackOff": 0,
684
+ "pod_default_pod01_container_container1_state_waiting_reason_InvalidImageName": 0,
685
+ "pod_default_pod01_container_container1_state_waiting_reason_Other": 0,
686
+ "pod_default_pod01_container_container1_state_waiting_reason_PodInitializing": 0,
687
+ "pod_default_pod01_container_container2_readiness": 1,
688
+ "pod_default_pod01_container_container2_restarts": 0,
689
+ "pod_default_pod01_container_container2_state_running": 1,
690
+ "pod_default_pod01_container_container2_state_terminated": 0,
691
+ "pod_default_pod01_container_container2_state_terminated_reason_Completed": 0,
692
+ "pod_default_pod01_container_container2_state_terminated_reason_ContainerCannotRun": 0,
693
+ "pod_default_pod01_container_container2_state_terminated_reason_DeadlineExceeded": 0,
694
+ "pod_default_pod01_container_container2_state_terminated_reason_Error": 0,
695
+ "pod_default_pod01_container_container2_state_terminated_reason_Evicted": 0,
696
+ "pod_default_pod01_container_container2_state_terminated_reason_OOMKilled": 0,
697
+ "pod_default_pod01_container_container2_state_terminated_reason_Other": 0,
698
+ "pod_default_pod01_container_container2_state_waiting": 0,
699
+ "pod_default_pod01_container_container2_state_waiting_reason_ContainerCreating": 0,
700
+ "pod_default_pod01_container_container2_state_waiting_reason_CrashLoopBackOff": 0,
701
+ "pod_default_pod01_container_container2_state_waiting_reason_CreateContainerConfigError": 0,
702
+ "pod_default_pod01_container_container2_state_waiting_reason_CreateContainerError": 0,
703
+ "pod_default_pod01_container_container2_state_waiting_reason_ErrImagePull": 0,
704
+ "pod_default_pod01_container_container2_state_waiting_reason_ImagePullBackOff": 0,
705
+ "pod_default_pod01_container_container2_state_waiting_reason_InvalidImageName": 0,
706
+ "pod_default_pod01_container_container2_state_waiting_reason_Other": 0,
707
+ "pod_default_pod01_container_container2_state_waiting_reason_PodInitializing": 0,
708
+ "pod_default_pod01_containers": 2,
709
+ "pod_default_pod01_containers_state_running": 2,
710
+ "pod_default_pod01_containers_state_terminated": 0,
711
+ "pod_default_pod01_containers_state_waiting": 0,
712
+ "pod_default_pod01_cpu_limits_used": 400,
713
+ "pod_default_pod01_cpu_requests_used": 200,
714
+ "pod_default_pod01_init_containers": 1,
715
+ "pod_default_pod01_init_containers_state_running": 0,
716
+ "pod_default_pod01_init_containers_state_terminated": 1,
717
+ "pod_default_pod01_init_containers_state_waiting": 0,
718
+ "pod_default_pod01_mem_limits_used": 419430400,
719
+ "pod_default_pod01_mem_requests_used": 209715200,
720
+ "pod_default_pod01_phase_failed": 0,
721
+ "pod_default_pod01_phase_pending": 0,
722
+ "pod_default_pod01_phase_running": 1,
723
+ "pod_default_pod01_phase_succeeded": 0,
724
+ "pod_default_pod02_age": 4,
725
+ "pod_default_pod02_cond_containersready": 1,
726
+ "pod_default_pod02_cond_podinitialized": 1,
727
+ "pod_default_pod02_cond_podready": 1,
728
+ "pod_default_pod02_cond_podscheduled": 1,
729
+ "pod_default_pod02_container_container1_readiness": 1,
730
+ "pod_default_pod02_container_container1_restarts": 0,
731
+ "pod_default_pod02_container_container1_state_running": 1,
732
+ "pod_default_pod02_container_container1_state_terminated": 0,
733
+ "pod_default_pod02_container_container1_state_terminated_reason_Completed": 0,
734
+ "pod_default_pod02_container_container1_state_terminated_reason_ContainerCannotRun": 0,
735
+ "pod_default_pod02_container_container1_state_terminated_reason_DeadlineExceeded": 0,
736
+ "pod_default_pod02_container_container1_state_terminated_reason_Error": 0,
737
+ "pod_default_pod02_container_container1_state_terminated_reason_Evicted": 0,
738
+ "pod_default_pod02_container_container1_state_terminated_reason_OOMKilled": 0,
739
+ "pod_default_pod02_container_container1_state_terminated_reason_Other": 0,
740
+ "pod_default_pod02_container_container1_state_waiting": 0,
741
+ "pod_default_pod02_container_container1_state_waiting_reason_ContainerCreating": 0,
742
+ "pod_default_pod02_container_container1_state_waiting_reason_CrashLoopBackOff": 0,
743
+ "pod_default_pod02_container_container1_state_waiting_reason_CreateContainerConfigError": 0,
744
+ "pod_default_pod02_container_container1_state_waiting_reason_CreateContainerError": 0,
745
+ "pod_default_pod02_container_container1_state_waiting_reason_ErrImagePull": 0,
746
+ "pod_default_pod02_container_container1_state_waiting_reason_ImagePullBackOff": 0,
747
+ "pod_default_pod02_container_container1_state_waiting_reason_InvalidImageName": 0,
748
+ "pod_default_pod02_container_container1_state_waiting_reason_Other": 0,
749
+ "pod_default_pod02_container_container1_state_waiting_reason_PodInitializing": 0,
750
+ "pod_default_pod02_container_container2_readiness": 1,
751
+ "pod_default_pod02_container_container2_restarts": 0,
752
+ "pod_default_pod02_container_container2_state_running": 1,
753
+ "pod_default_pod02_container_container2_state_terminated": 0,
754
+ "pod_default_pod02_container_container2_state_terminated_reason_Completed": 0,
755
+ "pod_default_pod02_container_container2_state_terminated_reason_ContainerCannotRun": 0,
756
+ "pod_default_pod02_container_container2_state_terminated_reason_DeadlineExceeded": 0,
757
+ "pod_default_pod02_container_container2_state_terminated_reason_Error": 0,
758
+ "pod_default_pod02_container_container2_state_terminated_reason_Evicted": 0,
759
+ "pod_default_pod02_container_container2_state_terminated_reason_OOMKilled": 0,
760
+ "pod_default_pod02_container_container2_state_terminated_reason_Other": 0,
761
+ "pod_default_pod02_container_container2_state_waiting": 0,
762
+ "pod_default_pod02_container_container2_state_waiting_reason_ContainerCreating": 0,
763
+ "pod_default_pod02_container_container2_state_waiting_reason_CrashLoopBackOff": 0,
764
+ "pod_default_pod02_container_container2_state_waiting_reason_CreateContainerConfigError": 0,
765
+ "pod_default_pod02_container_container2_state_waiting_reason_CreateContainerError": 0,
766
+ "pod_default_pod02_container_container2_state_waiting_reason_ErrImagePull": 0,
767
+ "pod_default_pod02_container_container2_state_waiting_reason_ImagePullBackOff": 0,
768
+ "pod_default_pod02_container_container2_state_waiting_reason_InvalidImageName": 0,
769
+ "pod_default_pod02_container_container2_state_waiting_reason_Other": 0,
770
+ "pod_default_pod02_container_container2_state_waiting_reason_PodInitializing": 0,
771
+ "pod_default_pod02_containers": 2,
772
+ "pod_default_pod02_containers_state_running": 2,
773
+ "pod_default_pod02_containers_state_terminated": 0,
774
+ "pod_default_pod02_containers_state_waiting": 0,
775
+ "pod_default_pod02_cpu_limits_used": 400,
776
+ "pod_default_pod02_cpu_requests_used": 200,
777
+ "pod_default_pod02_init_containers": 1,
778
+ "pod_default_pod02_init_containers_state_running": 0,
779
+ "pod_default_pod02_init_containers_state_terminated": 1,
780
+ "pod_default_pod02_init_containers_state_waiting": 0,
781
+ "pod_default_pod02_mem_limits_used": 419430400,
782
+ "pod_default_pod02_mem_requests_used": 209715200,
783
+ "pod_default_pod02_phase_failed": 0,
784
+ "pod_default_pod02_phase_pending": 0,
785
+ "pod_default_pod02_phase_running": 1,
786
+ "pod_default_pod02_phase_succeeded": 0,
787
}
788
copyAge(expected, mx)
789
@@ -661,6 +796,7 @@ func TestKubeState_Collect(t *testing.T) {
796
len(baseCharts),
797
len(*ks.Charts()),
798
)
799
+ module.TestMetricsHasAllChartsDims(t, ks.Charts(), mx)
800
}
801
802
return testCase{
src/go/plugin/go.d/modules/k8s_state/metadata.yaml
+16
-2
@@ -347,10 +347,24 @@ modules:
347
unit: state
348
chart_type: line
349
dimensions:
350
- - name: a dimension per reason
350
+ - name: PodInitializing
351
+ - name: ContainerCreating
352
+ - name: CrashLoopBackOff
353
+ - name: CreateContainerConfigError
354
+ - name: ErrImagePull
355
+ - name: ImagePullBackOff
356
+ - name: CreateContainerError
357
+ - name: InvalidImageName
358
+ - name: Other
359
- name: k8s_state.pod_container_terminated_state_reason
360
description: Container terminated state reason
361
unit: state
362
chart_type: line
363
dimensions:
356
- - name: a dimension per reason
364
+ - name: OOMKilled
365
+ - name: Completed
366
+ - name: Error
367
+ - name: ContainerCannotRun
368
+ - name: DeadlineExceeded
369
+ - name: Evicted
370
+ - name: Other
src/go/plugin/go.d/modules/k8s_state/state.go
+17
-25
@@ -36,9 +36,7 @@ func newPodState() *podState {
36
37
func newContainerState() *containerState {
38
return &containerState{
39
- new: true,
40
- stateWaitingReasons: make(map[string]*containerStateReason),
41
- stateTerminatedReasons: make(map[string]*containerStateReason),
39
+ new: true,
40
}
41
}
42
@@ -138,28 +136,22 @@ type (
136
137
func (ps podState) id() string { return ps.namespace + "_" + ps.name }
138
141
-type (
142
- containerState struct {
143
- new bool
139
+type containerState struct {
140
+ new bool
141
145
- name string
146
- uid string
142
+ name string
143
+ uid string
144
148
- podName string
149
- nodeName string
150
- namespace string
145
+ podName string
146
+ nodeName string
147
+ namespace string
148
152
- ready bool
153
- restarts int64
154
- stateRunning bool
155
- stateWaiting bool
156
- stateTerminated bool
157
- stateWaitingReasons map[string]*containerStateReason
158
- stateTerminatedReasons map[string]*containerStateReason
159
- }
160
- containerStateReason struct {
161
- new bool
162
- reason string
163
- active bool
164
- }
165
-)
149
+ ready bool
150
+ restarts int64
151
+ stateRunning bool
152
+ stateWaiting bool
153
+ stateTerminated bool
154
+
155
+ waitingReason string
156
+ terminatedReason string
157
+}
src/go/plugin/go.d/modules/k8s_state/update_pod_state.go
+2
-24
@@ -79,15 +79,6 @@ func (ks *KubeState) updatePodState(r resource) {
79
80
ps.phase = pod.Status.Phase
81
82
- for _, cs := range ps.containers {
83
- for _, r := range cs.stateWaitingReasons {
84
- r.active = false
85
- }
86
- for _, r := range cs.stateTerminatedReasons {
87
- r.active = false
88
- }
89
- }
90
-
82
for _, cntr := range pod.Status.ContainerStatuses {
83
cs, ok := ps.containers[cntr.Name]
84
if !ok {
@@ -108,23 +99,10 @@ func (ks *KubeState) updatePodState(r resource) {
99
cs.stateTerminated = cntr.State.Terminated != nil
100
101
if cntr.State.Waiting != nil {
111
- reason := cntr.State.Waiting.Reason
112
- r, ok := cs.stateWaitingReasons[reason]
113
- if !ok {
114
- r = &containerStateReason{new: true, reason: reason}
115
- cs.stateWaitingReasons[reason] = r
116
- }
117
- r.active = true
102
+ cs.waitingReason = cntr.State.Waiting.Reason
103
}
119
-
104
if cntr.State.Terminated != nil {
121
- reason := cntr.State.Terminated.Reason
122
- r, ok := cs.stateTerminatedReasons[reason]
123
- if !ok {
124
- r = &containerStateReason{new: true, reason: reason}
125
- cs.stateTerminatedReasons[reason] = r
126
- }
127
- r.active = true
105
+ cs.terminatedReason = cntr.State.Terminated.Reason
106
}
107
}
108