Skip to content

Commit 0c22ce8

Browse files
authored
feat: define interface for event recorder (#1985)
Signed-off-by: bakito <github@bakito.ch>
1 parent 8d89d68 commit 0c22ce8

3 files changed

Lines changed: 92 additions & 36 deletions

File tree

cmd/controller/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ func main() {
694694

695695
if err = webhook.Register(
696696
manager,
697-
*evt.NewEventRecorder(
697+
evt.NewEventRecorder(
698698
manager.GetClient(),
699699
ctrl.Log.WithName("capsule.ctrl").WithName("events"),
700700
manager.GetEventRecorder("tenant-controller"),

pkg/runtime/events/event_types.go

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,26 @@ import (
1414
"github.com/projectcapsule/capsule/pkg/api/meta"
1515
)
1616

17-
type LabeledEvent struct {
18-
recorder *EventRecorder
17+
type LabeledEvent interface {
18+
Emit(ctx context.Context)
19+
WithRelated(obj runtime.Object) LabeledEvent
20+
WithLabels(labels map[string]string) LabeledEvent
21+
WithAnnotations(annotations map[string]string) LabeledEvent
22+
WithTenantLabel(tnt *capsulev1beta2.Tenant) LabeledEvent
23+
WithRequestAnnotations(req admission.Request) LabeledEvent
24+
25+
Reason() string
26+
Action() string
27+
Regarding() runtime.Object
28+
Labels() map[string]string
29+
Annotations() map[string]string
30+
Note() string
31+
EventType() string
32+
Related() runtime.Object
33+
}
34+
35+
type labeledEvent struct {
36+
emitter eventEmitter
1937

2038
regarding runtime.Object
2139
related runtime.Object
@@ -29,15 +47,47 @@ type LabeledEvent struct {
2947
annotations map[string]string
3048
}
3149

32-
func (r *EventRecorder) LabeledEvent(
50+
func (e *labeledEvent) Reason() string {
51+
return e.reason
52+
}
53+
54+
func (e *labeledEvent) Action() string {
55+
return e.action
56+
}
57+
58+
func (e *labeledEvent) Regarding() runtime.Object {
59+
return e.regarding
60+
}
61+
62+
func (e *labeledEvent) Labels() map[string]string {
63+
return maps.Clone(e.labels)
64+
}
65+
66+
func (e *labeledEvent) Annotations() map[string]string {
67+
return maps.Clone(e.annotations)
68+
}
69+
70+
func (e *labeledEvent) Note() string {
71+
return e.note
72+
}
73+
74+
func (e *labeledEvent) EventType() string {
75+
return e.eventType
76+
}
77+
78+
func (e *labeledEvent) Related() runtime.Object {
79+
return e.related
80+
}
81+
82+
func (r *eventRecorder) LabeledEvent(
3383
regarding runtime.Object,
3484
eventType string,
3585
reason string,
3686
action string,
3787
note string,
38-
) *LabeledEvent {
39-
return &LabeledEvent{
40-
recorder: r,
88+
) LabeledEvent {
89+
return &labeledEvent{
90+
emitter: r,
4191
regarding: regarding,
4292
eventType: eventType,
4393
reason: reason,
@@ -48,33 +98,33 @@ func (r *EventRecorder) LabeledEvent(
4898
}
4999
}
50100

51-
func (e *LabeledEvent) Emit(ctx context.Context) {
52-
if e == nil || e.recorder == nil {
101+
func (e *labeledEvent) Emit(ctx context.Context) {
102+
if e == nil || e.emitter == nil {
53103
return
54104
}
55105

56-
e.recorder.emitLabeledEvent(ctx, e)
106+
e.emitter.Emit(ctx, e)
57107
}
58108

59-
func (e *LabeledEvent) WithRelated(obj runtime.Object) *LabeledEvent {
109+
func (e *labeledEvent) WithRelated(obj runtime.Object) LabeledEvent {
60110
e.related = obj
61111

62112
return e
63113
}
64114

65-
func (e *LabeledEvent) WithLabels(labels map[string]string) *LabeledEvent {
115+
func (e *labeledEvent) WithLabels(labels map[string]string) LabeledEvent {
66116
maps.Copy(e.labels, labels)
67117

68118
return e
69119
}
70120

71-
func (e *LabeledEvent) WithAnnotations(annotations map[string]string) *LabeledEvent {
121+
func (e *labeledEvent) WithAnnotations(annotations map[string]string) LabeledEvent {
72122
maps.Copy(e.annotations, annotations)
73123

74124
return e
75125
}
76126

77-
func (e *LabeledEvent) WithTenantLabel(tnt *capsulev1beta2.Tenant) *LabeledEvent {
127+
func (e *labeledEvent) WithTenantLabel(tnt *capsulev1beta2.Tenant) LabeledEvent {
78128
if tnt == nil {
79129
return e
80130
}
@@ -84,7 +134,7 @@ func (e *LabeledEvent) WithTenantLabel(tnt *capsulev1beta2.Tenant) *LabeledEvent
84134
return e
85135
}
86136

87-
func (e *LabeledEvent) WithRequestAnnotations(req admission.Request) *LabeledEvent {
137+
func (e *labeledEvent) WithRequestAnnotations(req admission.Request) LabeledEvent {
88138
if req.UID != "" {
89139
e.annotations[meta.AuditRequestUID] = string(req.UID)
90140
}

pkg/runtime/events/recorder.go

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,16 @@ const (
2424
ReportingInstance = "capsule-admission"
2525
)
2626

27-
type EventRecorder struct {
27+
type EventRecorder interface {
28+
k8sevents.EventRecorder
29+
LabeledEvent(regarding runtime.Object, eventType string, reason string, action string, note string) LabeledEvent
30+
}
31+
32+
type eventEmitter interface {
33+
Emit(ctx context.Context, e LabeledEvent)
34+
}
35+
36+
type eventRecorder struct {
2837
k8sevents.EventRecorder
2938

3039
client client.Client
@@ -37,19 +46,16 @@ func NewEventRecorder(
3746
log logr.Logger,
3847
recorder k8sevents.EventRecorder,
3948
configuration configuration.Configuration,
40-
) *EventRecorder {
41-
return &EventRecorder{
49+
) EventRecorder {
50+
return &eventRecorder{
4251
EventRecorder: recorder,
4352
client: c,
4453
log: log.WithName("event-recorder"),
4554
configuration: configuration,
4655
}
4756
}
4857

49-
func (r *EventRecorder) emitLabeledEvent(
50-
ctx context.Context,
51-
e *LabeledEvent,
52-
) {
58+
func (r *eventRecorder) Emit(ctx context.Context, e LabeledEvent) {
5359
if r == nil {
5460
return
5561
}
@@ -66,19 +72,19 @@ func (r *EventRecorder) emitLabeledEvent(
6672
return
6773
}
6874

69-
if e.reason == "" {
75+
if e.Reason() == "" {
7076
r.log.Error(nil, "cannot emit labeled event: reason is empty")
7177

7278
return
7379
}
7480

75-
if e.action == "" {
81+
if e.Action() == "" {
7682
r.log.Error(nil, "cannot emit labeled event: action is empty")
7783

7884
return
7985
}
8086

81-
regardingRef, metaObj, err := objectReference(e.regarding)
87+
regardingRef, metaObj, err := objectReference(e.Regarding())
8288
if err != nil {
8389
r.log.Error(err, "cannot emit labeled event: build regarding reference")
8490

@@ -100,21 +106,21 @@ func (r *EventRecorder) emitLabeledEvent(
100106
ObjectMeta: metav1.ObjectMeta{
101107
GenerateName: metaObj.GetName(),
102108
Namespace: namespace,
103-
Labels: e.labels,
104-
Annotations: e.annotations,
109+
Labels: e.Labels(),
110+
Annotations: e.Annotations(),
105111
},
106112
EventTime: metav1.MicroTime{Time: time.Now()},
107113
ReportingController: ReportingController,
108114
ReportingInstance: ReportingInstance,
109-
Action: e.action,
110-
Reason: e.reason,
115+
Action: e.Action(),
116+
Reason: e.Reason(),
111117
Regarding: regardingRef,
112-
Note: e.note,
113-
Type: e.eventType,
118+
Note: e.Note(),
119+
Type: e.EventType(),
114120
}
115121

116-
if e.related != nil {
117-
relatedRef, _, err := objectReference(e.related)
122+
if e.Related() != nil {
123+
relatedRef, _, err := objectReference(e.Related())
118124
if err != nil {
119125
r.log.Error(err, "cannot emit labeled event: build related reference")
120126

@@ -128,9 +134,9 @@ func (r *EventRecorder) emitLabeledEvent(
128134
r.log.Error(
129135
err,
130136
"cannot emit labeled event",
131-
"reason", e.reason,
132-
"action", e.action,
133-
"type", e.eventType,
137+
"reason", e.Reason(),
138+
"action", e.Action(),
139+
"type", e.EventType(),
134140
"regarding", regardingRef.Name,
135141
"namespace", namespace,
136142
)

0 commit comments

Comments
 (0)