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

add default nodes to the list when keys unavailable

AjayTripathy 6 лет назад
Родитель
Сommit
1aeafe5774
4 измененных файлов с 19 добавлено и 9 удалено
  1. 16 2
      cloud/awsprovider.go
  2. 0 5
      costmodel/cluster.go
  3. 1 0
      costmodel/costmodel.go
  4. 2 2
      main.go

+ 16 - 2
cloud/awsprovider.go

@@ -733,11 +733,25 @@ func (aws *AWS) NodePricing(k Key) (*Node, error) {
 		err := aws.DownloadPricingData()
 		err := aws.DownloadPricingData()
 		aws.DownloadPricingDataLock.RLock()
 		aws.DownloadPricingDataLock.RLock()
 		if err != nil {
 		if err != nil {
-			return nil, err
+			return &Node{
+				Cost:             aws.BaseCPUPrice,
+				BaseCPUPrice:     aws.BaseCPUPrice,
+				BaseRAMPrice:     aws.BaseRAMPrice,
+				BaseGPUPrice:     aws.BaseGPUPrice,
+				UsageType:        usageType,
+				UsesBaseCPUPrice: true,
+			}, err
 		}
 		}
 		terms, termsOk := aws.Pricing[key]
 		terms, termsOk := aws.Pricing[key]
 		if !termsOk {
 		if !termsOk {
-			return nil, fmt.Errorf("Unable to find any Pricing data for \"%s\"", key)
+			return &Node{
+				Cost:             aws.BaseCPUPrice,
+				BaseCPUPrice:     aws.BaseCPUPrice,
+				BaseRAMPrice:     aws.BaseRAMPrice,
+				BaseGPUPrice:     aws.BaseGPUPrice,
+				UsageType:        usageType,
+				UsesBaseCPUPrice: true,
+			}, fmt.Errorf("Unable to find any Pricing data for \"%s\"", key)
 		}
 		}
 		return aws.createNode(terms, usageType, k)
 		return aws.createNode(terms, usageType, k)
 	} else { // Fall back to base pricing if we can't find the key.
 	} else { // Fall back to base pricing if we can't find the key.

+ 0 - 5
costmodel/cluster.go

@@ -2,7 +2,6 @@ package costmodel
 
 
 import (
 import (
 	"fmt"
 	"fmt"
-	"log"
 	"time"
 	"time"
 
 
 	costAnalyzerCloud "github.com/kubecost/cost-model/cloud"
 	costAnalyzerCloud "github.com/kubecost/cost-model/cloud"
@@ -63,7 +62,6 @@ func resultToTotals(qr interface{}) ([][]string, error) {
 			return nil, fmt.Errorf("Improperly formatted results from prometheus, value is not a field in the vector")
 			return nil, fmt.Errorf("Improperly formatted results from prometheus, value is not a field in the vector")
 		}
 		}
 		dataPoint, ok := val.([]interface{})
 		dataPoint, ok := val.([]interface{})
-		//log.Printf("%+v", dataPoint)
 		if !ok || len(dataPoint) != 2 {
 		if !ok || len(dataPoint) != 2 {
 			return nil, fmt.Errorf("Improperly formatted datapoint from Prometheus")
 			return nil, fmt.Errorf("Improperly formatted datapoint from Prometheus")
 		}
 		}
@@ -99,7 +97,6 @@ func resultToTotal(qr interface{}) ([][]string, error) {
 		return nil, fmt.Errorf("Improperly formatted results from prometheus, value is not a field in the vector")
 		return nil, fmt.Errorf("Improperly formatted results from prometheus, value is not a field in the vector")
 	}
 	}
 	dataPoint, ok := val.([]interface{})
 	dataPoint, ok := val.([]interface{})
-	//log.Printf("%+v", dataPoint)
 	if !ok || len(dataPoint) != 2 {
 	if !ok || len(dataPoint) != 2 {
 		return nil, fmt.Errorf("Improperly formatted datapoint from Prometheus")
 		return nil, fmt.Errorf("Improperly formatted datapoint from Prometheus")
 	}
 	}
@@ -127,7 +124,6 @@ func ClusterCosts(cli prometheusClient.Client, cloud costAnalyzerCloud.Provider,
 	qRAM := fmt.Sprintf(queryClusterRAM, offset, offset)
 	qRAM := fmt.Sprintf(queryClusterRAM, offset, offset)
 	qStorage := fmt.Sprintf(queryStorage, windowString, offset, windowString, offset, localStorageQuery)
 	qStorage := fmt.Sprintf(queryStorage, windowString, offset, windowString, offset, localStorageQuery)
 	qTotal := fmt.Sprintf(queryTotal, localStorageQuery)
 	qTotal := fmt.Sprintf(queryTotal, localStorageQuery)
-	log.Printf("%s", qTotal)
 
 
 	resultClusterCores, err := query(cli, qCores)
 	resultClusterCores, err := query(cli, qCores)
 	if err != nil {
 	if err != nil {
@@ -210,7 +206,6 @@ func ClusterCostsOverTime(cli prometheusClient.Client, cloud costAnalyzerCloud.P
 	qRAM := fmt.Sprintf(queryClusterRAM, offset, offset)
 	qRAM := fmt.Sprintf(queryClusterRAM, offset, offset)
 	qStorage := fmt.Sprintf(queryStorage, windowString, offset, windowString, offset, localStorageQuery)
 	qStorage := fmt.Sprintf(queryStorage, windowString, offset, windowString, offset, localStorageQuery)
 	qTotal := fmt.Sprintf(queryTotal, localStorageQuery)
 	qTotal := fmt.Sprintf(queryTotal, localStorageQuery)
-	log.Printf("%s", qTotal)
 
 
 	resultClusterCores, err := queryRange(cli, qCores, start, end, window)
 	resultClusterCores, err := queryRange(cli, qCores, start, end, window)
 	if err != nil {
 	if err != nil {

+ 1 - 0
costmodel/costmodel.go

@@ -740,6 +740,7 @@ func getNodeCost(clientset kubernetes.Interface, cloud costAnalyzerCloud.Provide
 		cnode, err := cloud.NodePricing(cloud.GetKey(nodeLabels))
 		cnode, err := cloud.NodePricing(cloud.GetKey(nodeLabels))
 		if err != nil {
 		if err != nil {
 			klog.V(1).Infof("Error getting node. Error: " + err.Error())
 			klog.V(1).Infof("Error getting node. Error: " + err.Error())
+			nodes[name] = cnode
 			continue
 			continue
 		}
 		}
 		newCnode := *cnode
 		newCnode := *cnode

+ 2 - 2
main.go

@@ -317,7 +317,7 @@ func (p *Accesses) ContainerUptimes(w http.ResponseWriter, _ *http.Request, _ ht
 func (a *Accesses) recordPrices() {
 func (a *Accesses) recordPrices() {
 	go func() {
 	go func() {
 		for {
 		for {
-			klog.V(3).Info("Recording prices...")
+			klog.V(4).Info("Recording prices...")
 			data, err := costModel.ComputeCostData(a.PrometheusClient, a.KubeClientSet, a.Cloud, "2m", "", "")
 			data, err := costModel.ComputeCostData(a.PrometheusClient, a.KubeClientSet, a.Cloud, "2m", "", "")
 			if err != nil {
 			if err != nil {
 				klog.V(1).Info("Error in price recording: " + err.Error())
 				klog.V(1).Info("Error in price recording: " + err.Error())
@@ -328,7 +328,7 @@ func (a *Accesses) recordPrices() {
 				nodeName := costs.NodeName
 				nodeName := costs.NodeName
 				node := costs.NodeData
 				node := costs.NodeData
 				if node == nil {
 				if node == nil {
-					klog.V(3).Infof("Skipping Node \"%s\" due to missing Node Data costs", nodeName)
+					klog.V(4).Infof("Skipping Node \"%s\" due to missing Node Data costs", nodeName)
 					continue
 					continue
 				}
 				}
 				cpuCost, _ := strconv.ParseFloat(node.VCPUCost, 64)
 				cpuCost, _ := strconv.ParseFloat(node.VCPUCost, 64)