mirror of
https://github.com/prometheus/alertmanager
synced 2024-12-28 00:52:13 +00:00
telegram: use HTML template with HTML parse mode
Closes #3061 Signed-off-by: Simon Pasquier <spasquie@redhat.com>
This commit is contained in:
parent
aace20a902
commit
aa6a929316
@ -69,6 +69,10 @@ func (n *Notifier) Notify(ctx context.Context, alert ...*types.Alert) (bool, err
|
||||
tmpl = notify.TmplText(n.tmpl, data, &err)
|
||||
)
|
||||
|
||||
if n.conf.ParseMode == "HTML" {
|
||||
tmpl = notify.TmplHTML(n.tmpl, data, &err)
|
||||
}
|
||||
|
||||
key, ok := notify.GroupKey(ctx)
|
||||
if !ok {
|
||||
return false, fmt.Errorf("group key missing")
|
||||
|
@ -14,17 +14,26 @@
|
||||
package telegram
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/go-kit/log"
|
||||
commoncfg "github.com/prometheus/common/config"
|
||||
"github.com/prometheus/common/model"
|
||||
"github.com/stretchr/testify/require"
|
||||
"gopkg.in/yaml.v2"
|
||||
|
||||
"github.com/prometheus/alertmanager/config"
|
||||
"github.com/prometheus/alertmanager/notify"
|
||||
"github.com/prometheus/alertmanager/notify/test"
|
||||
"github.com/prometheus/alertmanager/types"
|
||||
)
|
||||
|
||||
func TestTelegramUnmarshal(t *testing.T) {
|
||||
@ -73,3 +82,71 @@ func TestTelegramRetry(t *testing.T) {
|
||||
require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode))
|
||||
}
|
||||
}
|
||||
|
||||
func TestTelegramNotify(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
cfg config.TelegramConfig
|
||||
expText string
|
||||
}{
|
||||
{
|
||||
name: "No escaping by default",
|
||||
cfg: config.TelegramConfig{
|
||||
Message: "<code>x < y</code>",
|
||||
HTTPConfig: &commoncfg.HTTPClientConfig{},
|
||||
},
|
||||
expText: "<code>x < y</code>",
|
||||
},
|
||||
{
|
||||
name: "Characters escaped in HTML mode",
|
||||
cfg: config.TelegramConfig{
|
||||
ParseMode: "HTML",
|
||||
Message: "<code>x < y</code>",
|
||||
HTTPConfig: &commoncfg.HTTPClientConfig{},
|
||||
},
|
||||
expText: "<code>x < y</code>",
|
||||
},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
var out []byte
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
out, err = io.ReadAll(r.Body)
|
||||
require.NoError(t, err)
|
||||
w.Write([]byte(`{"ok":true,"result":{"chat":{}}}`))
|
||||
}))
|
||||
defer srv.Close()
|
||||
u, _ := url.Parse(srv.URL)
|
||||
|
||||
tc.cfg.APIUrl = &config.URL{URL: u}
|
||||
|
||||
notifier, err := New(&tc.cfg, test.CreateTmpl(t), log.NewNopLogger())
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
ctx = notify.WithGroupKey(ctx, "1")
|
||||
|
||||
retry, err := notifier.Notify(ctx, []*types.Alert{
|
||||
{
|
||||
Alert: model.Alert{
|
||||
Labels: model.LabelSet{
|
||||
"lbl1": "val1",
|
||||
"lbl3": "val3",
|
||||
},
|
||||
StartsAt: time.Now(),
|
||||
EndsAt: time.Now().Add(time.Hour),
|
||||
},
|
||||
},
|
||||
}...)
|
||||
|
||||
require.False(t, retry)
|
||||
require.NoError(t, err)
|
||||
|
||||
req := map[string]string{}
|
||||
err = json.Unmarshal(out, &req)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, tc.expText, req["text"])
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user