in pkg/selector/outputs/outputs.go [192:279]
func TableOutputWide(instanceTypeInfoSlice []instancetypes.Details) []string {
if instanceTypeInfoSlice == nil || len(instanceTypeInfoSlice) == 0 {
return nil
}
w := new(tabwriter.Writer)
buf := new(bytes.Buffer)
none := "none"
w.Init(buf, 8, 8, 2, ' ', 0)
defer w.Flush()
onDemandPricePerHourHeader := "On-Demand Price/Hr"
spotPricePerHourHeader := "Spot Price/Hr (30d avg)"
headers := []interface{}{
"Instance Type",
"VCPUs",
"Mem (GiB)",
"Hypervisor",
"Current Gen",
"Hibernation Support",
"CPU Arch",
"Network Performance",
"ENIs",
"GPUs",
"GPU Mem (GiB)",
"GPU Info",
onDemandPricePerHourHeader,
spotPricePerHourHeader,
}
separators := make([]interface{}, 0)
headerFormat := ""
for _, header := range headers {
headerFormat = headerFormat + "%s\t"
separators = append(separators, strings.Repeat("-", len(header.(string))))
}
fmt.Fprintf(w, headerFormat, headers...)
fmt.Fprintf(w, "\n"+headerFormat, separators...)
for _, instanceTypeInfo := range instanceTypeInfoSlice {
hypervisor := instanceTypeInfo.Hypervisor
if hypervisor == nil {
hypervisor = &none
}
cpuArchitectures := []string{}
for _, cpuArch := range instanceTypeInfo.ProcessorInfo.SupportedArchitectures {
cpuArchitectures = append(cpuArchitectures, *cpuArch)
}
gpus := int64(0)
gpuMemory := int64(0)
gpuType := []string{}
if instanceTypeInfo.GpuInfo != nil {
gpuMemory = *instanceTypeInfo.GpuInfo.TotalGpuMemoryInMiB
for _, gpuInfo := range instanceTypeInfo.GpuInfo.Gpus {
gpus = gpus + *gpuInfo.Count
gpuType = append(gpuType, *gpuInfo.Manufacturer+" "+*gpuInfo.Name)
}
}
onDemandPricePerHourStr := "-Not Fetched-"
spotPricePerHourStr := "-Not Fetched-"
if instanceTypeInfo.OndemandPricePerHour != nil {
onDemandPricePerHourStr = fmt.Sprintf("$%s", formatFloat(*instanceTypeInfo.OndemandPricePerHour))
}
if instanceTypeInfo.SpotPrice != nil {
spotPricePerHourStr = fmt.Sprintf("$%s", formatFloat(*instanceTypeInfo.SpotPrice))
}
fmt.Fprintf(w, "\n%s\t%d\t%s\t%s\t%t\t%t\t%s\t%s\t%d\t%d\t%s\t%s\t%s\t%s\t",
*instanceTypeInfo.InstanceType,
*instanceTypeInfo.VCpuInfo.DefaultVCpus,
formatFloat(float64(*instanceTypeInfo.MemoryInfo.SizeInMiB)/1024.0),
*hypervisor,
*instanceTypeInfo.CurrentGeneration,
*instanceTypeInfo.HibernationSupported,
strings.Join(cpuArchitectures, ", "),
*instanceTypeInfo.NetworkInfo.NetworkPerformance,
*instanceTypeInfo.NetworkInfo.MaximumNetworkInterfaces,
gpus,
formatFloat(float64(gpuMemory)/1024.0),
strings.Join(gpuType, ", "),
onDemandPricePerHourStr,
spotPricePerHourStr,
)
}
w.Flush()
return []string{buf.String()}
}