Ctrl K
ComunidadGuías…

model/kubernetes.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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 ""
}