Skip to content

Commit 1be08b1

Browse files
committed
ctr/tasks: fix unmarshal the task metrics for cgroups v1
Signed-off-by: Iceber Gu <[email protected]>
1 parent e735405 commit 1be08b1

1 file changed

Lines changed: 20 additions & 24 deletions

File tree

cmd/ctr/commands/tasks/metrics.go

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -68,44 +68,40 @@ var metricsCommand = cli.Command{
6868
if err != nil {
6969
return err
7070
}
71-
anydata, err := typeurl.UnmarshalAny(metric.Data)
72-
if err != nil {
73-
return err
74-
}
75-
var (
76-
data *v1.Metrics
77-
data2 *v2.Metrics
78-
windowsStats *wstats.Statistics
79-
)
80-
switch v := anydata.(type) {
81-
case *v1.Metrics:
82-
data = v
83-
case *v2.Metrics:
84-
data2 = v
85-
case *wstats.Statistics:
86-
windowsStats = v
71+
72+
var data interface{}
73+
switch {
74+
case typeurl.Is(metric.Data, (*v1.Metrics)(nil)):
75+
data = &v1.Metrics{}
76+
case typeurl.Is(metric.Data, (*v2.Metrics)(nil)):
77+
data = &v2.Metrics{}
78+
case typeurl.Is(metric.Data, (*wstats.Statistics)(nil)):
79+
data = &wstats.Statistics{}
8780
default:
8881
return errors.New("cannot convert metric data to cgroups.Metrics or windows.Statistics")
8982
}
83+
if err := typeurl.UnmarshalTo(metric.Data, data); err != nil {
84+
return err
85+
}
9086

9187
switch context.String(formatFlag) {
9288
case formatTable:
9389
w := tabwriter.NewWriter(os.Stdout, 1, 8, 4, ' ', 0)
9490
fmt.Fprintf(w, "ID\tTIMESTAMP\t\n")
9591
fmt.Fprintf(w, "%s\t%s\t\n\n", metric.ID, metric.Timestamp)
96-
if data != nil {
97-
printCgroupMetricsTable(w, data)
98-
} else if data2 != nil {
99-
printCgroup2MetricsTable(w, data2)
100-
} else {
101-
err := printWindowsStats(w, windowsStats)
102-
if err != nil {
92+
switch v := data.(type) {
93+
case *v1.Metrics:
94+
printCgroupMetricsTable(w, v)
95+
case *v2.Metrics:
96+
printCgroup2MetricsTable(w, v)
97+
case *wstats.Statistics:
98+
if err := printWindowsStats(w, v); err != nil {
10399
return fmt.Errorf("cannot convert metrics data from windows.Statistics: %w", err)
104100
}
105101
}
106102
return w.Flush()
107103
case formatJSON:
108-
marshaledJSON, err := json.MarshalIndent(anydata, "", " ")
104+
marshaledJSON, err := json.MarshalIndent(data, "", " ")
109105
if err != nil {
110106
return err
111107
}

0 commit comments

Comments
 (0)