func()

in calculator/calculator.go [196:261]


func (service *PricingService) GetGCEMachinePrice(instanceType string, spot bool) (float64, error) {

	instanceInfo := strings.Split(instanceType, "-")
	cpus, _ := strconv.Atoi(instanceInfo[2])
	ram := 0.0
	classType := instanceInfo[1]
	machineType := instanceInfo[0]

	switch classType {
	case "standard":
		ram = float64(cpus) * 4
	case "highcpu":
		ram = float64(cpus) * 2
	case "highmem":
		ram = float64(cpus) * 4
	case "highgpu":
		ram = float64(cpus) * 7.0833
	case "ultragpu":
		ram = float64(cpus) * 14.1666
	}

	ram = math.Ceil(ram)
	fmt.Printf("Parsing %s - %d %f %s %s", instanceType, cpus, ram, machineType, classType)

	if spot {
		switch machineType {
		case "a2":
			return service.GCEPricing.SpotA2CpuPrice*float64(cpus) + service.GCEPricing.SpotA2MemoryPrice*ram, nil
		case "a3":
			return service.GCEPricing.SpotA3CpuPrice*float64(cpus) + service.GCEPricing.SpotA3MemoryPrice*ram, nil
		case "g2":
			return service.GCEPricing.SpotG2DCpuPrice*float64(cpus) + service.GCEPricing.SpotG2DMemoryPrice*ram, nil
		case "h3":
			fmt.Printf("H3 Machine type is not available in Preemptible Spot format. Defaulting to a regular price.")
			return service.GCEPricing.H3CpuPrice*float64(cpus) + service.GCEPricing.H3MemoryPrice*ram, nil
		case "c2":
			return service.GCEPricing.SpotC2CpuPrice*float64(cpus) + service.GCEPricing.SpotC2MemoryPrice*ram, nil
		case "c2d":
			return service.GCEPricing.SpotC2DCpuPrice*float64(cpus) + service.GCEPricing.SpotC2DMemoryPrice*ram, nil
		default:
			fmt.Printf("GCE Machine type %s is not implemented for price querying. Only supported ones are A2, A3, G2, H3, C2 and C2D", instanceType)
		}
		return 0, nil
	}

	fmt.Printf("%#v", service.GCEPricing)

	switch machineType {
	case "a2":
		return service.GCEPricing.A2CpuPrice*float64(cpus) + service.GCEPricing.A2MemoryPrice*ram, nil
	case "a3":
		return service.GCEPricing.A3CpuPrice*float64(cpus) + service.GCEPricing.A3MemoryPrice*ram, nil
	case "g2":
		return service.GCEPricing.G2CpuPrice*float64(cpus) + service.GCEPricing.G2MemoryPrice*ram, nil
	case "h3":
		return service.GCEPricing.H3CpuPrice*float64(cpus) + service.GCEPricing.H3MemoryPrice*ram, nil
	case "c2":
		return service.GCEPricing.C2CpuPrice*float64(cpus) + service.GCEPricing.C2MemoryPrice*ram, nil
	case "c2d":
		return service.GCEPricing.C2DCpuPrice*float64(cpus) + service.GCEPricing.C2DMemoryPrice*ram, nil
	default:
		fmt.Printf("GCE Machine type %s is not implemented for price querying. Only supported ones are A2, A3, G2, H3, C2 and C2D", instanceType)
	}

	return 0, nil
}