func()

in pkg/ec2pricing/odpricing.go [282:308]


func (c *OnDemandPricing) parseOndemandUnitPrice(priceList string) (string, float64, error) {
	var productPriceList PricingList
	err := json.Unmarshal([]byte(priceList), &productPriceList)
	if err != nil {
		return "", float64(-1.0), fmt.Errorf("unable to parse pricing doc: %w", err)
	}
	attributes := productPriceList.Product.ProductAttributes
	instanceTypeName := attributes["instanceType"]

	for _, priceDimensions := range productPriceList.Terms.OnDemand {
		dim := priceDimensions.PriceDimensions
		for _, dimension := range dim {
			pricePerUnit := dimension.PricePerUnit
			pricePerUnitInUSDStr, ok := pricePerUnit["USD"]
			if !ok {
				return instanceTypeName, float64(-1.0), fmt.Errorf("unable to find on-demand price per unit in USD")
			}
			var err error
			pricePerUnitInUSD, err := strconv.ParseFloat(pricePerUnitInUSDStr, 64)
			if err != nil {
				return instanceTypeName, float64(-1.0), fmt.Errorf("could not convert price per unit in USD to a float64")
			}
			return instanceTypeName, pricePerUnitInUSD, nil
		}
	}
	return instanceTypeName, float64(-1.0), fmt.Errorf("unable to parse pricing doc")
}