Skip to content

Commit f8b39f9

Browse files
author
anton.voskresensky
committed
init
1 parent d529429 commit f8b39f9

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

pkg/madison/client.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ type Alert struct {
2525
type Labels struct {
2626
Trigger string `json:"trigger"`
2727
SeverityLevel string `json:"severity_level"`
28+
AlertReceiver string `json:"alertreceiver,omitempty"`
29+
Grafana string `json:"grafana,omitempty"`
2830
}
2931

3032
type Annotations struct {
@@ -51,11 +53,13 @@ func NewClient(cfg *config.Config) *Client {
5153
}
5254
}
5355

54-
func (c *Client) SendAlert(trigger, severity, summary, description string) error {
56+
func (c *Client) SendAlert(trigger, severity, summary, description, grafana string) error {
5557
payload := Alert{
5658
Labels: Labels{
5759
Trigger: trigger,
5860
SeverityLevel: severity,
61+
AlertReceiver: "alertreceiver",
62+
Grafana: grafana,
5963
},
6064
Annotations: Annotations{
6165
Summary: summary,

pkg/webhook/handler.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ func (h *Handler) HandlePrometheus(w http.ResponseWriter, r *http.Request) {
100100

101101
description := buildDescription(alert, webhook)
102102

103+
grafanaURL := alert.Annotations["dashboard"]
104+
if grafanaURL == "" {
105+
grafanaURL = alert.GeneratorURL
106+
}
107+
103108
trigger := alertName
104109

105110
alertStatus := alert.Status
@@ -125,6 +130,8 @@ func (h *Handler) HandlePrometheus(w http.ResponseWriter, r *http.Request) {
125130
"labels": map[string]string{
126131
"trigger": trigger,
127132
"severity_level": severityLevel,
133+
"alertreceiver": "alertreceiver",
134+
"grafana": grafanaURL,
128135
},
129136
"annotations": map[string]string{
130137
"summary": summary,
@@ -133,7 +140,7 @@ func (h *Handler) HandlePrometheus(w http.ResponseWriter, r *http.Request) {
133140
}
134141
madisonPayloadJSON, _ := json.Marshal(madisonPayload)
135142

136-
if err := h.madisonClient.SendAlert(trigger, severityLevel, summary, description); err != nil {
143+
if err := h.madisonClient.SendAlert(trigger, severityLevel, summary, description, grafanaURL); err != nil {
137144
h.logger.Error("failed to send alert to madison", log.Fields{
138145
"error": err.Error(),
139146
"alertName": alertName,
@@ -158,6 +165,7 @@ func buildDescription(alert Alert, webhook AlertmanagerWebhook) string {
158165
var parts []string
159166

160167
if desc := alert.Annotations["description"]; desc != "" {
168+
desc = removeEmojis(desc)
161169
parts = append(parts, desc)
162170
}
163171

@@ -176,6 +184,30 @@ func buildDescription(alert Alert, webhook AlertmanagerWebhook) string {
176184
return strings.Join(parts, "\n\n")
177185
}
178186

187+
func removeEmojis(s string) string {
188+
var result strings.Builder
189+
for _, r := range s {
190+
if !isEmoji(r) {
191+
result.WriteRune(r)
192+
}
193+
}
194+
return strings.TrimSpace(result.String())
195+
}
196+
197+
func isEmoji(r rune) bool {
198+
return (r >= 0x1F600 && r <= 0x1F64F) ||
199+
(r >= 0x1F300 && r <= 0x1F5FF) ||
200+
(r >= 0x1F680 && r <= 0x1F6FF) ||
201+
(r >= 0x1F1E0 && r <= 0x1F1FF) ||
202+
(r >= 0x2600 && r <= 0x26FF) ||
203+
(r >= 0x2700 && r <= 0x27BF) ||
204+
(r >= 0xFE00 && r <= 0xFE0F) ||
205+
(r >= 0x1F900 && r <= 0x1F9FF) ||
206+
(r >= 0x1FA00 && r <= 0x1FA6F) ||
207+
r == 0x200D ||
208+
r == 0xFE0F
209+
}
210+
179211
func mapSeverityToLevel(severity string) string {
180212
severityMap := map[string]string{
181213
"critical": "1",

0 commit comments

Comments
 (0)