Преглед изворни кода

KubeModel: stub out new types

Niko Kovacevic пре 6 месеци
родитељ
комит
a3ebffca21

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

@@ -0,0 +1,9 @@
+package kubemodel
+
+// TODO complete
+type Container struct {
+	UID       string
+	PodUID    string
+	Name      string
+	Resources ResourceQuantities
+}

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

@@ -10,7 +10,10 @@ type KubeModelSet struct {
 	Metadata       *KubeModelSetMetadata
 	Window         Window
 	Cluster        *Cluster
+	Containers     map[string]*Container
 	Namespaces     map[string]*Namespace
+	Nodes          map[string]*Node
+	Pods           map[string]*Pod
 	ResourceQuotas map[string]*ResourceQuota
 	indexes        *kubeModelSetIndexes
 }
@@ -82,6 +85,7 @@ func (kms *KubeModelSet) MarshalBinary() ([]byte, error) {
 
 type KubeModelSetMetadata struct {
 	CreatedAt   time.Time
+	CompletedAt time.Time
 	ObjectCount int
 	Errors      []error
 	Warnings    []string

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

@@ -0,0 +1,9 @@
+package kubemodel
+
+// TODO complete
+type Node struct {
+	UID        string
+	ClusterUID string
+	Name       string
+	Resources  ResourceQuantities
+}

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

@@ -0,0 +1,9 @@
+package kubemodel
+
+// TODO complete
+type PersistentVolume struct {
+	UID        string
+	ClusterUID string
+	Name       string
+	Capacity   ResourceQuantities
+}

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

@@ -0,0 +1,9 @@
+package kubemodel
+
+// TODO complete
+type PersistentVolumeClaim struct {
+	UID                 string
+	PersistentVolumeUID string
+	Name                string
+	Resources           ResourceQuantities
+}

+ 11 - 0
core/pkg/model/kubemodel/pod.go

@@ -0,0 +1,11 @@
+package kubemodel
+
+// TODO complete
+type Pod struct {
+	UID                       string
+	NamespaceUID              string
+	NodeUID                   string
+	OwnerUID                  string
+	PersistentVolumeClaimUIDs []string
+	Name                      string
+}

+ 4 - 3
core/pkg/model/kubemodel/resource.go

@@ -5,9 +5,10 @@ import "github.com/opencost/opencost/core/pkg/stats"
 type Resource string
 
 const (
-	ResourceCPU    Resource = "cpu"
-	ResourceMemory Resource = "memory"
-	ResourceGPU    Resource = "gpu"
+	ResourceCPU     Resource = "cpu"
+	ResourceMemory  Resource = "memory"
+	ResourceGPU     Resource = "gpu"
+	ResourceStorage Resource = "storage"
 )
 
 type Unit string

+ 8 - 2
pkg/costmodel/kubemodel.go

@@ -16,30 +16,36 @@ const logTimeFmt string = "2006-01-02T15:04:05"
 // for the window defined by the given start and end times. The KubeModels
 // returned are unaggregated (i.e. down to the container level).
 func (cm *CostModel) ComputeKubeModel(start, end time.Time) (*kubemodel.KubeModelSet, error) {
-	// Initialize new KubeModelSet for requested Window
+	// 1. Initialize new KubeModelSet for requested Window
 	kms := kubemodel.NewKubeModelSet(start, end)
 
-	// Query CostModel for each set of objects
+	// 2. Query CostModel for each set of objects
 	var err error
 
+	// 2.1 Compute Cluster
 	err = cm.kmComputeCluster(kms, start, end)
 	if err != nil {
 		kms.Metadata.Errors = append(kms.Metadata.Errors, err)
 		return kms, fmt.Errorf("error computing kubemodel.Cluster for (%s, %s): %w", start.Format(logTimeFmt), end.Format(logTimeFmt), err)
 	}
 
+	// 2.2 Compute Namespaces
 	err = cm.kmComputeNamespaces(kms, start, end)
 	if err != nil {
 		kms.Metadata.Errors = append(kms.Metadata.Errors, err)
 	}
 	kms.Metadata.ObjectCount += len(kms.Namespaces)
 
+	// 2.3 Compute ResourceQuotas
 	err = cm.kmComputeResourceQuotas(kms, start, end)
 	if err != nil {
 		kms.Metadata.Errors = append(kms.Metadata.Errors, err)
 	}
 	kms.Metadata.ObjectCount += len(kms.ResourceQuotas)
 
+	// 3. Mark KubeModelSet as completed
+	kms.Metadata.CompletedAt = time.Now().UTC()
+
 	return kms, nil
 }