Skip to content

Commit fea8219

Browse files
committed
feat: add Status and ID as event attributes
Signed-off-by: CodeChanning <[email protected]>
1 parent 0dfa3bb commit fea8219

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

pkg/cmd/system/events.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"encoding/json"
2323
"errors"
2424
"fmt"
25+
"strings"
2526
"text/template"
2627
"time"
2728

@@ -37,11 +38,28 @@ import (
3738
// EventOut contains information about an event.
3839
type EventOut struct {
3940
Timestamp time.Time
41+
ID string
4042
Namespace string
4143
Topic string
44+
Status Status
4245
Event string
4346
}
4447

48+
type Status string
49+
50+
const (
51+
START Status = "START"
52+
UNKNOWN Status = "UNKNOWN"
53+
)
54+
55+
func TopicToStatus(topic string) Status {
56+
if strings.Contains(strings.ToUpper(topic), string(START)) {
57+
return START
58+
}
59+
60+
return UNKNOWN
61+
}
62+
4563
// Events is from https://github.com/containerd/containerd/blob/v1.4.3/cmd/ctr/commands/events/events.go
4664
func Events(ctx context.Context, client *containerd.Client, options types.SystemEventsOptions) error {
4765
eventsClient := client.EventService()
@@ -68,6 +86,7 @@ func Events(ctx context.Context, client *containerd.Client, options types.System
6886
}
6987
if e != nil {
7088
var out []byte
89+
var id string
7190
if e.Event != nil {
7291
v, err := typeurl.UnmarshalAny(e.Event)
7392
if err != nil {
@@ -81,7 +100,18 @@ func Events(ctx context.Context, client *containerd.Client, options types.System
81100
}
82101
}
83102
if tmpl != nil {
84-
out := EventOut{e.Timestamp, e.Namespace, e.Topic, string(out)}
103+
var data map[string]interface{}
104+
err := json.Unmarshal(out, &data)
105+
if err != nil {
106+
log.G(ctx).WithError(err).Warn("cannot marshal Any into JSON")
107+
} else {
108+
_, ok := data["container_id"]
109+
if ok {
110+
id = data["container_id"].(string)
111+
}
112+
}
113+
114+
out := EventOut{e.Timestamp, id, e.Namespace, e.Topic, TopicToStatus(e.Topic), string(out)}
85115
var b bytes.Buffer
86116
if err := tmpl.Execute(&b, out); err != nil {
87117
return err

0 commit comments

Comments
 (0)