Alerting: Telegram: truncate long messages (#54339)

Truncate messages longer than 4096 characters
This commit is contained in:
Ilya Galimyanov 2022-09-06 18:47:04 +03:00 committed by GitHub
parent a4566eaf32
commit b593d371ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 1 deletions

View File

@ -9,6 +9,7 @@ import (
"mime/multipart"
"os"
"github.com/prometheus/alertmanager/notify"
"github.com/prometheus/alertmanager/template"
"github.com/prometheus/alertmanager/types"
@ -158,8 +159,14 @@ func (tn *TelegramNotifier) buildTelegramMessage(ctx context.Context, as []*type
}()
tmpl, _ := TmplText(ctx, tn.tmpl, as, tn.log, &tmplErr)
// Telegram supports 4096 chars max
messageText, truncated := notify.Truncate(tmpl(tn.Message), 4096)
if truncated {
tn.log.Warn("Telegram message too long, truncate message", "original_message", tn.Message)
}
m := make(map[string]string)
m["text"] = tmpl(tn.Message)
m["text"] = messageText
m["parse_mode"] = "html"
return m, nil
}

View File

@ -3,6 +3,7 @@ package channels
import (
"context"
"net/url"
"strings"
"testing"
"github.com/grafana/grafana/pkg/components/simplejson"
@ -76,6 +77,25 @@ func TestTelegramNotifier(t *testing.T) {
"text": "__Custom Firing__\n2 Firing\n\nValue: [no value]\nLabels:\n - alertname = alert1\n - lbl1 = val1\nAnnotations:\n - ann1 = annv1\nSource: a URL\nSilence: http://localhost/alerting/silence/new?alertmanager=grafana&matcher=alertname%3Dalert1&matcher=lbl1%3Dval1\n\nValue: [no value]\nLabels:\n - alertname = alert1\n - lbl1 = val2\nAnnotations:\n - ann1 = annv2\nSilence: http://localhost/alerting/silence/new?alertmanager=grafana&matcher=alertname%3Dalert1&matcher=lbl1%3Dval2\n",
},
expMsgError: nil,
}, {
name: "Truncate long message",
settings: `{
"bottoken": "abcdefgh0123456789",
"chatid": "someid",
"message": "{{ .CommonLabels.alertname }}"
}`,
alerts: []*types.Alert{
{
Alert: model.Alert{
Labels: model.LabelSet{"alertname": model.LabelValue(strings.Repeat("1", 4097))},
},
},
},
expMsg: map[string]string{
"parse_mode": "html",
"text": strings.Repeat("1", 4096-3) + "...",
},
expMsgError: nil,
}, {
name: "Error in initing",
settings: `{}`,