Merge pull request #8302 from Iceber/fix_ctr_task_metrics

ctr/tasks: fix unmarshal the task metrics for cgroup v1
This commit is contained in:
Fu Wei 2023-03-24 20:26:05 +08:00 committed by GitHub
commit f7f2be7321
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -68,44 +68,40 @@ var metricsCommand = cli.Command{
if err != nil { if err != nil {
return err return err
} }
anydata, err := typeurl.UnmarshalAny(metric.Data)
if err != nil { var data interface{}
return err switch {
} case typeurl.Is(metric.Data, (*v1.Metrics)(nil)):
var ( data = &v1.Metrics{}
data *v1.Metrics case typeurl.Is(metric.Data, (*v2.Metrics)(nil)):
data2 *v2.Metrics data = &v2.Metrics{}
windowsStats *wstats.Statistics case typeurl.Is(metric.Data, (*wstats.Statistics)(nil)):
) data = &wstats.Statistics{}
switch v := anydata.(type) {
case *v1.Metrics:
data = v
case *v2.Metrics:
data2 = v
case *wstats.Statistics:
windowsStats = v
default: default:
return errors.New("cannot convert metric data to cgroups.Metrics or windows.Statistics") return errors.New("cannot convert metric data to cgroups.Metrics or windows.Statistics")
} }
if err := typeurl.UnmarshalTo(metric.Data, data); err != nil {
return err
}
switch context.String(formatFlag) { switch context.String(formatFlag) {
case formatTable: case formatTable:
w := tabwriter.NewWriter(os.Stdout, 1, 8, 4, ' ', 0) w := tabwriter.NewWriter(os.Stdout, 1, 8, 4, ' ', 0)
fmt.Fprintf(w, "ID\tTIMESTAMP\t\n") fmt.Fprintf(w, "ID\tTIMESTAMP\t\n")
fmt.Fprintf(w, "%s\t%s\t\n\n", metric.ID, metric.Timestamp) fmt.Fprintf(w, "%s\t%s\t\n\n", metric.ID, metric.Timestamp)
if data != nil { switch v := data.(type) {
printCgroupMetricsTable(w, data) case *v1.Metrics:
} else if data2 != nil { printCgroupMetricsTable(w, v)
printCgroup2MetricsTable(w, data2) case *v2.Metrics:
} else { printCgroup2MetricsTable(w, v)
err := printWindowsStats(w, windowsStats) case *wstats.Statistics:
if err != nil { if err := printWindowsStats(w, v); err != nil {
return fmt.Errorf("cannot convert metrics data from windows.Statistics: %w", err) return fmt.Errorf("cannot convert metrics data from windows.Statistics: %w", err)
} }
} }
return w.Flush() return w.Flush()
case formatJSON: case formatJSON:
marshaledJSON, err := json.MarshalIndent(anydata, "", " ") marshaledJSON, err := json.MarshalIndent(data, "", " ")
if err != nil { if err != nil {
return err return err
} }