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

Commit ac86eed

Browse files
feat: Allow labels and deployment types as placeholders for SLIs (#265)
Signed-off-by: Christian Kreuzberger <[email protected]>
1 parent 94e57f3 commit ac86eed

File tree

3 files changed

+32
-19
lines changed

3 files changed

+32
-19
lines changed

eventhandling/configureEvent.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ func (eh ConfigureMonitoringEventHandler) createPrometheusAlertsIfSLOsAndRemedia
268268
Service: eventData.Service,
269269
Stage: stage.Name,
270270
},
271+
"primary", // only create alerts for primary deployments
272+
nil,
271273
nil,
272274
)
273275

eventhandling/getSliEvent.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ func retrieveMetrics(event cloudevents.Event, eventData *keptnv2.GetSLITriggered
9898
prometheusHandler := utils.NewPrometheusHandler(
9999
prometheusAPIURL,
100100
&eventData.EventData,
101+
eventData.Deployment, // "canary", "primary" or "" (or "direct" or "user_managed")
102+
eventData.Labels,
101103
eventData.GetSLI.CustomFilters,
102104
)
103105

utils/prometheus.go

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,17 @@ type prometheusResponse struct {
4444

4545
// Handler interacts with a prometheus API endpoint
4646
type Handler struct {
47-
ApiURL string
48-
Username string
49-
Password string
50-
Project string
51-
Stage string
52-
Service string
53-
HTTPClient *http.Client
54-
CustomFilters []*keptnv2.SLIFilter
55-
CustomQueries map[string]string
47+
ApiURL string
48+
Username string
49+
Password string
50+
Project string
51+
Stage string
52+
Service string
53+
DeploymentType string
54+
Labels map[string]string
55+
HTTPClient *http.Client
56+
CustomFilters []*keptnv2.SLIFilter
57+
CustomQueries map[string]string
5658
}
5759

5860
const alertManagerYml = `global:
@@ -162,14 +164,16 @@ func (p *PrometheusHelper) UpdateAMConfigMap(name string, filename string, names
162164
}
163165

164166
// NewPrometheusHandler returns a new prometheus handler that interacts with the Prometheus REST API
165-
func NewPrometheusHandler(apiURL string, eventData *keptnv2.EventData, customFilters []*keptnv2.SLIFilter) *Handler {
167+
func NewPrometheusHandler(apiURL string, eventData *keptnv2.EventData, deploymentType string, labels map[string]string, customFilters []*keptnv2.SLIFilter) *Handler {
166168
ph := &Handler{
167-
ApiURL: apiURL,
168-
Project: eventData.Project,
169-
Stage: eventData.Stage,
170-
Service: eventData.Service,
171-
HTTPClient: &http.Client{},
172-
CustomFilters: customFilters,
169+
ApiURL: apiURL,
170+
Project: eventData.Project,
171+
Stage: eventData.Stage,
172+
Service: eventData.Service,
173+
DeploymentType: deploymentType,
174+
Labels: labels,
175+
HTTPClient: &http.Client{},
176+
CustomFilters: customFilters,
173177
}
174178

175179
return ph
@@ -265,9 +269,14 @@ func (ph *Handler) replaceQueryParameters(query string, start time.Time, end tim
265269
query = strings.Replace(query, "$PROJECT", ph.Project, -1)
266270
query = strings.Replace(query, "$STAGE", ph.Stage, -1)
267271
query = strings.Replace(query, "$SERVICE", ph.Service, -1)
268-
query = strings.Replace(query, "$project", ph.Project, -1)
269-
query = strings.Replace(query, "$stage", ph.Stage, -1)
270-
query = strings.Replace(query, "$service", ph.Service, -1)
272+
query = strings.Replace(query, "$DEPLOYMENT", ph.DeploymentType, -1)
273+
274+
// replace labels
275+
for key, value := range ph.Labels {
276+
query = strings.Replace(query, "$LABEL."+key, value, -1)
277+
}
278+
279+
// replace duration
271280
durationString := strconv.FormatInt(getDurationInSeconds(start, end), 10) + "s"
272281

273282
query = strings.Replace(query, "$DURATION_SECONDS", durationString, -1)

0 commit comments

Comments
 (0)