github.com/netdata/go.d.plugin@v0.58.1/modules/k8s_state/update_node_state.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package k8s_state
     4  
     5  func (ks *KubeState) updateNodeState(r resource) {
     6  	if r.value() == nil {
     7  		if ns, ok := ks.state.nodes[r.source()]; ok {
     8  			ns.deleted = true
     9  		}
    10  		return
    11  	}
    12  
    13  	node, err := toNode(r)
    14  	if err != nil {
    15  		ks.Warning(err)
    16  		return
    17  	}
    18  
    19  	if myNodeName != "" && node.Name != myNodeName {
    20  		return
    21  	}
    22  
    23  	ns, ok := ks.state.nodes[r.source()]
    24  	if !ok {
    25  		ns = newNodeState()
    26  		ks.state.nodes[r.source()] = ns
    27  	}
    28  
    29  	if !ok {
    30  		ns.name = node.Name
    31  		ns.creationTime = node.CreationTimestamp.Time
    32  		ns.allocatableCPU = int64(node.Status.Allocatable.Cpu().AsApproximateFloat64() * 1000)
    33  		ns.allocatableMem = node.Status.Allocatable.Memory().Value()
    34  		ns.allocatablePods = node.Status.Allocatable.Pods().Value()
    35  		copyLabels(ns.labels, node.Labels)
    36  	}
    37  
    38  	ns.unSchedulable = node.Spec.Unschedulable
    39  
    40  	for _, c := range node.Status.Conditions {
    41  		if v, ok := ns.conditions[string(c.Type)]; !ok {
    42  			ns.conditions[string(c.Type)] = &nodeStateCondition{new: true, status: c.Status}
    43  		} else {
    44  			v.status = c.Status
    45  		}
    46  	}
    47  }