mirror of https://github.com/grafana/grafana
NGAlert: Fix templating and remove unwanted default templates (#33918)
Signed-off-by: Ganesh Vernekar <ganeshvern@gmail.com>pull/34001/head
parent
6c532c3f1e
commit
8d442c9b44
@ -0,0 +1,51 @@ |
||||
package channels |
||||
|
||||
import ( |
||||
"io/ioutil" |
||||
"os" |
||||
"testing" |
||||
|
||||
"github.com/prometheus/alertmanager/template" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
const DefaultTemplateString = ` |
||||
{{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }} |
||||
|
||||
{{ define "__text_alert_list" }}{{ range . }}Labels: |
||||
{{ range .Labels.SortedPairs }} - {{ .Name }} = {{ .Value }} |
||||
{{ end }}Annotations: |
||||
{{ range .Annotations.SortedPairs }} - {{ .Name }} = {{ .Value }} |
||||
{{ end }}Source: {{ .GeneratorURL }} |
||||
{{ end }}{{ end }} |
||||
|
||||
{{ define "default.title" }}{{ template "__subject" . }}{{ end }} |
||||
|
||||
{{ define "default.message" }}{{ if gt (len .Alerts.Firing) 0 }} |
||||
**Firing** |
||||
{{ template "__text_alert_list" .Alerts.Firing }} |
||||
|
||||
{{ end }} |
||||
{{ if gt (len .Alerts.Resolved) 0 }} |
||||
**Resolved** |
||||
{{ template "__text_alert_list" .Alerts.Resolved }} |
||||
{{ end }} |
||||
{{ end }} |
||||
` |
||||
|
||||
func templateForTests(t *testing.T) *template.Template { |
||||
f, err := ioutil.TempFile("/tmp", "template") |
||||
require.NoError(t, err) |
||||
|
||||
t.Cleanup(func() { |
||||
require.NoError(t, os.RemoveAll(f.Name())) |
||||
}) |
||||
|
||||
_, err = f.WriteString(DefaultTemplateString) |
||||
require.NoError(t, err) |
||||
|
||||
tmpl, err := template.FromGlobs(f.Name()) |
||||
require.NoError(t, err) |
||||
|
||||
return tmpl |
||||
} |
@ -1,230 +0,0 @@ |
||||
{{ define "__alertmanager" }}Alertmanager{{ end }} |
||||
{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver | urlquery }}{{ end }} |
||||
|
||||
{{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }} |
||||
{{ define "__description" }}{{ end }} |
||||
|
||||
{{ define "__text_alert_list" }}{{ range . }}Labels: |
||||
{{ range .Labels.SortedPairs }} - {{ .Name }} = {{ .Value }} |
||||
{{ end }}Annotations: |
||||
{{ range .Annotations.SortedPairs }} - {{ .Name }} = {{ .Value }} |
||||
{{ end }}Source: {{ .GeneratorURL }} |
||||
{{ end }}{{ end }} |
||||
|
||||
{{ define "default.title" }}{{ template "__subject" . }}{{ end }} |
||||
{{ define "default.message" }}{{ if gt (len .Alerts.Firing) 0 }} |
||||
**Firing** |
||||
{{ template "__text_alert_list" .Alerts.Firing }} |
||||
|
||||
{{ end }} |
||||
{{ if gt (len .Alerts.Resolved) 0 }} |
||||
**Resolved** |
||||
{{ template "__text_alert_list" .Alerts.Resolved }} |
||||
{{ end }} |
||||
{{ end }} |
||||
|
||||
{{ define "slack.default.title" }}{{ template "default.title" . }}{{ end }} |
||||
{{ define "slack.default.username" }}{{ template "__alertmanager" . }}{{ end }} |
||||
{{ define "slack.default.fallback" }}{{ template "slack.default.title" . }} | {{ template "slack.default.titlelink" . }}{{ end }} |
||||
{{ define "slack.default.callbackid" }}{{ end }} |
||||
{{ define "slack.default.pretext" }}{{ end }} |
||||
{{ define "slack.default.titlelink" }}{{ template "__alertmanagerURL" . }}{{ end }} |
||||
{{ define "slack.default.iconemoji" }}{{ end }} |
||||
{{ define "slack.default.iconurl" }}{{ end }} |
||||
{{ define "slack.default.text" }}{{ end }} |
||||
{{ define "slack.default.footer" }}{{ end }} |
||||
|
||||
|
||||
{{ define "pagerduty.default.description" }}{{ template "default.title" . }}{{ end }} |
||||
{{ define "pagerduty.default.client" }}{{ template "__alertmanager" . }}{{ end }} |
||||
{{ define "pagerduty.default.clientURL" }}{{ template "__alertmanagerURL" . }}{{ end }} |
||||
{{ define "pagerduty.default.instances" }}{{ template "__text_alert_list" . }}{{ end }} |
||||
|
||||
|
||||
{{ define "opsgenie.default.message" }}{{ template "__subject" . }}{{ end }} |
||||
{{ define "opsgenie.default.description" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} |
||||
{{ if gt (len .Alerts.Firing) 0 -}} |
||||
Alerts Firing: |
||||
{{ template "__text_alert_list" .Alerts.Firing }} |
||||
{{- end }} |
||||
{{ if gt (len .Alerts.Resolved) 0 -}} |
||||
Alerts Resolved: |
||||
{{ template "__text_alert_list" .Alerts.Resolved }} |
||||
{{- end }} |
||||
{{- end }} |
||||
{{ define "opsgenie.default.source" }}{{ template "__alertmanagerURL" . }}{{ end }} |
||||
|
||||
|
||||
{{ define "wechat.default.message" }}{{ template "__subject" . }} |
||||
{{ .CommonAnnotations.SortedPairs.Values | join " " }} |
||||
{{ if gt (len .Alerts.Firing) 0 -}} |
||||
Alerts Firing: |
||||
{{ template "__text_alert_list" .Alerts.Firing }} |
||||
{{- end }} |
||||
{{ if gt (len .Alerts.Resolved) 0 -}} |
||||
Alerts Resolved: |
||||
{{ template "__text_alert_list" .Alerts.Resolved }} |
||||
{{- end }} |
||||
AlertmanagerUrl: |
||||
{{ template "__alertmanagerURL" . }} |
||||
{{- end }} |
||||
{{ define "wechat.default.to_user" }}{{ end }} |
||||
{{ define "wechat.default.to_party" }}{{ end }} |
||||
{{ define "wechat.default.to_tag" }}{{ end }} |
||||
{{ define "wechat.default.agent_id" }}{{ end }} |
||||
|
||||
|
||||
|
||||
{{ define "victorops.default.state_message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} |
||||
{{ if gt (len .Alerts.Firing) 0 -}} |
||||
Alerts Firing: |
||||
{{ template "__text_alert_list" .Alerts.Firing }} |
||||
{{- end }} |
||||
{{ if gt (len .Alerts.Resolved) 0 -}} |
||||
Alerts Resolved: |
||||
{{ template "__text_alert_list" .Alerts.Resolved }} |
||||
{{- end }} |
||||
{{- end }} |
||||
{{ define "victorops.default.entity_display_name" }}{{ template "__subject" . }}{{ end }} |
||||
{{ define "victorops.default.monitoring_tool" }}{{ template "__alertmanager" . }}{{ end }} |
||||
|
||||
{{ define "email.default.subject" }}{{ template "__subject" . }}{{ end }} |
||||
{{ define "email.default.html" }} |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||
<!-- |
||||
Style and HTML derived from https://github.com/mailgun/transactional-email-templates |
||||
|
||||
|
||||
The MIT License (MIT) |
||||
|
||||
Copyright (c) 2014 Mailgun |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
SOFTWARE. |
||||
--> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<head style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<meta name="viewport" content="width=device-width" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
<title style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">{{ template "__subject" . }}</title> |
||||
|
||||
</head> |
||||
|
||||
<body itemscope="" itemtype="http://schema.org/EmailMessage" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; height: 100%; line-height: 1.6em; width: 100% !important; background-color: #f6f6f6; margin: 0; padding: 0;" bgcolor="#f6f6f6"> |
||||
|
||||
<table style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;" bgcolor="#f6f6f6"> |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td> |
||||
<td width="600" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; display: block !important; max-width: 600px !important; clear: both !important; width: 100% !important; margin: 0 auto; padding: 0;" valign="top"> |
||||
<div style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 0;"> |
||||
<table width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; border-radius: 3px; background-color: #fff; margin: 0; border: 1px solid #e9e9e9;" bgcolor="#fff"> |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #E6522C; margin: 0; padding: 20px;" align="center" bgcolor="#E6522C" valign="top"> |
||||
{{ .Alerts | len }} alert{{ if gt (len .Alerts) 1 }}s{{ end }} for {{ range .GroupLabels.SortedPairs }} |
||||
{{ .Name }}={{ .Value }} |
||||
{{ end }} |
||||
</td> |
||||
</tr> |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 10px;" valign="top"> |
||||
<table width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> |
||||
<a href="{{ template "__alertmanagerURL" . }}" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; color: #FFF; text-decoration: none; line-height: 2em; font-weight: bold; text-align: center; cursor: pointer; display: inline-block; border-radius: 5px; text-transform: capitalize; background-color: #348eda; margin: 0; border-color: #348eda; border-style: solid; border-width: 10px 20px;">View in {{ template "__alertmanager" . }}</a> |
||||
</td> |
||||
</tr> |
||||
{{ if gt (len .Alerts.Firing) 0 }} |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> |
||||
<strong style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">[{{ .Alerts.Firing | len }}] Firing</strong> |
||||
</td> |
||||
</tr> |
||||
{{ end }} |
||||
{{ range .Alerts.Firing }} |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> |
||||
<strong style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">Labels</strong><br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
{{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }}<br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" />{{ end }} |
||||
{{ if gt (len .Annotations) 0 }}<strong style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">Annotations</strong><br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" />{{ end }} |
||||
{{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}<br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" />{{ end }} |
||||
<a href="{{ .GeneratorURL }}" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; color: #348eda; text-decoration: underline; margin: 0;">Source</a><br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
</td> |
||||
</tr> |
||||
{{ end }} |
||||
|
||||
{{ if gt (len .Alerts.Resolved) 0 }} |
||||
{{ if gt (len .Alerts.Firing) 0 }} |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> |
||||
<br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
<hr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
<br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
</td> |
||||
</tr> |
||||
{{ end }} |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> |
||||
<strong style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">[{{ .Alerts.Resolved | len }}] Resolved</strong> |
||||
</td> |
||||
</tr> |
||||
{{ end }} |
||||
{{ range .Alerts.Resolved }} |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> |
||||
<strong style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">Labels</strong><br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
{{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }}<br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" />{{ end }} |
||||
{{ if gt (len .Annotations) 0 }}<strong style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">Annotations</strong><br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" />{{ end }} |
||||
{{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}<br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" />{{ end }} |
||||
<a href="{{ .GeneratorURL }}" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; color: #348eda; text-decoration: underline; margin: 0;">Source</a><br style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;" /> |
||||
</td> |
||||
</tr> |
||||
{{ end }} |
||||
</table> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<div style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; clear: both; color: #999; margin: 0; padding: 20px;"> |
||||
<table width="100%" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<tr style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; text-align: center; color: #999; margin: 0; padding: 0 0 20px;" align="center" valign="top"><a href="{{ .ExternalURL }}" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">Sent by {{ template "__alertmanager" . }}</a></td> |
||||
</tr> |
||||
</table> |
||||
</div></div> |
||||
</td> |
||||
<td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td> |
||||
</tr> |
||||
</table> |
||||
|
||||
</body> |
||||
</html> |
||||
|
||||
{{ end }} |
||||
|
||||
{{ define "pushover.default.title" }}{{ template "__subject" . }}{{ end }} |
||||
{{ define "pushover.default.message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} |
||||
{{ if gt (len .Alerts.Firing) 0 }} |
||||
Alerts Firing: |
||||
{{ template "__text_alert_list" .Alerts.Firing }} |
||||
{{ end }} |
||||
{{ if gt (len .Alerts.Resolved) 0 }} |
||||
Alerts Resolved: |
||||
{{ template "__text_alert_list" .Alerts.Resolved }} |
||||
{{ end }} |
||||
{{ end }} |
||||
{{ define "pushover.default.url" }}{{ template "__alertmanagerURL" . }}{{ end }} |
Loading…
Reference in new issue