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")
}