diff options
Diffstat (limited to 'src/go/plugin/go.d/modules/k8s_state/state.go')
-rw-r--r-- | src/go/plugin/go.d/modules/k8s_state/state.go | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/go/plugin/go.d/modules/k8s_state/state.go b/src/go/plugin/go.d/modules/k8s_state/state.go new file mode 100644 index 000000000..72bac88ee --- /dev/null +++ b/src/go/plugin/go.d/modules/k8s_state/state.go @@ -0,0 +1,165 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package k8s_state + +import ( + "sync" + "time" + + corev1 "k8s.io/api/core/v1" +) + +func newKubeState() *kubeState { + return &kubeState{ + Mutex: &sync.Mutex{}, + nodes: make(map[string]*nodeState), + pods: make(map[string]*podState), + } +} + +func newNodeState() *nodeState { + return &nodeState{ + new: true, + labels: make(map[string]string), + conditions: make(map[string]*nodeStateCondition), + } +} + +func newPodState() *podState { + return &podState{ + new: true, + labels: make(map[string]string), + initContainers: make(map[string]*containerState), + containers: make(map[string]*containerState), + } +} + +func newContainerState() *containerState { + return &containerState{ + new: true, + stateWaitingReasons: make(map[string]*containerStateReason), + stateTerminatedReasons: make(map[string]*containerStateReason), + } +} + +type kubeState struct { + *sync.Mutex + nodes map[string]*nodeState + pods map[string]*podState +} + +type ( + nodeState struct { + new bool + deleted bool + + name string + unSchedulable bool + labels map[string]string + creationTime time.Time + allocatableCPU int64 + allocatableMem int64 + allocatablePods int64 + conditions map[string]*nodeStateCondition + + stats nodeStateStats + } + nodeStateCondition struct { + new bool + // https://kubernetes.io/docs/concepts/architecture/nodes/#condition + //typ corev1.NodeConditionType + status corev1.ConditionStatus + } + nodeStateStats struct { + reqCPU int64 + limitCPU int64 + reqMem int64 + limitMem int64 + pods int64 + + podsCondPodReady int64 + podsCondPodScheduled int64 + podsCondPodInitialized int64 + podsCondContainersReady int64 + + podsReadinessReady int64 + podsReadinessUnready int64 + + podsPhaseRunning int64 + podsPhaseFailed int64 + podsPhaseSucceeded int64 + podsPhasePending int64 + + containers int64 + initContainers int64 + initContStateRunning int64 + initContStateWaiting int64 + initContStateTerminated int64 + contStateRunning int64 + contStateWaiting int64 + contStateTerminated int64 + } +) + +func (ns *nodeState) id() string { return ns.name } +func (ns *nodeState) resetStats() { ns.stats = nodeStateStats{} } + +type ( + podState struct { + new bool + deleted bool + unscheduled bool + + name string + nodeName string + namespace string + uid string + labels map[string]string + controllerKind string + controllerName string + qosClass string + creationTime time.Time + reqCPU int64 + reqMem int64 + limitCPU int64 + limitMem int64 + // https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions + condPodScheduled corev1.ConditionStatus + condContainersReady corev1.ConditionStatus + condPodInitialized corev1.ConditionStatus + condPodReady corev1.ConditionStatus + // https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase + phase corev1.PodPhase + + initContainers map[string]*containerState + containers map[string]*containerState + } +) + +func (ps podState) id() string { return ps.namespace + "_" + ps.name } + +type ( + containerState struct { + new bool + + name string + uid string + + podName string + nodeName string + namespace string + + ready bool + restarts int64 + stateRunning bool + stateWaiting bool + stateTerminated bool + stateWaitingReasons map[string]*containerStateReason + stateTerminatedReasons map[string]*containerStateReason + } + containerStateReason struct { + new bool + reason string + active bool + } +) |