model/kubernetes.go
Rama main · réplica de lectura del repositorio original.
package model
import (
"github.com/coroot/coroot/timeseries"
"github.com/coroot/coroot/utils"
"inet.af/netaddr"
)
type ApplicationKind string
const (
ApplicationKindDeployment ApplicationKind = "Deployment"
ApplicationKindStatefulSet ApplicationKind = "StatefulSet"
ApplicationKindDaemonSet ApplicationKind = "DaemonSet"
ApplicationKindCronJob ApplicationKind = "CronJob"
ApplicationKindJob ApplicationKind = "Job"
ApplicationKindReplicaSet ApplicationKind = "ReplicaSet"
ApplicationKindPod ApplicationKind = "Pod"
ApplicationKindStaticPods ApplicationKind = "StaticPods"
ApplicationKindUnknown ApplicationKind = "Unknown"
ApplicationKindDockerSwarmService ApplicationKind = "DockerSwarmService"
ApplicationKindExternalService ApplicationKind = "ExternalService"
ApplicationKindDatabaseCluster ApplicationKind = "DatabaseCluster"
ApplicationKindRds ApplicationKind = "RDS"
ApplicationKindElasticacheCluster ApplicationKind = "ElasticacheCluster"
ApplicationKindCloudSQL ApplicationKind = "CloudSQL"
ApplicationKindMemorystore ApplicationKind = "Memorystore"
ApplicationKindOCIDB ApplicationKind = "OCIDB"
ApplicationKindOCICache ApplicationKind = "OCICache"
ApplicationKindNomadJobGroup ApplicationKind = "NomadJobGroup"
ApplicationKindECSService ApplicationKind = "ECSService"
ApplicationKindArgoWorkflow ApplicationKind = "Workflow"
ApplicationKindSparkApplication ApplicationKind = "SparkApplication"
ApplicationKindCustomApplication ApplicationKind = "CustomApplication"
ApplicationKindGitLabJob ApplicationKind = "GitLabJob"
ApplicationKindInferenceService ApplicationKind = "InferenceService"
ApplicationKindDynamoGraphDeployment ApplicationKind = "DynamoGraphDeployment"
ApplicationKindDisaggregatedSet ApplicationKind = "DisaggregatedSet"
ApplicationKindLeaderWorkerSet ApplicationKind = "LeaderWorkerSet"
ApplicationKindSandbox ApplicationKind = "Sandbox"
)
type Job struct{}
type CronJob struct {
Schedule LabelLastValue
ConcurrencyPolicy LabelLastValue
StatusActive *timeseries.TimeSeries
LastScheduleTime *timeseries.TimeSeries
NextScheduleTime *timeseries.TimeSeries
}
type DaemonSet struct {
ReplicasDesired *timeseries.TimeSeries
}
type ReplicaSet struct {
}
type Deployment struct {
ReplicasDesired *timeseries.TimeSeries
ReplicaSets map[string]*ReplicaSet
}
type StatefulSet struct {
ReplicasDesired *timeseries.TimeSeries
ReplicasUpdated *timeseries.TimeSeries
}
const (
ServiceTypeNodePort = "NodePort"
ServiceTypeLoadBalancer = "LoadBalancer"
)
type Service struct {
Name string
Namespace string
ClusterIP string
Type LabelLastValue
Endpoints map[netaddr.IPPort]struct{} // the port is 0 if unknown
LoadBalancerIPs *utils.StringSet
NodePorts *utils.StringSet
Ports *utils.StringSet
DestinationApps map[ApplicationId]*Application
}
func (svc *Service) GetDestinationApplication() *Application {
if len(svc.DestinationApps) == 1 {
for _, app := range svc.DestinationApps {
return app
}
}
if len(svc.DestinationApps) > 1 {
var chosen *Application
cluster := ""
for _, app := range svc.DestinationApps {
c := app.databaseClusterName()
if c == "" {
return nil
}
if cluster == "" {
cluster = c
} else if c != cluster {
return nil
}
if chosen == nil || len(app.Instances) > len(chosen.Instances) {
chosen = app
}
}
return chosen
}
return nil
}
func (app *Application) databaseClusterName() string {
for _, i := range app.Instances {
if c := i.ClusterName.Value(); c != "" {
return c
}
}
return ""
}