Quellcode durchsuchen

KubeModel types

Niko Kovacevic vor 6 Monaten
Ursprung
Commit
0052b60c49

+ 9 - 0
core/pkg/model/kubemodel/cluster.go

@@ -0,0 +1,9 @@
+package kubemodel
+
+type Cluster struct {
+	ID       string
+	Provider Provider
+	Account  string
+	Name     string
+	Window   Window
+}

+ 15 - 0
core/pkg/model/kubemodel/kubemodel.go

@@ -0,0 +1,15 @@
+package kubemodel
+
+import "time"
+
+type KubeModel struct {
+	Metadata KubeModelMetadata
+	Cluster  Cluster
+}
+
+type KubeModelMetadata struct {
+	CreatedAt  time.Time
+	DataSource string
+	Warnings   []string
+	Errors     []error
+}

+ 9 - 0
core/pkg/model/kubemodel/namespace.go

@@ -0,0 +1,9 @@
+package kubemodel
+
+type Namespace struct {
+	ID          string
+	ClusterID   string
+	Name        string
+	Labels      map[string]string
+	Annotations map[string]string
+}

+ 13 - 0
core/pkg/model/kubemodel/provider.go

@@ -0,0 +1,13 @@
+package kubemodel
+
+type Provider string
+
+const (
+	ProviderEmpty        Provider = ""
+	ProviderAWS          Provider = "AWS"
+	ProviderGCP          Provider = "GCP"
+	ProviderAzure        Provider = "Azure"
+	ProviderAlibaba      Provider = "Alibaba"
+	ProviderDigitalOcean Provider = "DigitalOcean"
+	ProviderOracle       Provider = "Oracle"
+)

+ 50 - 0
core/pkg/model/kubemodel/resource.go

@@ -0,0 +1,50 @@
+package kubemodel
+
+import "fmt"
+
+type Resource string
+
+const (
+	ResourceCPU    = "cpu"
+	ResourceMemory = "memory"
+	ResourceGPU    = "gpu"
+)
+
+type Unit string
+
+const (
+	UnitCPUm       = "m"
+	UnitMemoryMi   = "Mi"
+	UnitGPU        = "gpu"
+	UnitByte       = "B"
+	UnitGB         = "GB"
+	UnitTimeHr     = "hr"
+	UnitCPUmHr     = "m-hr"
+	UnitMemoryMiHr = "Mi-hr"
+	UnitGPUHr      = "gpu-hr"
+	UnitGBHr       = "GB-hr"
+)
+
+type ResourceQuantity struct {
+	Resource Resource
+	Unit     Unit
+	Quantity float64
+}
+
+type ResourcePrice struct {
+	Resource Resource
+	Unit     Unit
+	Price    float64
+}
+
+func (rq ResourceQuantity) ApplyPrice(rp ResourcePrice) (float64, error) {
+	if rp.Resource != rq.Resource {
+		return 0.0, fmt.Errorf("mismatched resources: %s != %s", rq.Unit, rp.Unit)
+	}
+
+	if rp.Unit != rq.Unit {
+		return 0.0, fmt.Errorf("mismatched units: %s != %s", rq.Unit, rp.Unit)
+	}
+
+	return rq.Quantity * rp.Price, nil
+}

+ 30 - 0
core/pkg/model/kubemodel/resourcequota.go

@@ -0,0 +1,30 @@
+package kubemodel
+
+type ResourceQuotaKind string
+
+const (
+	ResourceQuotaKindCompute = "compute"
+)
+
+type ResourceQuota struct {
+	ID          string
+	NamespaceID string
+	Name        string
+	Kind        ResourceQuotaKind
+	Spec        ResourceQuotaSpec
+	Status      ResourceQuotaStatus
+}
+
+type ResourceQuotaSpec struct {
+	Requests []ResourceQuantity
+	Limits   []ResourceQuantity
+}
+
+type ResourceQuotaStatus struct {
+	Used ResourceQuotaStatusUsed
+}
+
+type ResourceQuotaStatusUsed struct {
+	Requests []ResourceQuantity
+	Limits   []ResourceQuantity
+}

+ 8 - 0
core/pkg/model/kubemodel/window.go

@@ -0,0 +1,8 @@
+package kubemodel
+
+import "time"
+
+type Window struct {
+	Start      time.Time
+	Resolution time.Duration
+}