summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/k8s_state/state.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/k8s_state/state.go165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/k8s_state/state.go b/src/go/collectors/go.d.plugin/modules/k8s_state/state.go
new file mode 100644
index 000000000..1d39df10e
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/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
+ }
+)