Skip to content
This repository was archived by the owner on Jan 19, 2024. It is now read-only.

Commit af1db26

Browse files
fix: Deployment Type in remediation.triggered incompatible with Keptn cloud events (#366)
Signed-off-by: Christian Kreuzberger <[email protected]> Signed-off-by: Christian Kreuzberger <[email protected]>
1 parent dbb3576 commit af1db26

File tree

5 files changed

+55
-6
lines changed

5 files changed

+55
-6
lines changed

eventhandling/alertEvent.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ type remediationTriggeredEventData struct {
6363
// Problem contains details about the problem
6464
Problem keptncommons.ProblemEventData `json:"problem"`
6565
// Deployment contains the current deployment, that is inferred from the alert event
66-
Deployment string `json:"deployment"`
66+
67+
Deployment keptnv2.DeploymentFinishedData `json:"deployment"`
6768
}
6869

6970
// ProcessAndForwardAlertEvent reads the payload from the request and sends a valid Cloud event to the keptn event broker
@@ -109,8 +110,12 @@ func ProcessAndForwardAlertEvent(rw http.ResponseWriter, requestBody []byte, log
109110
"Problem URL": event.Alerts[0].GeneratorURL,
110111
},
111112
},
112-
Problem: problemData,
113-
Deployment: event.Alerts[0].Labels.Deployment,
113+
Problem: problemData,
114+
Deployment: keptnv2.DeploymentFinishedData{
115+
DeploymentNames: []string{
116+
event.Alerts[0].Labels.Deployment,
117+
},
118+
},
114119
}
115120

116121
if event.Alerts[0].Fingerprint != "" {

eventhandling/get_sli_event_handler.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ func (eh GetSliEventHandler) Execute(k sdk.IKeptn, event sdk.KeptnEvent) (interf
6060
return nil, &sdk.Error{Err: err, StatusType: keptnv2.StatusErrored, ResultType: keptnv2.ResultFailed, Message: "failed to get Prometheus API URL: " + err.Error()}
6161
}
6262

63+
// determine deployment type based on what lighthouse-service is providing
6364
deployment := eventData.Deployment // "canary", "primary" or "" (or "direct" or "user_managed")
65+
// fallback: get deployment type from labels
6466
if deploymentLabel, ok := eventData.Labels["deployment"]; deployment == "" && !ok {
6567
log.Println("Warning: no deployment type specified in event, defaulting to \"primary\"")
6668
deployment = "primary"

prometheus_alert.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@
1010
"project": "sockshop",
1111
"service": "carts",
1212
"severity": "webhook",
13-
"stage": "production"
13+
"stage": "production",
14+
"deployment": "primary"
1415
},
1516
"annotations": {
1617
"descriptions": "Pod name ",
1718
"summary": "response_time_p90"
1819
},
19-
"startsAt": "2021-11-26T10:57:14.057345112Z",
20+
"startsAt": "2022-11-26T10:57:14.057345112Z",
2021
"endsAt": "0001-01-01T00:00:00Z",
2122
"generatorURL": "http://prometheus-server-6776d8bb7d-pqkln:9090/graph?g0.expr=histogram_quantile%280.9%2C+sum+by%28le%29+%28rate%28http_response_time_milliseconds_bucket%7Bhandler%3D%22ItemsController.addToCart%22%2Cjob%3D%22carts-sockshop-production-primary%22%7D%5B3m%5D%29%29%29+%3E+1000\\u0026g0.tab=1",
22-
"fingerprint": "8dd2c31a47cf2e78"
23+
"fingerprint": "add2c31a47cf2e78"
2324
}
2425
],
2526
"groupLabels": {},

test/e2e/podtatohead_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ func TestPodtatoheadEvaluation(t *testing.T) {
273273
// Check if the following event are in the project:
274274
// - remediation.triggered (making sure prometheus-service actually sends a message to Keptn)
275275
// - get-action.finished (The message format is compatible with remediation-service)
276+
// - evaluation.triggered (making sure Keptn emits an evaluation.triggered)
277+
// - get-sli.finished (making sure prometheus-service responds with data)
276278
requireWaitForFilteredEvent(t,
277279
testEnv.API,
278280
1*time.Minute,
@@ -307,5 +309,42 @@ func TestPodtatoheadEvaluation(t *testing.T) {
307309
},
308310
"remediation-service",
309311
)
312+
313+
// wait roughly 60 seconds for evaluation.triggered
314+
requireWaitForFilteredEvent(t,
315+
testEnv.API,
316+
2*time.Minute,
317+
1*time.Second,
318+
&api.EventFilter{
319+
Project: testEnv.EventData.Project,
320+
Stage: testEnv.EventData.Stage,
321+
Service: testEnv.EventData.Service,
322+
EventType: "sh.keptn.event.evaluation.triggered",
323+
},
324+
func(event *models.KeptnContextExtendedCE) bool {
325+
return true
326+
},
327+
"shipyard-controller",
328+
)
329+
330+
// wait for prometheus-service returning a get-sli.finished
331+
requireWaitForFilteredEvent(t,
332+
testEnv.API,
333+
1*time.Minute,
334+
1*time.Second,
335+
&api.EventFilter{
336+
Project: testEnv.EventData.Project,
337+
Stage: testEnv.EventData.Stage,
338+
Service: testEnv.EventData.Service,
339+
EventType: "sh.keptn.event.get-sli.finished",
340+
},
341+
func(event *models.KeptnContextExtendedCE) bool {
342+
responseEventData, err := parseKeptnEventData(event)
343+
require.NoError(t, err)
344+
345+
return responseEventData.Result == "pass" && responseEventData.Status == "succeeded"
346+
},
347+
"prometheus-service",
348+
)
310349
})
311350
}

test/shipyard/podtatohead.deployment.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ spec:
2222
tasks:
2323
- name: "get-action"
2424
- name: "action"
25+
- name: "evaluation"
26+
triggeredAfter: "1m"

0 commit comments

Comments
 (0)