Просмотр исходного кода

Copilot fixes

Signed-off-by: Sean Holcomb <seanholcomb@gmail.com>
Sean Holcomb 3 недель назад
Родитель
Сommit
c85ef600b7

+ 1 - 1
core/pkg/model/kubemodel/container.go

@@ -10,7 +10,7 @@ type Container struct {
 	PodUID           string             `json:"podUid"`
 	Name             string             `json:"name"`
 	ResourceRequests ResourceQuantities `json:"resourceRequests"`
-	ResourceLimits   ResourceQuantities `json:"ResourceLimits"`
+	ResourceLimits   ResourceQuantities `json:"resourceLimits"`
 	CPUCoreUsageAvg  float64            `json:"cpuCoreUsageAvg"`
 	CPUCoreUsageMax  float64            `json:"cpuCoreUsageMax"`
 	RAMBytesUsageAvg float64            `json:"ramBytesUsageAvg"`

+ 30 - 4
core/pkg/source/decoders.go

@@ -3,6 +3,7 @@ package source
 import (
 	"time"
 
+	"github.com/opencost/opencost/core/pkg/log"
 	"github.com/opencost/opencost/core/pkg/util"
 )
 
@@ -405,12 +406,18 @@ func DecodeNodeCPUCoresCapacityResult(result *QueryResult) *NodeCPUCoresCapacity
 	uid, _ := result.GetString(UIDLabel)
 	cluster, _ := result.GetCluster()
 	node, _ := result.GetNode()
+	var value float64
+	if len(result.Values) > 0 {
+		value = result.Values[0].Value
+	} else {
+		log.Warnf("Error decoding node CPU cores capacity result for node '%s': empty value returned", uid)
+	}
 
 	return &NodeCPUCoresCapacityResult{
 		UID:      uid,
 		Cluster:  cluster,
 		Node:     node,
-		CPUCores: result.Values[0].Value,
+		CPUCores: value,
 	}
 }
 
@@ -431,13 +438,18 @@ func DecodeNodeRAMBytesCapacityResult(result *QueryResult) *NodeRAMBytesCapacity
 	uid, _ := result.GetString(UIDLabel)
 	cluster, _ := result.GetCluster()
 	node, _ := result.GetNode()
-	bytes := result.Values[0].Value
+	var value float64
+	if len(result.Values) > 0 {
+		value = result.Values[0].Value
+	} else {
+		log.Warnf("Error decoding node RAM bytes capacity result for node '%s': empty value returned", uid)
+	}
 
 	return &NodeRAMBytesCapacityResult{
 		UID:      uid,
 		Cluster:  cluster,
 		Node:     node,
-		RAMBytes: bytes,
+		RAMBytes: value,
 	}
 }
 
@@ -460,13 +472,19 @@ func DecodeNodeGPUCountResult(result *QueryResult) *NodeGPUCountResult {
 	cluster, _ := result.GetCluster()
 	node, _ := result.GetNode()
 	providerId, _ := result.GetProviderID()
+	var value float64
+	if len(result.Values) > 0 {
+		value = result.Values[0].Value
+	} else {
+		log.Warnf("Error decoding node GPU count capacity result for node '%s': empty value returned", uid)
+	}
 
 	return &NodeGPUCountResult{
 		UID:        uid,
 		Cluster:    cluster,
 		Node:       node,
 		ProviderID: providerId,
-		GPUCount:   result.Values[0].Value,
+		GPUCount:   value,
 	}
 }
 
@@ -1157,6 +1175,8 @@ func DecodePVBytesResult(result *QueryResult) *PVBytesResult {
 	var value float64
 	if len(result.Values) > 0 {
 		value = result.Values[0].Value
+	} else {
+		log.Warnf("Error decoding PV bytes result for pv '%s': empty value returned", uid)
 	}
 
 	return &PVBytesResult{
@@ -1247,6 +1267,8 @@ func DecodePodNetworkBytesResult(result *QueryResult) *PodNetworkBytesResult {
 	var value float64
 	if len(result.Values) > 0 {
 		value = result.Values[0].Value
+	} else {
+		log.Warnf("Error decoding pod network bytes result for pod '%s': empty value returned", uid)
 	}
 
 	return &PodNetworkBytesResult{
@@ -1958,6 +1980,8 @@ func DecodeResourceResult(result *QueryResult) *ResourceResult {
 	var value float64
 	if len(result.Values) > 0 {
 		value = result.Values[0].Value
+	} else {
+		log.Warnf("Error decoding resource for uid '%s': empty value returned", uid)
 	}
 
 	return &ResourceResult{
@@ -2051,6 +2075,8 @@ func DecodeDCGMDeviceContainerUsageResult(result *QueryResult) *DCGMDeviceContai
 	var value float64
 	if len(result.Values) > 0 {
 		value = result.Values[0].Value
+	} else {
+		log.Warnf("Error decoding DCGM Device Container Udage Result for device '%s': empty value returned", uuid)
 	}
 
 	return &DCGMDeviceContainerUsageResult{

+ 14 - 1
modules/collector-source/pkg/collector/collector.go

@@ -16,6 +16,7 @@ func NewOpenCostMetricStore() metric.MetricStore {
 	memStore.Register(NewPVUsedAverageMetricCollector())
 	memStore.Register(NewPVUsedMaxMetricCollector())
 	memStore.Register(NewPVCInfoMetricCollector())
+	memStore.Register(NewPVCUptimeMetricCollector())
 	memStore.Register(NewPVInfoMetricCollector())
 	memStore.Register(NewPVUptimeMetricCollector())
 	memStore.Register(NewPVActiveMinutesMetricCollector())
@@ -251,6 +252,18 @@ func NewPVCInfoMetricCollector() *metric.MetricCollector {
 	)
 }
 
+func NewPVCUptimeMetricCollector() *metric.MetricCollector {
+	return metric.NewMetricCollector(
+		metric.PVCUptimeID,
+		metric.KubePersistentVolumeClaimInfo,
+		[]string{
+			source.UIDLabel,
+		},
+		aggregator.Uptime,
+		nil,
+	)
+}
+
 func NewPVUptimeMetricCollector() *metric.MetricCollector {
 	return metric.NewMetricCollector(
 		metric.PVUptimeID,
@@ -2692,7 +2705,7 @@ func NewResourceQuotaInfoMetricCollector() *metric.MetricCollector {
 		[]string{
 			source.UIDLabel,
 		},
-		aggregator.Uptime,
+		aggregator.Info,
 		nil,
 	)
 }

+ 4 - 4
modules/collector-source/pkg/scrape/clustercache.go

@@ -242,11 +242,12 @@ func (ccs *ClusterCacheScraper) scrapeDeployments(deployments []*clustercache.De
 		deploymentInfo := map[string]string{
 			source.UIDLabel:          string(deployment.UID),
 			source.NamespaceUIDLabel: string(nsUID),
+			source.NamespaceLabel:    deployment.Namespace,
 			source.DeploymentLabel:   deployment.Name,
 		}
 
 		scrapeResults = append(scrapeResults, metric.Update{
-			Name:           metric.DeploymentLabels,
+			Name:           metric.DeploymentInfo,
 			Labels:         deploymentInfo,
 			Value:          0,
 			AdditionalInfo: deploymentInfo,
@@ -275,7 +276,6 @@ func (ccs *ClusterCacheScraper) scrapeDeployments(deployments []*clustercache.De
 		})
 
 		// deployment match labels
-		deploymentInfo[source.NamespaceLabel] = deployment.Namespace
 		matchLabelNames, matchLabelValues := promutil.KubeLabelsToLabels(deployment.MatchLabels)
 		deploymentMatchLabels := util.ToMap(matchLabelNames, matchLabelValues)
 
@@ -351,7 +351,7 @@ func (ccs *ClusterCacheScraper) scrapeNamespaces(namespaces []*clustercache.Name
 
 func (ccs *ClusterCacheScraper) GetScrapePods(
 	pods []*clustercache.Pod,
-	nodeIndex,
+	nodeIndex *SyncMap[string, types.UID],
 	namespaceIndex *SyncMap[string, types.UID],
 	pvcIndex *SyncMap[pvcKey, types.UID],
 ) ScrapeFunc {
@@ -362,7 +362,7 @@ func (ccs *ClusterCacheScraper) GetScrapePods(
 
 func (ccs *ClusterCacheScraper) scrapePods(
 	pods []*clustercache.Pod,
-	nodeIndex,
+	nodeIndex *SyncMap[string, types.UID],
 	namespaceIndex *SyncMap[string, types.UID],
 	pvcIndex *SyncMap[pvcKey, types.UID],
 ) []metric.Update {

+ 2 - 2
modules/prometheus-source/pkg/prom/metricsquerier.go

@@ -200,7 +200,7 @@ func (pds *PrometheusMetricsQuerier) QueryLocalStorageUsedCost(start, end time.T
 
 func (pds *PrometheusMetricsQuerier) QueryLocalStorageUsedAvg(start, end time.Time) *source.Future[source.LocalStorageUsedAvgResult] {
 	const queryName = "QueryLocalStorageUsedAvg"
-	const localStorageUsedAvgQuery = `avg(sum(avg_over_time(container_fs_usage_bytes{device=~"/dev/(nvme|sda).*", id="/", %s}[%s])) by (instance, device, %s, job)) by (instance, device, uid, %s)`
+	const localStorageUsedAvgQuery = `avg(sum(avg_over_time(container_fs_usage_bytes{device=~"/dev/(nvme|sda).*", id="/", %s}[%s])) by (instance, device, %s, job)) by (instance, device, %s)`
 
 	cfg := pds.promConfig
 
@@ -218,7 +218,7 @@ func (pds *PrometheusMetricsQuerier) QueryLocalStorageUsedAvg(start, end time.Ti
 
 func (pds *PrometheusMetricsQuerier) QueryLocalStorageUsedMax(start, end time.Time) *source.Future[source.LocalStorageUsedMaxResult] {
 	const queryName = "QueryLocalStorageUsedMax"
-	const localStorageUsedMaxQuery = `max(sum(max_over_time(container_fs_usage_bytes{device=~"/dev/(nvme|sda).*", id="/", %s}[%s])) by (instance, device, %s, job)) by (instance, device, uid, %s)`
+	const localStorageUsedMaxQuery = `max(sum(max_over_time(container_fs_usage_bytes{device=~"/dev/(nvme|sda).*", id="/", %s}[%s])) by (instance, device, %s, job)) by (instance, device, %s)`
 
 	cfg := pds.promConfig