我是围棋新手。我有两个相同的json嵌套结构,每个结构都填充了两个api调用的输出。一个调用获取cpu和其他内存指标。我可以分别对它们进行解组,并打印出项目名称以及cpu和内存的值,尽管是在两个单独的代码块中。我遇到的问题是,我想在项目名称旁边的同一行打印cpu和内存指标。
这是我用来按Project打印CPU度量的代码。它创建了一个漂亮的CSV格式输出:
// CPU Metrics
// Loop through the data for the Month, Project, CPU requests, and CPU Usage
fmt.Println("Month, Project, CPU Request(Core hours), CPU Usage(Core hours)\n")
for _, value_cpu := range rh_values_cpu.Data {
for _, val_cpu := range value_cpu.Projects {
str := val_cpu.Project
s := strings.Contains(str, "openshift")
if s == true {
continue
}
fmt.Printf("%s, %s, ", value_cpu.Date, val_cpu.Project)
for _, v_cpu := range val_cpu.Values {
fmt.Printf("%.1f, %.1f\n", v_cpu.Request.Value, v_cpu.Usage.Value)
}
}
}
我有类似的内存度量代码,这也很好。
这是我用来循环两个json结构的代码。我怀疑我没有正确使用嵌套循环,或者需要以不同的方式解决问题。
// CPU & Memory Metrics
// Loop through the data for the Month, Project, CPU requests, CPU Usage, Memory requests, and Memory Usage
fmt.Println("Month, Project, CPU Request(Core hours), CPU Usage(Core hours) Memory Request(mBytes), Memory Usage(mBytes)\n")
for _, value_cpu := range rh_values_cpu.Data {
for _, value_mem := range rh_values_MEM.Data {
for _, val_cpu := range value_cpu.Projects {
for _, val_mem := range value_mem.Projects {
str := val_cpu.Project
s := strings.Contains(str, "openshift")
if s == true {
continue
}
fmt.Printf("%s, %s, ", value_cpu.Date, val_cpu.Project)
for _, v_cpu := range val_cpu.Values {
fmt.Printf("%.1f, %.1f ", v_cpu.Request.Value, v_cpu.Usage.Value)
for _,v_mem := range val_mem.Values {
fmt.Printf("%.1f, %.1f\n", v_mem.Request.Value, v_mem.Usage.Value)
}
}
}
}
}
}
下面是一个json结构:
type RH_Output_MEM struct {
Meta struct {
Count int `json:"count"`
Others int `json:"others"`
Currency string `json:"currency"`
Filter struct {
Resolution string `json:"resolution"`
TimeScopeValue string `json:"time_scope_value"`
TimeScopeUnits string `json:"time_scope_units"`
Limit int `json:"limit"`
Offset int `json:"offset"`
} `json:"filter"`
GroupBy struct {
Project []string `json:"project"`
} `json:"group_by"`
OrderBy struct {
} `json:"order_by"`
Exclude struct {
} `json:"exclude"`
Total struct {
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Request struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"request"`
Limit struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"limit"`
Capacity struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"capacity"`
Infrastructure struct {
Raw struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"raw"`
Markup struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"markup"`
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Distributed struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"distributed"`
Total struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"total"`
} `json:"infrastructure"`
Supplementary struct {
Raw struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"raw"`
Markup struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"markup"`
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Distributed struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"distributed"`
Total struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"total"`
} `json:"supplementary"`
Cost struct {
Raw struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"raw"`
Markup struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"markup"`
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Distributed struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"distributed"`
Total struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"total"`
} `json:"cost"`
} `json:"total"`
} `json:"meta"`
Links struct {
First string `json:"first"`
Next string `json:"next"`
Previous interface{} `json:"previous"`
Last string `json:"last"`
} `json:"links"`
Data []struct {
Date string `json:"date"`
Projects []struct {
Project string `json:"project"`
Values []struct {
Date string `json:"date"`
Project string `json:"project"`
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Request struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"request"`
Limit struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"limit"`
Capacity struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"capacity"`
Classification string `json:"classification"`
SourceUUID []string `json:"source_uuid"`
Clusters []string `json:"clusters"`
Infrastructure struct {
Raw struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"raw"`
Markup struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"markup"`
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Distributed struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"distributed"`
Total struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"total"`
} `json:"infrastructure"`
Supplementary struct {
Raw struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"raw"`
Markup struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"markup"`
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Distributed struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"distributed"`
Total struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"total"`
} `json:"supplementary"`
Cost struct {
Raw struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"raw"`
Markup struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"markup"`
Usage struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"usage"`
Distributed struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"distributed"`
Total struct {
Value float64 `json:"value"`
Units string `json:"units"`
} `json:"total"`
} `json:"cost"`
} `json:"values"`
} `json:"projects"`
} `json:"data"`
}
下面是我运行程序时得到的输出片段。正如您所看到的,Date、Project和内部循环(CPU度量)重复自身,而外部循环(内存度量)运行:
我正在寻找一个输出,其中每个项目有一行(月、项目、CPU指标、内存指标)
Month, Project, CPU Request(Core hours), CPU Usage(Core hours) Memory Request(mBytes), Memory Usage(mBytes)
2022-12, amq-demo-streams, 0.0, 34.0, 0.0, 4353.2
2022-12, amq-demo-streams, 0.0, 34.0, 1115.6, 1081.4
2022-12, amq-demo-streams, 0.0, 34.0, 0.0, 10675.9
2022-12, amq-demo-streams, 0.0, 34.0, 100.9, 284.0
2022-12, amq-demo-streams, 0.0, 34.0, 0.0, 70064.5
2022-12, amq-demo-streams, 0.0, 34.0, 773088.9, 427757.8
2022-12, amq-demo-streams, 0.0, 34.0, 9440.0, 11610.3
2022-12, amq-demo-streams, 0.0, 34.0, 9471.3, 11696.9
2022-12, amq-demo-streams, 0.0, 34.0, 0.0, 2455.2
2022-12, amq-demo-streams, 0.0, 34.0, 0.0, 3.3
2022-12, amq-demo-streams, 0.0, 34.0, 0.0, 0.0
2022-12, amq-demo-streams, 0.0, 34.0, -0.3, 0.0
2022-12, amq-demo-streams, 0.0, 34.0, 3785.0, 6610.4
2022-12, amq-demo-streams, 0.0, 34.0, 252.3, 1007.8
2022-12, amq-demo-streams, 0.0, 34.0, 757.0, 883.0
2022-12, amq-demo-streams, 0.0, 34.0, 1009.4, 1613.4
2022-12, amq-demo-streams, 0.0, 34.0, 378.5, 413.5
2022-12, amq-demo-streams, 0.0, 34.0, 908.4, 2856.8
2022-12, amq-demo-streams, 0.0, 34.0, 252.3, 248.7
2022-12, amq-demo-streams, 0.0, 34.0, 66873.8, 21035.3
2022-12, amq-demo-streams, 0.0, 34.0, 353.3, 611.9
2022-12, amq-demo-streams, 0.0, 34.0, 10203.6, 12418.3
2022-12, amq-demo-streams, 0.0, 34.0, 504.7, 398.3
2022-12, amq-demo-streams, 0.0, 34.0, 1135.5, 2248.5
2022-12, amq-demo-streams, 0.0, 34.0, 252.3, 610.6
2022-12, amq-demo-streams, 0.0, 34.0, 252.3, 370.6