Skip to content

Commit 1e9a7b9

Browse files
Fix: handle job failure event msg block builder (#582)
* fix: handle multiple job failure error types * fix: handle lint issues for workerErrChan in slack_test
1 parent 7808743 commit 1e9a7b9

File tree

4 files changed

+16
-15
lines changed

4 files changed

+16
-15
lines changed

ext/notify/slack/slack.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func (s *Notifier) queueNotification(receiverIDs []string, oauthSecret string, a
141141
}
142142

143143
// accumulate messages
144-
func buildMessageBlocks(events []event) []api.Block {
144+
func buildMessageBlocks(events []event, workerErrChan chan error) []api.Block {
145145
var blocks []api.Block
146146

147147
// core details related to event
@@ -150,8 +150,7 @@ func buildMessageBlocks(events []event) []api.Block {
150150
fieldSlice = append(fieldSlice, api.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Job:*\n%s", evt.jobName), false, false))
151151
fieldSlice = append(fieldSlice, api.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Owner:*\n%s", evt.owner), false, false))
152152

153-
switch evt.meta.Type {
154-
case models.SLAMissEvent:
153+
if evt.meta.Type.IsOfType(models.SLAMissEvent) {
155154
heading := api.NewTextBlockObject("plain_text",
156155
fmt.Sprintf("[Job] SLA Breached | %s/%s", evt.projectName, evt.namespaceName), true, false)
157156
blocks = append(blocks, api.NewHeaderBlock(heading))
@@ -179,7 +178,7 @@ func buildMessageBlocks(events []event) []api.Block {
179178
}
180179
}
181180
}
182-
case models.JobFailureEvent:
181+
} else if evt.meta.Type.IsOfType(models.JobFailureEvent) {
183182
heading := api.NewTextBlockObject("plain_text",
184183
fmt.Sprintf("[Job] Failure | %s/%s", evt.projectName, evt.namespaceName), true, false)
185184
blocks = append(blocks, api.NewHeaderBlock(heading))
@@ -193,8 +192,8 @@ func buildMessageBlocks(events []event) []api.Block {
193192
if taskID, ok := evt.meta.Value["task_id"]; ok && taskID.GetStringValue() != "" {
194193
fieldSlice = append(fieldSlice, api.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Task ID:*\n%s", taskID.GetStringValue()), false, false))
195194
}
196-
default:
197-
// unknown event
195+
} else {
196+
workerErrChan <- fmt.Errorf("worker_buildMessageBlocks: unknown event type: %v", evt.meta.Type)
198197
continue
199198
}
200199

@@ -249,7 +248,7 @@ func (s *Notifier) Worker(ctx context.Context) {
249248
continue
250249
}
251250
var messageOptions []api.MsgOption
252-
messageOptions = append(messageOptions, api.MsgOptionBlocks(buildMessageBlocks(events)...))
251+
messageOptions = append(messageOptions, api.MsgOptionBlocks(buildMessageBlocks(events, s.workerErrChan)...))
253252
messageOptions = append(messageOptions, api.MsgOptionAsUser(true))
254253

255254
client := api.New(route.authToken, api.OptionAPIURL(s.slackURL))

ext/notify/slack/slack_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,13 @@ func TestBuildMessages(t *testing.T) {
272272
},
273273
}
274274
for _, tt := range tests {
275+
workerErrChan := make(chan error)
275276
t.Run(tt.name, func(t *testing.T) {
276-
got := buildMessageBlocks(tt.args.events)
277+
got := buildMessageBlocks(tt.args.events, workerErrChan)
277278
b, err := json.MarshalIndent(got, "", " ")
278279
assert.Nil(t, err)
279280
assert.Equal(t, tt.want, string(b))
280281
})
282+
assert.Equal(t, len(workerErrChan), 0)
281283
}
282284
}

job/event.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (e *eventService) Register(ctx context.Context, namespace models.NamespaceS
3434
evt models.JobEvent) error {
3535
var err error
3636
for _, notify := range jobSpec.Behavior.Notify {
37-
if notify.ShouldNotify(evt.Type) {
37+
if evt.Type.IsOfType(notify.On) {
3838
for _, channel := range notify.Channels {
3939
chanParts := strings.Split(channel, "://")
4040
scheme := chanParts[0]

models/job.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,18 +173,18 @@ type JobSpecNotifier struct {
173173
Channels []string
174174
}
175175

176-
func (n *JobSpecNotifier) ShouldNotify(eventType JobEventType) bool {
177-
var faiulreEvents = []JobEventType{JobFailureEvent, JobFailEvent, TaskFailEvent, HookFailEvent, SensorFailEvent}
176+
func (incomingEvent JobEventType) IsOfType(targetEvent JobEventType) bool {
177+
var failureEvents = []JobEventType{JobFailureEvent, JobFailEvent, TaskFailEvent, HookFailEvent, SensorFailEvent}
178178

179-
switch n.On {
179+
switch targetEvent {
180180
case JobFailureEvent:
181-
for _, event := range faiulreEvents {
182-
if eventType == event {
181+
for _, event := range failureEvents {
182+
if incomingEvent == event {
183183
return true
184184
}
185185
}
186186
case SLAMissEvent:
187-
if eventType == SLAMissEvent {
187+
if incomingEvent == SLAMissEvent {
188188
return true
189189
}
190190
}

0 commit comments

Comments
 (0)