ctr/tasks: fix unmarshal the task metrics for cgroups v1

Signed-off-by: Iceber Gu <wei.cai-nat@daocloud.io>
This commit is contained in:
Iceber Gu 2023-03-23 13:38:32 +08:00
parent e735405c15
commit 1be08b10f7

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