mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-29 20:10:21 +00:00
98 lines
4.4 KiB
Go
98 lines
4.4 KiB
Go
package kubernetes
|
|
|
|
import "time"
|
|
|
|
// Report represents a single heartbeat from the Kubernetes agent to Pulse.
|
|
// It is designed to be useful without requiring Metrics Server (metrics.k8s.io).
|
|
type Report struct {
|
|
Agent AgentInfo `json:"agent"`
|
|
Cluster ClusterInfo `json:"cluster"`
|
|
Nodes []Node `json:"nodes,omitempty"`
|
|
Pods []Pod `json:"pods,omitempty"`
|
|
Deployments []Deployment `json:"deployments,omitempty"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
}
|
|
|
|
// AgentInfo describes the reporting agent instance.
|
|
type AgentInfo struct {
|
|
ID string `json:"id"`
|
|
Version string `json:"version"`
|
|
Type string `json:"type,omitempty"` // "unified" when running as part of pulse-agent
|
|
IntervalSeconds int `json:"intervalSeconds"`
|
|
}
|
|
|
|
// ClusterInfo identifies the Kubernetes cluster and provides basic metadata.
|
|
type ClusterInfo struct {
|
|
ID string `json:"id"` // Stable cluster identifier (agent-generated)
|
|
Name string `json:"name,omitempty"` // Optional human-friendly name
|
|
Server string `json:"server,omitempty"` // API server URL
|
|
Context string `json:"context,omitempty"` // Kubeconfig context name if applicable
|
|
Version string `json:"version,omitempty"` // Kubernetes version string
|
|
Provider string `json:"provider,omitempty"` // Optional: gke, eks, aks, etc (best-effort)
|
|
Namespace string `json:"namespace,omitempty"` // Optional agent namespace when running in-cluster
|
|
}
|
|
|
|
// Node represents a Kubernetes node at report time.
|
|
type Node struct {
|
|
UID string `json:"uid"`
|
|
Name string `json:"name"`
|
|
Ready bool `json:"ready"`
|
|
Unschedulable bool `json:"unschedulable,omitempty"`
|
|
KubeletVersion string `json:"kubeletVersion,omitempty"`
|
|
ContainerRuntimeVersion string `json:"containerRuntimeVersion,omitempty"`
|
|
OSImage string `json:"osImage,omitempty"`
|
|
KernelVersion string `json:"kernelVersion,omitempty"`
|
|
Architecture string `json:"architecture,omitempty"`
|
|
Capacity NodeResources `json:"capacity,omitempty"`
|
|
Allocatable NodeResources `json:"allocatable,omitempty"`
|
|
Roles []string `json:"roles,omitempty"`
|
|
}
|
|
|
|
type NodeResources struct {
|
|
CPUCores int64 `json:"cpuCores,omitempty"`
|
|
MemoryBytes int64 `json:"memoryBytes,omitempty"`
|
|
Pods int64 `json:"pods,omitempty"`
|
|
}
|
|
|
|
// Pod represents a Kubernetes pod at report time.
|
|
type Pod struct {
|
|
UID string `json:"uid"`
|
|
Name string `json:"name"`
|
|
Namespace string `json:"namespace"`
|
|
NodeName string `json:"nodeName,omitempty"`
|
|
Phase string `json:"phase,omitempty"` // Pending, Running, Succeeded, Failed, Unknown
|
|
Reason string `json:"reason,omitempty"` // Best-effort
|
|
Message string `json:"message,omitempty"`
|
|
QoSClass string `json:"qosClass,omitempty"`
|
|
CreatedAt time.Time `json:"createdAt,omitempty"`
|
|
StartTime *time.Time `json:"startTime,omitempty"`
|
|
Restarts int `json:"restarts,omitempty"`
|
|
Labels map[string]string `json:"labels,omitempty"`
|
|
|
|
OwnerKind string `json:"ownerKind,omitempty"`
|
|
OwnerName string `json:"ownerName,omitempty"`
|
|
|
|
Containers []PodContainer `json:"containers,omitempty"`
|
|
}
|
|
|
|
type PodContainer struct {
|
|
Name string `json:"name"`
|
|
Image string `json:"image,omitempty"`
|
|
Ready bool `json:"ready"`
|
|
RestartCount int32 `json:"restartCount,omitempty"`
|
|
State string `json:"state,omitempty"` // waiting, running, terminated
|
|
Reason string `json:"reason,omitempty"` // waiting/terminated reason
|
|
Message string `json:"message,omitempty"`
|
|
}
|
|
|
|
// Deployment represents a Kubernetes deployment at report time.
|
|
type Deployment struct {
|
|
UID string `json:"uid"`
|
|
Name string `json:"name"`
|
|
Namespace string `json:"namespace"`
|
|
DesiredReplicas int32 `json:"desiredReplicas,omitempty"`
|
|
UpdatedReplicas int32 `json:"updatedReplicas,omitempty"`
|
|
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
|
|
AvailableReplicas int32 `json:"availableReplicas,omitempty"`
|
|
Labels map[string]string `json:"labels,omitempty"`
|
|
}
|