summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/k8s_state/update_node_state.go
blob: 80f5c26c84144575383b5cb4684ee876f5746af4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// SPDX-License-Identifier: GPL-3.0-or-later

package k8s_state

func (ks *KubeState) updateNodeState(r resource) {
	if r.value() == nil {
		if ns, ok := ks.state.nodes[r.source()]; ok {
			ns.deleted = true
		}
		return
	}

	node, err := toNode(r)
	if err != nil {
		ks.Warning(err)
		return
	}

	if myNodeName != "" && node.Name != myNodeName {
		return
	}

	ns, ok := ks.state.nodes[r.source()]
	if !ok {
		ns = newNodeState()
		ks.state.nodes[r.source()] = ns
	}

	if !ok {
		ns.name = node.Name
		ns.creationTime = node.CreationTimestamp.Time
		ns.allocatableCPU = int64(node.Status.Allocatable.Cpu().AsApproximateFloat64() * 1000)
		ns.allocatableMem = node.Status.Allocatable.Memory().Value()
		ns.allocatablePods = node.Status.Allocatable.Pods().Value()
		copyLabels(ns.labels, node.Labels)
	}

	ns.unSchedulable = node.Spec.Unschedulable

	for _, c := range node.Status.Conditions {
		if v, ok := ns.conditions[string(c.Type)]; !ok {
			ns.conditions[string(c.Type)] = &nodeStateCondition{new: true, status: c.Status}
		} else {
			v.status = c.Status
		}
	}
}