diff --git a/app/vmalert/web.go b/app/vmalert/web.go
index 0cdff3a2c7..668a758b0c 100644
--- a/app/vmalert/web.go
+++ b/app/vmalert/web.go
@@ -8,7 +8,6 @@ import (
 	"sort"
 	"strconv"
 	"strings"
-	"sync"
 
 	"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/notifier"
 	"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/tpl"
@@ -18,20 +17,14 @@ import (
 )
 
 var (
-	once     = sync.Once{}
-	apiLinks [][2]string
-	navItems []tpl.NavItem
-)
-
-func initLinks() {
 	apiLinks = [][2]string{
 		// api links are relative since they can be used by external clients,
 		// such as Grafana, and proxied via vmselect.
 		{"api/v1/rules", "list all loaded groups and rules"},
 		{"api/v1/alerts", "list all active alerts"},
 		{fmt.Sprintf("api/v1/alert?%s=<int>&%s=<int>", paramGroupID, paramAlertID), "get alert status by group and alert ID"},
-
-		// system links
+	}
+	systemLinks = [][2]string{
 		{"/flags", "command-line flags"},
 		{"/metrics", "list of application metrics"},
 		{"/-/reload", "reload configuration"},
@@ -43,7 +36,7 @@ func initLinks() {
 		{Name: "Notifiers", Url: "notifiers"},
 		{Name: "Docs", Url: "https://docs.victoriametrics.com/vmalert.html"},
 	}
-}
+)
 
 type requestHandler struct {
 	m *manager
@@ -57,10 +50,6 @@ var (
 )
 
 func (rh *requestHandler) handler(w http.ResponseWriter, r *http.Request) bool {
-	once.Do(func() {
-		initLinks()
-	})
-
 	if strings.HasPrefix(r.URL.Path, "/vmalert/static") {
 		staticServer.ServeHTTP(w, r)
 		return true
diff --git a/app/vmalert/web.qtpl b/app/vmalert/web.qtpl
index 61757d17fa..78c2914c8a 100644
--- a/app/vmalert/web.qtpl
+++ b/app/vmalert/web.qtpl
@@ -16,11 +16,16 @@
     <p>
         API:<br>
         {% for _, p := range apiLinks  %}
-            {%code
-                p, doc := p[0], p[1]
-            %}
-        	<a href="{%s p %}">{%s p %}</a> - {%s doc %}<br/>
+            {%code p, doc := p[0], p[1] %}
+            <a href="{%s p %}">{%s p %}</a> - {%s doc %}<br/>
         {% endfor %}
+        {% if r.Header.Get("X-Forwarded-For") == "" %}
+            System:<br>
+            {% for _, p := range systemLinks  %}
+                {%code p, doc := p[0], p[1] %}
+                <a href="{%s p %}">{%s p %}</a> - {%s doc %}<br/>
+            {% endfor %}
+        {% endif %}
     </p>
     {%= tpl.Footer(r) %}
 {% endfunc %}
diff --git a/app/vmalert/web.qtpl.go b/app/vmalert/web.qtpl.go
index 19f6f5448f..b31a01afbe 100644
--- a/app/vmalert/web.qtpl.go
+++ b/app/vmalert/web.qtpl.go
@@ -45,87 +45,127 @@ func StreamWelcome(qw422016 *qt422016.Writer, r *http.Request) {
 //line app/vmalert/web.qtpl:18
 		qw422016.N().S(`
             `)
-//line app/vmalert/web.qtpl:20
+//line app/vmalert/web.qtpl:19
 		p, doc := p[0], p[1]
 
-//line app/vmalert/web.qtpl:21
+//line app/vmalert/web.qtpl:19
 		qw422016.N().S(`
-        	<a href="`)
-//line app/vmalert/web.qtpl:22
+            <a href="`)
+//line app/vmalert/web.qtpl:20
 		qw422016.E().S(p)
-//line app/vmalert/web.qtpl:22
+//line app/vmalert/web.qtpl:20
 		qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:22
+//line app/vmalert/web.qtpl:20
 		qw422016.E().S(p)
-//line app/vmalert/web.qtpl:22
+//line app/vmalert/web.qtpl:20
 		qw422016.N().S(`</a> - `)
-//line app/vmalert/web.qtpl:22
+//line app/vmalert/web.qtpl:20
 		qw422016.E().S(doc)
-//line app/vmalert/web.qtpl:22
+//line app/vmalert/web.qtpl:20
 		qw422016.N().S(`<br/>
         `)
-//line app/vmalert/web.qtpl:23
+//line app/vmalert/web.qtpl:21
 	}
-//line app/vmalert/web.qtpl:23
+//line app/vmalert/web.qtpl:21
+	qw422016.N().S(`
+        `)
+//line app/vmalert/web.qtpl:22
+	if r.Header.Get("X-Forwarded-For") == "" {
+//line app/vmalert/web.qtpl:22
+		qw422016.N().S(`
+            System:<br>
+            `)
+//line app/vmalert/web.qtpl:24
+		for _, p := range systemLinks {
+//line app/vmalert/web.qtpl:24
+			qw422016.N().S(`
+                `)
+//line app/vmalert/web.qtpl:25
+			p, doc := p[0], p[1]
+
+//line app/vmalert/web.qtpl:25
+			qw422016.N().S(`
+                <a href="`)
+//line app/vmalert/web.qtpl:26
+			qw422016.E().S(p)
+//line app/vmalert/web.qtpl:26
+			qw422016.N().S(`">`)
+//line app/vmalert/web.qtpl:26
+			qw422016.E().S(p)
+//line app/vmalert/web.qtpl:26
+			qw422016.N().S(`</a> - `)
+//line app/vmalert/web.qtpl:26
+			qw422016.E().S(doc)
+//line app/vmalert/web.qtpl:26
+			qw422016.N().S(`<br/>
+            `)
+//line app/vmalert/web.qtpl:27
+		}
+//line app/vmalert/web.qtpl:27
+		qw422016.N().S(`
+        `)
+//line app/vmalert/web.qtpl:28
+	}
+//line app/vmalert/web.qtpl:28
 	qw422016.N().S(`
     </p>
     `)
-//line app/vmalert/web.qtpl:25
+//line app/vmalert/web.qtpl:30
 	tpl.StreamFooter(qw422016, r)
-//line app/vmalert/web.qtpl:25
+//line app/vmalert/web.qtpl:30
 	qw422016.N().S(`
 `)
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 }
 
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 func WriteWelcome(qq422016 qtio422016.Writer, r *http.Request) {
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	StreamWelcome(qw422016, r)
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 }
 
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 func Welcome(r *http.Request) string {
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	WriteWelcome(qb422016, r)
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 	return qs422016
-//line app/vmalert/web.qtpl:26
+//line app/vmalert/web.qtpl:31
 }
 
-//line app/vmalert/web.qtpl:28
+//line app/vmalert/web.qtpl:33
 func StreamListGroups(qw422016 *qt422016.Writer, r *http.Request, groups []APIGroup) {
-//line app/vmalert/web.qtpl:28
+//line app/vmalert/web.qtpl:33
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:29
+//line app/vmalert/web.qtpl:34
 	prefix := utils.Prefix(r.URL.Path)
 
-//line app/vmalert/web.qtpl:29
+//line app/vmalert/web.qtpl:34
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:30
+//line app/vmalert/web.qtpl:35
 	tpl.StreamHeader(qw422016, r, navItems, "Groups")
-//line app/vmalert/web.qtpl:30
+//line app/vmalert/web.qtpl:35
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:31
+//line app/vmalert/web.qtpl:36
 	if len(groups) > 0 {
-//line app/vmalert/web.qtpl:31
+//line app/vmalert/web.qtpl:36
 		qw422016.N().S(`
         `)
-//line app/vmalert/web.qtpl:33
+//line app/vmalert/web.qtpl:38
 		rOk := make(map[string]int)
 		rNotOk := make(map[string]int)
 		for _, g := range groups {
@@ -138,138 +178,138 @@ func StreamListGroups(qw422016 *qt422016.Writer, r *http.Request, groups []APIGr
 			}
 		}
 
-//line app/vmalert/web.qtpl:44
+//line app/vmalert/web.qtpl:49
 		qw422016.N().S(`
          <a class="btn btn-primary" role="button" onclick="collapseAll()">Collapse All</a>
          <a class="btn btn-primary" role="button" onclick="expandAll()">Expand All</a>
         `)
-//line app/vmalert/web.qtpl:47
+//line app/vmalert/web.qtpl:52
 		for _, g := range groups {
-//line app/vmalert/web.qtpl:47
+//line app/vmalert/web.qtpl:52
 			qw422016.N().S(`
               <div class="group-heading`)
-//line app/vmalert/web.qtpl:48
+//line app/vmalert/web.qtpl:53
 			if rNotOk[g.Name] > 0 {
-//line app/vmalert/web.qtpl:48
+//line app/vmalert/web.qtpl:53
 				qw422016.N().S(` alert-danger`)
-//line app/vmalert/web.qtpl:48
+//line app/vmalert/web.qtpl:53
 			}
-//line app/vmalert/web.qtpl:48
+//line app/vmalert/web.qtpl:53
 			qw422016.N().S(`"  data-bs-target="rules-`)
-//line app/vmalert/web.qtpl:48
+//line app/vmalert/web.qtpl:53
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:48
+//line app/vmalert/web.qtpl:53
 			qw422016.N().S(`">
                 <span class="anchor" id="group-`)
-//line app/vmalert/web.qtpl:49
+//line app/vmalert/web.qtpl:54
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:49
+//line app/vmalert/web.qtpl:54
 			qw422016.N().S(`"></span>
                 <a href="#group-`)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			qw422016.E().S(g.Name)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			if g.Type != "prometheus" {
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 				qw422016.N().S(` (`)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 				qw422016.E().S(g.Type)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 				qw422016.N().S(`)`)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			}
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			qw422016.N().S(` (every `)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			qw422016.N().FPrec(g.Interval, 0)
-//line app/vmalert/web.qtpl:50
+//line app/vmalert/web.qtpl:55
 			qw422016.N().S(`s)</a>
                  `)
-//line app/vmalert/web.qtpl:51
+//line app/vmalert/web.qtpl:56
 			if rNotOk[g.Name] > 0 {
-//line app/vmalert/web.qtpl:51
+//line app/vmalert/web.qtpl:56
 				qw422016.N().S(`<span class="badge bg-danger" title="Number of rules with status Error">`)
-//line app/vmalert/web.qtpl:51
+//line app/vmalert/web.qtpl:56
 				qw422016.N().D(rNotOk[g.Name])
-//line app/vmalert/web.qtpl:51
+//line app/vmalert/web.qtpl:56
 				qw422016.N().S(`</span> `)
-//line app/vmalert/web.qtpl:51
+//line app/vmalert/web.qtpl:56
 			}
-//line app/vmalert/web.qtpl:51
+//line app/vmalert/web.qtpl:56
 			qw422016.N().S(`
                 <span class="badge bg-success" title="Number of rules withs status Ok">`)
-//line app/vmalert/web.qtpl:52
+//line app/vmalert/web.qtpl:57
 			qw422016.N().D(rOk[g.Name])
-//line app/vmalert/web.qtpl:52
+//line app/vmalert/web.qtpl:57
 			qw422016.N().S(`</span>
                 <p class="fs-6 fw-lighter">`)
-//line app/vmalert/web.qtpl:53
+//line app/vmalert/web.qtpl:58
 			qw422016.E().S(g.File)
-//line app/vmalert/web.qtpl:53
+//line app/vmalert/web.qtpl:58
 			qw422016.N().S(`</p>
                 `)
-//line app/vmalert/web.qtpl:54
+//line app/vmalert/web.qtpl:59
 			if len(g.Params) > 0 {
-//line app/vmalert/web.qtpl:54
+//line app/vmalert/web.qtpl:59
 				qw422016.N().S(`
                     <div class="fs-6 fw-lighter">Extra params
                     `)
-//line app/vmalert/web.qtpl:56
+//line app/vmalert/web.qtpl:61
 				for _, param := range g.Params {
-//line app/vmalert/web.qtpl:56
+//line app/vmalert/web.qtpl:61
 					qw422016.N().S(`
                             <span class="float-left badge bg-primary">`)
-//line app/vmalert/web.qtpl:57
+//line app/vmalert/web.qtpl:62
 					qw422016.E().S(param)
-//line app/vmalert/web.qtpl:57
+//line app/vmalert/web.qtpl:62
 					qw422016.N().S(`</span>
                     `)
-//line app/vmalert/web.qtpl:58
+//line app/vmalert/web.qtpl:63
 				}
-//line app/vmalert/web.qtpl:58
+//line app/vmalert/web.qtpl:63
 				qw422016.N().S(`
                     </div>
                 `)
-//line app/vmalert/web.qtpl:60
+//line app/vmalert/web.qtpl:65
 			}
-//line app/vmalert/web.qtpl:60
+//line app/vmalert/web.qtpl:65
 			qw422016.N().S(`
                 `)
-//line app/vmalert/web.qtpl:61
+//line app/vmalert/web.qtpl:66
 			if len(g.Headers) > 0 {
-//line app/vmalert/web.qtpl:61
+//line app/vmalert/web.qtpl:66
 				qw422016.N().S(`
                     <div class="fs-6 fw-lighter">Extra headers
                     `)
-//line app/vmalert/web.qtpl:63
+//line app/vmalert/web.qtpl:68
 				for _, header := range g.Headers {
-//line app/vmalert/web.qtpl:63
+//line app/vmalert/web.qtpl:68
 					qw422016.N().S(`
                             <span class="float-left badge bg-primary">`)
-//line app/vmalert/web.qtpl:64
+//line app/vmalert/web.qtpl:69
 					qw422016.E().S(header)
-//line app/vmalert/web.qtpl:64
+//line app/vmalert/web.qtpl:69
 					qw422016.N().S(`</span>
                     `)
-//line app/vmalert/web.qtpl:65
+//line app/vmalert/web.qtpl:70
 				}
-//line app/vmalert/web.qtpl:65
+//line app/vmalert/web.qtpl:70
 				qw422016.N().S(`
                     </div>
                 `)
-//line app/vmalert/web.qtpl:67
+//line app/vmalert/web.qtpl:72
 			}
-//line app/vmalert/web.qtpl:67
+//line app/vmalert/web.qtpl:72
 			qw422016.N().S(`
             </div>
             <div class="collapse" id="rules-`)
-//line app/vmalert/web.qtpl:69
+//line app/vmalert/web.qtpl:74
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:69
+//line app/vmalert/web.qtpl:74
 			qw422016.N().S(`">
                 <table class="table table-striped table-hover table-sm">
                     <thead>
@@ -281,267 +321,267 @@ func StreamListGroups(qw422016 *qt422016.Writer, r *http.Request, groups []APIGr
                     </thead>
                     <tbody>
                     `)
-//line app/vmalert/web.qtpl:79
+//line app/vmalert/web.qtpl:84
 			for _, r := range g.Rules {
-//line app/vmalert/web.qtpl:79
+//line app/vmalert/web.qtpl:84
 				qw422016.N().S(`
                         <tr`)
-//line app/vmalert/web.qtpl:80
+//line app/vmalert/web.qtpl:85
 				if r.LastError != "" {
-//line app/vmalert/web.qtpl:80
+//line app/vmalert/web.qtpl:85
 					qw422016.N().S(` class="alert-danger"`)
-//line app/vmalert/web.qtpl:80
+//line app/vmalert/web.qtpl:85
 				}
-//line app/vmalert/web.qtpl:80
+//line app/vmalert/web.qtpl:85
 				qw422016.N().S(`>
                             <td>
                                 <div class="row">
                                     <div class="col-12 mb-2">
                                         `)
-//line app/vmalert/web.qtpl:84
+//line app/vmalert/web.qtpl:89
 				if r.Type == "alerting" {
-//line app/vmalert/web.qtpl:84
+//line app/vmalert/web.qtpl:89
 					qw422016.N().S(`
                                         <b>alert:</b> `)
-//line app/vmalert/web.qtpl:85
+//line app/vmalert/web.qtpl:90
 					qw422016.E().S(r.Name)
-//line app/vmalert/web.qtpl:85
+//line app/vmalert/web.qtpl:90
 					qw422016.N().S(` (for: `)
-//line app/vmalert/web.qtpl:85
+//line app/vmalert/web.qtpl:90
 					qw422016.E().V(r.Duration)
-//line app/vmalert/web.qtpl:85
+//line app/vmalert/web.qtpl:90
 					qw422016.N().S(` seconds)
                                         `)
-//line app/vmalert/web.qtpl:86
+//line app/vmalert/web.qtpl:91
 				} else {
-//line app/vmalert/web.qtpl:86
+//line app/vmalert/web.qtpl:91
 					qw422016.N().S(`
                                         <b>record:</b> `)
-//line app/vmalert/web.qtpl:87
+//line app/vmalert/web.qtpl:92
 					qw422016.E().S(r.Name)
-//line app/vmalert/web.qtpl:87
+//line app/vmalert/web.qtpl:92
 					qw422016.N().S(`
                                         `)
-//line app/vmalert/web.qtpl:88
+//line app/vmalert/web.qtpl:93
 				}
-//line app/vmalert/web.qtpl:88
+//line app/vmalert/web.qtpl:93
 				qw422016.N().S(`
                                         | <span><a target="_blank" href="`)
-//line app/vmalert/web.qtpl:89
+//line app/vmalert/web.qtpl:94
 				qw422016.E().S(prefix + r.WebLink())
-//line app/vmalert/web.qtpl:89
+//line app/vmalert/web.qtpl:94
 				qw422016.N().S(`">Details</a></span>
                                     </div>
                                     <div class="col-12">
                                         <code><pre>`)
-//line app/vmalert/web.qtpl:92
+//line app/vmalert/web.qtpl:97
 				qw422016.E().S(r.Query)
-//line app/vmalert/web.qtpl:92
+//line app/vmalert/web.qtpl:97
 				qw422016.N().S(`</pre></code>
                                     </div>
                                     <div class="col-12 mb-2">
                                         `)
-//line app/vmalert/web.qtpl:95
+//line app/vmalert/web.qtpl:100
 				if len(r.Labels) > 0 {
-//line app/vmalert/web.qtpl:95
+//line app/vmalert/web.qtpl:100
 					qw422016.N().S(` <b>Labels:</b>`)
-//line app/vmalert/web.qtpl:95
+//line app/vmalert/web.qtpl:100
 				}
-//line app/vmalert/web.qtpl:95
+//line app/vmalert/web.qtpl:100
 				qw422016.N().S(`
                                         `)
-//line app/vmalert/web.qtpl:96
+//line app/vmalert/web.qtpl:101
 				for k, v := range r.Labels {
-//line app/vmalert/web.qtpl:96
+//line app/vmalert/web.qtpl:101
 					qw422016.N().S(`
                                                 <span class="ms-1 badge bg-primary">`)
-//line app/vmalert/web.qtpl:97
+//line app/vmalert/web.qtpl:102
 					qw422016.E().S(k)
-//line app/vmalert/web.qtpl:97
+//line app/vmalert/web.qtpl:102
 					qw422016.N().S(`=`)
-//line app/vmalert/web.qtpl:97
+//line app/vmalert/web.qtpl:102
 					qw422016.E().S(v)
-//line app/vmalert/web.qtpl:97
+//line app/vmalert/web.qtpl:102
 					qw422016.N().S(`</span>
                                         `)
-//line app/vmalert/web.qtpl:98
+//line app/vmalert/web.qtpl:103
 				}
-//line app/vmalert/web.qtpl:98
+//line app/vmalert/web.qtpl:103
 				qw422016.N().S(`
                                     </div>
                                     `)
-//line app/vmalert/web.qtpl:100
+//line app/vmalert/web.qtpl:105
 				if r.LastError != "" {
-//line app/vmalert/web.qtpl:100
+//line app/vmalert/web.qtpl:105
 					qw422016.N().S(`
                                     <div class="col-12">
                                         <b>Error:</b>
                                         <div class="error-cell">
                                         `)
-//line app/vmalert/web.qtpl:104
+//line app/vmalert/web.qtpl:109
 					qw422016.E().S(r.LastError)
-//line app/vmalert/web.qtpl:104
+//line app/vmalert/web.qtpl:109
 					qw422016.N().S(`
                                         </div>
                                     </div>
                                     `)
-//line app/vmalert/web.qtpl:107
+//line app/vmalert/web.qtpl:112
 				}
-//line app/vmalert/web.qtpl:107
+//line app/vmalert/web.qtpl:112
 				qw422016.N().S(`
                                 </div>
                             </td>
                             <td class="text-center">`)
-//line app/vmalert/web.qtpl:110
+//line app/vmalert/web.qtpl:115
 				qw422016.N().D(r.LastSamples)
-//line app/vmalert/web.qtpl:110
+//line app/vmalert/web.qtpl:115
 				qw422016.N().S(`</td>
                             <td class="text-center">`)
-//line app/vmalert/web.qtpl:111
+//line app/vmalert/web.qtpl:116
 				qw422016.N().FPrec(time.Since(r.LastEvaluation).Seconds(), 3)
-//line app/vmalert/web.qtpl:111
+//line app/vmalert/web.qtpl:116
 				qw422016.N().S(`s ago</td>
                         </tr>
                     `)
-//line app/vmalert/web.qtpl:113
+//line app/vmalert/web.qtpl:118
 			}
-//line app/vmalert/web.qtpl:113
+//line app/vmalert/web.qtpl:118
 			qw422016.N().S(`
                  </tbody>
                 </table>
             </div>
         `)
-//line app/vmalert/web.qtpl:117
+//line app/vmalert/web.qtpl:122
 		}
-//line app/vmalert/web.qtpl:117
+//line app/vmalert/web.qtpl:122
 		qw422016.N().S(`
 
     `)
-//line app/vmalert/web.qtpl:119
+//line app/vmalert/web.qtpl:124
 	} else {
-//line app/vmalert/web.qtpl:119
+//line app/vmalert/web.qtpl:124
 		qw422016.N().S(`
         <div>
             <p>No groups...</p>
         </div>
     `)
-//line app/vmalert/web.qtpl:123
+//line app/vmalert/web.qtpl:128
 	}
-//line app/vmalert/web.qtpl:123
+//line app/vmalert/web.qtpl:128
 	qw422016.N().S(`
 
     `)
-//line app/vmalert/web.qtpl:125
+//line app/vmalert/web.qtpl:130
 	tpl.StreamFooter(qw422016, r)
-//line app/vmalert/web.qtpl:125
+//line app/vmalert/web.qtpl:130
 	qw422016.N().S(`
 
 `)
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 }
 
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 func WriteListGroups(qq422016 qtio422016.Writer, r *http.Request, groups []APIGroup) {
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	StreamListGroups(qw422016, r, groups)
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 }
 
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 func ListGroups(r *http.Request, groups []APIGroup) string {
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	WriteListGroups(qb422016, r, groups)
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 	return qs422016
-//line app/vmalert/web.qtpl:127
+//line app/vmalert/web.qtpl:132
 }
 
-//line app/vmalert/web.qtpl:130
+//line app/vmalert/web.qtpl:135
 func StreamListAlerts(qw422016 *qt422016.Writer, r *http.Request, groupAlerts []GroupAlerts) {
-//line app/vmalert/web.qtpl:130
+//line app/vmalert/web.qtpl:135
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:131
+//line app/vmalert/web.qtpl:136
 	prefix := utils.Prefix(r.URL.Path)
 
-//line app/vmalert/web.qtpl:131
+//line app/vmalert/web.qtpl:136
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:132
+//line app/vmalert/web.qtpl:137
 	tpl.StreamHeader(qw422016, r, navItems, "Alerts")
-//line app/vmalert/web.qtpl:132
+//line app/vmalert/web.qtpl:137
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:133
+//line app/vmalert/web.qtpl:138
 	if len(groupAlerts) > 0 {
-//line app/vmalert/web.qtpl:133
+//line app/vmalert/web.qtpl:138
 		qw422016.N().S(`
          <a class="btn btn-primary" role="button" onclick="collapseAll()">Collapse All</a>
          <a class="btn btn-primary" role="button" onclick="expandAll()">Expand All</a>
          `)
-//line app/vmalert/web.qtpl:136
+//line app/vmalert/web.qtpl:141
 		for _, ga := range groupAlerts {
-//line app/vmalert/web.qtpl:136
+//line app/vmalert/web.qtpl:141
 			qw422016.N().S(`
             `)
-//line app/vmalert/web.qtpl:137
+//line app/vmalert/web.qtpl:142
 			g := ga.Group
 
-//line app/vmalert/web.qtpl:137
+//line app/vmalert/web.qtpl:142
 			qw422016.N().S(`
             <div class="group-heading alert-danger" data-bs-target="rules-`)
-//line app/vmalert/web.qtpl:138
+//line app/vmalert/web.qtpl:143
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:138
+//line app/vmalert/web.qtpl:143
 			qw422016.N().S(`">
                 <span class="anchor" id="group-`)
-//line app/vmalert/web.qtpl:139
+//line app/vmalert/web.qtpl:144
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:139
+//line app/vmalert/web.qtpl:144
 			qw422016.N().S(`"></span>
                 <a href="#group-`)
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 			qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 			qw422016.E().S(g.Name)
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 			if g.Type != "prometheus" {
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 				qw422016.N().S(` (`)
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 				qw422016.E().S(g.Type)
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 				qw422016.N().S(`)`)
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 			}
-//line app/vmalert/web.qtpl:140
+//line app/vmalert/web.qtpl:145
 			qw422016.N().S(`</a>
                 <span class="badge bg-danger" title="Number of active alerts">`)
-//line app/vmalert/web.qtpl:141
+//line app/vmalert/web.qtpl:146
 			qw422016.N().D(len(ga.Alerts))
-//line app/vmalert/web.qtpl:141
+//line app/vmalert/web.qtpl:146
 			qw422016.N().S(`</span>
                 <br>
                 <p class="fs-6 fw-lighter">`)
-//line app/vmalert/web.qtpl:143
+//line app/vmalert/web.qtpl:148
 			qw422016.E().S(g.File)
-//line app/vmalert/web.qtpl:143
+//line app/vmalert/web.qtpl:148
 			qw422016.N().S(`</p>
             </div>
             `)
-//line app/vmalert/web.qtpl:146
+//line app/vmalert/web.qtpl:151
 			var keys []string
 			alertsByRule := make(map[string][]*APIAlert)
 			for _, alert := range ga.Alerts {
@@ -552,20 +592,20 @@ func StreamListAlerts(qw422016 *qt422016.Writer, r *http.Request, groupAlerts []
 			}
 			sort.Strings(keys)
 
-//line app/vmalert/web.qtpl:155
+//line app/vmalert/web.qtpl:160
 			qw422016.N().S(`
             <div class="collapse" id="rules-`)
-//line app/vmalert/web.qtpl:156
+//line app/vmalert/web.qtpl:161
 			qw422016.E().S(g.ID)
-//line app/vmalert/web.qtpl:156
+//line app/vmalert/web.qtpl:161
 			qw422016.N().S(`">
                 `)
-//line app/vmalert/web.qtpl:157
+//line app/vmalert/web.qtpl:162
 			for _, ruleID := range keys {
-//line app/vmalert/web.qtpl:157
+//line app/vmalert/web.qtpl:162
 				qw422016.N().S(`
                     `)
-//line app/vmalert/web.qtpl:159
+//line app/vmalert/web.qtpl:164
 				defaultAR := alertsByRule[ruleID][0]
 				var labelKeys []string
 				for k := range defaultAR.Labels {
@@ -573,28 +613,28 @@ func StreamListAlerts(qw422016 *qt422016.Writer, r *http.Request, groupAlerts []
 				}
 				sort.Strings(labelKeys)
 
-//line app/vmalert/web.qtpl:165
+//line app/vmalert/web.qtpl:170
 				qw422016.N().S(`
                     <br>
                     <b>alert:</b> `)
-//line app/vmalert/web.qtpl:167
+//line app/vmalert/web.qtpl:172
 				qw422016.E().S(defaultAR.Name)
-//line app/vmalert/web.qtpl:167
+//line app/vmalert/web.qtpl:172
 				qw422016.N().S(` (`)
-//line app/vmalert/web.qtpl:167
+//line app/vmalert/web.qtpl:172
 				qw422016.N().D(len(alertsByRule[ruleID]))
-//line app/vmalert/web.qtpl:167
+//line app/vmalert/web.qtpl:172
 				qw422016.N().S(`)
                      | <span><a target="_blank" href="`)
-//line app/vmalert/web.qtpl:168
+//line app/vmalert/web.qtpl:173
 				qw422016.E().S(defaultAR.SourceLink)
-//line app/vmalert/web.qtpl:168
+//line app/vmalert/web.qtpl:173
 				qw422016.N().S(`">Source</a></span>
                     <br>
                     <b>expr:</b><code><pre>`)
-//line app/vmalert/web.qtpl:170
+//line app/vmalert/web.qtpl:175
 				qw422016.E().S(defaultAR.Expression)
-//line app/vmalert/web.qtpl:170
+//line app/vmalert/web.qtpl:175
 				qw422016.N().S(`</pre></code>
                     <table class="table table-striped table-hover table-sm">
                         <thead>
@@ -608,204 +648,204 @@ func StreamListAlerts(qw422016 *qt422016.Writer, r *http.Request, groupAlerts []
                         </thead>
                         <tbody>
                         `)
-//line app/vmalert/web.qtpl:182
+//line app/vmalert/web.qtpl:187
 				for _, ar := range alertsByRule[ruleID] {
-//line app/vmalert/web.qtpl:182
+//line app/vmalert/web.qtpl:187
 					qw422016.N().S(`
                             <tr>
                                 <td>
                                     `)
-//line app/vmalert/web.qtpl:185
+//line app/vmalert/web.qtpl:190
 					for _, k := range labelKeys {
-//line app/vmalert/web.qtpl:185
+//line app/vmalert/web.qtpl:190
 						qw422016.N().S(`
                                         <span class="ms-1 badge bg-primary">`)
-//line app/vmalert/web.qtpl:186
+//line app/vmalert/web.qtpl:191
 						qw422016.E().S(k)
-//line app/vmalert/web.qtpl:186
+//line app/vmalert/web.qtpl:191
 						qw422016.N().S(`=`)
-//line app/vmalert/web.qtpl:186
+//line app/vmalert/web.qtpl:191
 						qw422016.E().S(ar.Labels[k])
-//line app/vmalert/web.qtpl:186
+//line app/vmalert/web.qtpl:191
 						qw422016.N().S(`</span>
                                     `)
-//line app/vmalert/web.qtpl:187
+//line app/vmalert/web.qtpl:192
 					}
-//line app/vmalert/web.qtpl:187
+//line app/vmalert/web.qtpl:192
 					qw422016.N().S(`
                                 </td>
                                 <td>`)
-//line app/vmalert/web.qtpl:189
+//line app/vmalert/web.qtpl:194
 					streambadgeState(qw422016, ar.State)
-//line app/vmalert/web.qtpl:189
+//line app/vmalert/web.qtpl:194
 					qw422016.N().S(`</td>
                                 <td>
                                     `)
-//line app/vmalert/web.qtpl:191
+//line app/vmalert/web.qtpl:196
 					qw422016.E().S(ar.ActiveAt.Format("2006-01-02T15:04:05Z07:00"))
-//line app/vmalert/web.qtpl:191
+//line app/vmalert/web.qtpl:196
 					qw422016.N().S(`
                                     `)
-//line app/vmalert/web.qtpl:192
+//line app/vmalert/web.qtpl:197
 					if ar.Restored {
-//line app/vmalert/web.qtpl:192
+//line app/vmalert/web.qtpl:197
 						streambadgeRestored(qw422016)
-//line app/vmalert/web.qtpl:192
+//line app/vmalert/web.qtpl:197
 					}
-//line app/vmalert/web.qtpl:192
+//line app/vmalert/web.qtpl:197
 					qw422016.N().S(`
                                 </td>
                                 <td>`)
-//line app/vmalert/web.qtpl:194
+//line app/vmalert/web.qtpl:199
 					qw422016.E().S(ar.Value)
-//line app/vmalert/web.qtpl:194
+//line app/vmalert/web.qtpl:199
 					qw422016.N().S(`</td>
                                 <td>
                                     <a href="`)
-//line app/vmalert/web.qtpl:196
+//line app/vmalert/web.qtpl:201
 					qw422016.E().S(prefix + ar.WebLink())
-//line app/vmalert/web.qtpl:196
+//line app/vmalert/web.qtpl:201
 					qw422016.N().S(`">Details</a>
                                 </td>
                             </tr>
                         `)
-//line app/vmalert/web.qtpl:199
+//line app/vmalert/web.qtpl:204
 				}
-//line app/vmalert/web.qtpl:199
+//line app/vmalert/web.qtpl:204
 				qw422016.N().S(`
                      </tbody>
                     </table>
                 `)
-//line app/vmalert/web.qtpl:202
+//line app/vmalert/web.qtpl:207
 			}
-//line app/vmalert/web.qtpl:202
+//line app/vmalert/web.qtpl:207
 			qw422016.N().S(`
             </div>
             <br>
         `)
-//line app/vmalert/web.qtpl:205
+//line app/vmalert/web.qtpl:210
 		}
-//line app/vmalert/web.qtpl:205
+//line app/vmalert/web.qtpl:210
 		qw422016.N().S(`
 
     `)
-//line app/vmalert/web.qtpl:207
+//line app/vmalert/web.qtpl:212
 	} else {
-//line app/vmalert/web.qtpl:207
+//line app/vmalert/web.qtpl:212
 		qw422016.N().S(`
         <div>
             <p>No active alerts...</p>
         </div>
     `)
-//line app/vmalert/web.qtpl:211
+//line app/vmalert/web.qtpl:216
 	}
-//line app/vmalert/web.qtpl:211
+//line app/vmalert/web.qtpl:216
 	qw422016.N().S(`
 
     `)
-//line app/vmalert/web.qtpl:213
+//line app/vmalert/web.qtpl:218
 	tpl.StreamFooter(qw422016, r)
-//line app/vmalert/web.qtpl:213
+//line app/vmalert/web.qtpl:218
 	qw422016.N().S(`
 
 `)
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 }
 
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 func WriteListAlerts(qq422016 qtio422016.Writer, r *http.Request, groupAlerts []GroupAlerts) {
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	StreamListAlerts(qw422016, r, groupAlerts)
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 }
 
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 func ListAlerts(r *http.Request, groupAlerts []GroupAlerts) string {
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	WriteListAlerts(qb422016, r, groupAlerts)
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 	return qs422016
-//line app/vmalert/web.qtpl:215
+//line app/vmalert/web.qtpl:220
 }
 
-//line app/vmalert/web.qtpl:217
+//line app/vmalert/web.qtpl:222
 func StreamListTargets(qw422016 *qt422016.Writer, r *http.Request, targets map[notifier.TargetType][]notifier.Target) {
-//line app/vmalert/web.qtpl:217
+//line app/vmalert/web.qtpl:222
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:218
+//line app/vmalert/web.qtpl:223
 	tpl.StreamHeader(qw422016, r, navItems, "Notifiers")
-//line app/vmalert/web.qtpl:218
+//line app/vmalert/web.qtpl:223
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:219
+//line app/vmalert/web.qtpl:224
 	if len(targets) > 0 {
-//line app/vmalert/web.qtpl:219
+//line app/vmalert/web.qtpl:224
 		qw422016.N().S(`
          <a class="btn btn-primary" role="button" onclick="collapseAll()">Collapse All</a>
          <a class="btn btn-primary" role="button" onclick="expandAll()">Expand All</a>
 
          `)
-//line app/vmalert/web.qtpl:224
+//line app/vmalert/web.qtpl:229
 		var keys []string
 		for key := range targets {
 			keys = append(keys, string(key))
 		}
 		sort.Strings(keys)
 
-//line app/vmalert/web.qtpl:229
+//line app/vmalert/web.qtpl:234
 		qw422016.N().S(`
 
          `)
-//line app/vmalert/web.qtpl:231
+//line app/vmalert/web.qtpl:236
 		for i := range keys {
-//line app/vmalert/web.qtpl:231
+//line app/vmalert/web.qtpl:236
 			qw422016.N().S(`
            `)
-//line app/vmalert/web.qtpl:232
+//line app/vmalert/web.qtpl:237
 			typeK, ns := keys[i], targets[notifier.TargetType(keys[i])]
 			count := len(ns)
 
-//line app/vmalert/web.qtpl:234
+//line app/vmalert/web.qtpl:239
 			qw422016.N().S(`
            <div class="group-heading data-bs-target="rules-`)
-//line app/vmalert/web.qtpl:235
+//line app/vmalert/web.qtpl:240
 			qw422016.E().S(typeK)
-//line app/vmalert/web.qtpl:235
+//line app/vmalert/web.qtpl:240
 			qw422016.N().S(`">
              <span class="anchor" id="notifiers-`)
-//line app/vmalert/web.qtpl:236
+//line app/vmalert/web.qtpl:241
 			qw422016.E().S(typeK)
-//line app/vmalert/web.qtpl:236
+//line app/vmalert/web.qtpl:241
 			qw422016.N().S(`"></span>
              <a href="#notifiers-`)
-//line app/vmalert/web.qtpl:237
+//line app/vmalert/web.qtpl:242
 			qw422016.E().S(typeK)
-//line app/vmalert/web.qtpl:237
+//line app/vmalert/web.qtpl:242
 			qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:237
+//line app/vmalert/web.qtpl:242
 			qw422016.E().S(typeK)
-//line app/vmalert/web.qtpl:237
+//line app/vmalert/web.qtpl:242
 			qw422016.N().S(` (`)
-//line app/vmalert/web.qtpl:237
+//line app/vmalert/web.qtpl:242
 			qw422016.N().D(count)
-//line app/vmalert/web.qtpl:237
+//line app/vmalert/web.qtpl:242
 			qw422016.N().S(`)</a>
          </div>
          <div class="collapse show" id="notifiers-`)
-//line app/vmalert/web.qtpl:239
+//line app/vmalert/web.qtpl:244
 			qw422016.E().S(typeK)
-//line app/vmalert/web.qtpl:239
+//line app/vmalert/web.qtpl:244
 			qw422016.N().S(`">
              <table class="table table-striped table-hover table-sm">
                  <thead>
@@ -816,119 +856,119 @@ func StreamListTargets(qw422016 *qt422016.Writer, r *http.Request, targets map[n
                  </thead>
                  <tbody>
                  `)
-//line app/vmalert/web.qtpl:248
+//line app/vmalert/web.qtpl:253
 			for _, n := range ns {
-//line app/vmalert/web.qtpl:248
+//line app/vmalert/web.qtpl:253
 				qw422016.N().S(`
                      <tr>
                          <td>
                               `)
-//line app/vmalert/web.qtpl:251
+//line app/vmalert/web.qtpl:256
 				for _, l := range n.Labels.GetLabels() {
-//line app/vmalert/web.qtpl:251
+//line app/vmalert/web.qtpl:256
 					qw422016.N().S(`
                                       <span class="ms-1 badge bg-primary">`)
-//line app/vmalert/web.qtpl:252
+//line app/vmalert/web.qtpl:257
 					qw422016.E().S(l.Name)
-//line app/vmalert/web.qtpl:252
+//line app/vmalert/web.qtpl:257
 					qw422016.N().S(`=`)
-//line app/vmalert/web.qtpl:252
+//line app/vmalert/web.qtpl:257
 					qw422016.E().S(l.Value)
-//line app/vmalert/web.qtpl:252
+//line app/vmalert/web.qtpl:257
 					qw422016.N().S(`</span>
                               `)
-//line app/vmalert/web.qtpl:253
+//line app/vmalert/web.qtpl:258
 				}
-//line app/vmalert/web.qtpl:253
+//line app/vmalert/web.qtpl:258
 				qw422016.N().S(`
                           </td>
                          <td>`)
-//line app/vmalert/web.qtpl:255
+//line app/vmalert/web.qtpl:260
 				qw422016.E().S(n.Notifier.Addr())
-//line app/vmalert/web.qtpl:255
+//line app/vmalert/web.qtpl:260
 				qw422016.N().S(`</td>
                      </tr>
                  `)
-//line app/vmalert/web.qtpl:257
+//line app/vmalert/web.qtpl:262
 			}
-//line app/vmalert/web.qtpl:257
+//line app/vmalert/web.qtpl:262
 			qw422016.N().S(`
               </tbody>
              </table>
          </div>
      `)
-//line app/vmalert/web.qtpl:261
+//line app/vmalert/web.qtpl:266
 		}
-//line app/vmalert/web.qtpl:261
+//line app/vmalert/web.qtpl:266
 		qw422016.N().S(`
 
     `)
-//line app/vmalert/web.qtpl:263
+//line app/vmalert/web.qtpl:268
 	} else {
-//line app/vmalert/web.qtpl:263
+//line app/vmalert/web.qtpl:268
 		qw422016.N().S(`
         <div>
             <p>No targets...</p>
         </div>
     `)
-//line app/vmalert/web.qtpl:267
+//line app/vmalert/web.qtpl:272
 	}
-//line app/vmalert/web.qtpl:267
+//line app/vmalert/web.qtpl:272
 	qw422016.N().S(`
 
     `)
-//line app/vmalert/web.qtpl:269
+//line app/vmalert/web.qtpl:274
 	tpl.StreamFooter(qw422016, r)
-//line app/vmalert/web.qtpl:269
+//line app/vmalert/web.qtpl:274
 	qw422016.N().S(`
 
 `)
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 }
 
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 func WriteListTargets(qq422016 qtio422016.Writer, r *http.Request, targets map[notifier.TargetType][]notifier.Target) {
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	StreamListTargets(qw422016, r, targets)
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 }
 
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 func ListTargets(r *http.Request, targets map[notifier.TargetType][]notifier.Target) string {
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	WriteListTargets(qb422016, r, targets)
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 	return qs422016
-//line app/vmalert/web.qtpl:271
+//line app/vmalert/web.qtpl:276
 }
 
-//line app/vmalert/web.qtpl:273
+//line app/vmalert/web.qtpl:278
 func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
-//line app/vmalert/web.qtpl:273
+//line app/vmalert/web.qtpl:278
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:274
+//line app/vmalert/web.qtpl:279
 	prefix := utils.Prefix(r.URL.Path)
 
-//line app/vmalert/web.qtpl:274
+//line app/vmalert/web.qtpl:279
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:275
+//line app/vmalert/web.qtpl:280
 	tpl.StreamHeader(qw422016, r, navItems, "")
-//line app/vmalert/web.qtpl:275
+//line app/vmalert/web.qtpl:280
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:277
+//line app/vmalert/web.qtpl:282
 	var labelKeys []string
 	for k := range alert.Labels {
 		labelKeys = append(labelKeys, k)
@@ -941,28 +981,28 @@ func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
 	}
 	sort.Strings(annotationKeys)
 
-//line app/vmalert/web.qtpl:288
+//line app/vmalert/web.qtpl:293
 	qw422016.N().S(`
     <div class="display-6 pb-3 mb-3">Alert: `)
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	qw422016.E().S(alert.Name)
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	qw422016.N().S(`<span class="ms-2 badge `)
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	if alert.State == "firing" {
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 		qw422016.N().S(`bg-danger`)
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	} else {
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 		qw422016.N().S(` bg-warning text-dark`)
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	}
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	qw422016.E().S(alert.State)
-//line app/vmalert/web.qtpl:289
+//line app/vmalert/web.qtpl:294
 	qw422016.N().S(`</span></div>
     <div class="container border-bottom p-2">
       <div class="row">
@@ -971,9 +1011,9 @@ func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
         </div>
         <div class="col">
           `)
-//line app/vmalert/web.qtpl:296
+//line app/vmalert/web.qtpl:301
 	qw422016.E().S(alert.ActiveAt.Format("2006-01-02T15:04:05Z07:00"))
-//line app/vmalert/web.qtpl:296
+//line app/vmalert/web.qtpl:301
 	qw422016.N().S(`
         </div>
       </div>
@@ -985,9 +1025,9 @@ func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
         </div>
         <div class="col">
           <code><pre>`)
-//line app/vmalert/web.qtpl:306
+//line app/vmalert/web.qtpl:311
 	qw422016.E().S(alert.Expression)
-//line app/vmalert/web.qtpl:306
+//line app/vmalert/web.qtpl:311
 	qw422016.N().S(`</pre></code>
         </div>
       </div>
@@ -999,23 +1039,23 @@ func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
         </div>
         <div class="col">
            `)
-//line app/vmalert/web.qtpl:316
+//line app/vmalert/web.qtpl:321
 	for _, k := range labelKeys {
-//line app/vmalert/web.qtpl:316
+//line app/vmalert/web.qtpl:321
 		qw422016.N().S(`
                 <span class="m-1 badge bg-primary">`)
-//line app/vmalert/web.qtpl:317
+//line app/vmalert/web.qtpl:322
 		qw422016.E().S(k)
-//line app/vmalert/web.qtpl:317
+//line app/vmalert/web.qtpl:322
 		qw422016.N().S(`=`)
-//line app/vmalert/web.qtpl:317
+//line app/vmalert/web.qtpl:322
 		qw422016.E().S(alert.Labels[k])
-//line app/vmalert/web.qtpl:317
+//line app/vmalert/web.qtpl:322
 		qw422016.N().S(`</span>
           `)
-//line app/vmalert/web.qtpl:318
+//line app/vmalert/web.qtpl:323
 	}
-//line app/vmalert/web.qtpl:318
+//line app/vmalert/web.qtpl:323
 	qw422016.N().S(`
         </div>
       </div>
@@ -1027,24 +1067,24 @@ func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
         </div>
         <div class="col">
            `)
-//line app/vmalert/web.qtpl:328
+//line app/vmalert/web.qtpl:333
 	for _, k := range annotationKeys {
-//line app/vmalert/web.qtpl:328
+//line app/vmalert/web.qtpl:333
 		qw422016.N().S(`
                 <b>`)
-//line app/vmalert/web.qtpl:329
+//line app/vmalert/web.qtpl:334
 		qw422016.E().S(k)
-//line app/vmalert/web.qtpl:329
+//line app/vmalert/web.qtpl:334
 		qw422016.N().S(`:</b><br>
                 <p>`)
-//line app/vmalert/web.qtpl:330
+//line app/vmalert/web.qtpl:335
 		qw422016.E().S(alert.Annotations[k])
-//line app/vmalert/web.qtpl:330
+//line app/vmalert/web.qtpl:335
 		qw422016.N().S(`</p>
           `)
-//line app/vmalert/web.qtpl:331
+//line app/vmalert/web.qtpl:336
 	}
-//line app/vmalert/web.qtpl:331
+//line app/vmalert/web.qtpl:336
 	qw422016.N().S(`
         </div>
       </div>
@@ -1056,17 +1096,17 @@ func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
         </div>
         <div class="col">
            <a target="_blank" href="`)
-//line app/vmalert/web.qtpl:341
+//line app/vmalert/web.qtpl:346
 	qw422016.E().S(prefix)
-//line app/vmalert/web.qtpl:341
+//line app/vmalert/web.qtpl:346
 	qw422016.N().S(`groups#group-`)
-//line app/vmalert/web.qtpl:341
+//line app/vmalert/web.qtpl:346
 	qw422016.E().S(alert.GroupID)
-//line app/vmalert/web.qtpl:341
+//line app/vmalert/web.qtpl:346
 	qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:341
+//line app/vmalert/web.qtpl:346
 	qw422016.E().S(alert.GroupID)
-//line app/vmalert/web.qtpl:341
+//line app/vmalert/web.qtpl:346
 	qw422016.N().S(`</a>
         </div>
       </div>
@@ -1078,66 +1118,66 @@ func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) {
         </div>
         <div class="col">
            <a target="_blank" href="`)
-//line app/vmalert/web.qtpl:351
+//line app/vmalert/web.qtpl:356
 	qw422016.E().S(alert.SourceLink)
-//line app/vmalert/web.qtpl:351
+//line app/vmalert/web.qtpl:356
 	qw422016.N().S(`">Link</a>
         </div>
       </div>
     </div>
     `)
-//line app/vmalert/web.qtpl:355
+//line app/vmalert/web.qtpl:360
 	tpl.StreamFooter(qw422016, r)
-//line app/vmalert/web.qtpl:355
+//line app/vmalert/web.qtpl:360
 	qw422016.N().S(`
 
 `)
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 }
 
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 func WriteAlert(qq422016 qtio422016.Writer, r *http.Request, alert *APIAlert) {
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	StreamAlert(qw422016, r, alert)
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 }
 
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 func Alert(r *http.Request, alert *APIAlert) string {
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	WriteAlert(qb422016, r, alert)
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 	return qs422016
-//line app/vmalert/web.qtpl:357
+//line app/vmalert/web.qtpl:362
 }
 
-//line app/vmalert/web.qtpl:360
+//line app/vmalert/web.qtpl:365
 func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule) {
-//line app/vmalert/web.qtpl:360
+//line app/vmalert/web.qtpl:365
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:361
+//line app/vmalert/web.qtpl:366
 	prefix := utils.Prefix(r.URL.Path)
 
-//line app/vmalert/web.qtpl:361
+//line app/vmalert/web.qtpl:366
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:362
+//line app/vmalert/web.qtpl:367
 	tpl.StreamHeader(qw422016, r, navItems, "")
-//line app/vmalert/web.qtpl:362
+//line app/vmalert/web.qtpl:367
 	qw422016.N().S(`
     `)
-//line app/vmalert/web.qtpl:364
+//line app/vmalert/web.qtpl:369
 	var labelKeys []string
 	for k := range rule.Labels {
 		labelKeys = append(labelKeys, k)
@@ -1150,28 +1190,28 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
 	}
 	sort.Strings(annotationKeys)
 
-//line app/vmalert/web.qtpl:375
+//line app/vmalert/web.qtpl:380
 	qw422016.N().S(`
     <div class="display-6 pb-3 mb-3">Rule: `)
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	qw422016.E().S(rule.Name)
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	qw422016.N().S(`<span class="ms-2 badge `)
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	if rule.Health != "ok" {
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 		qw422016.N().S(`bg-danger`)
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	} else {
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 		qw422016.N().S(` bg-warning text-dark`)
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	}
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	qw422016.E().S(rule.Health)
-//line app/vmalert/web.qtpl:376
+//line app/vmalert/web.qtpl:381
 	qw422016.N().S(`</span></div>
     <div class="container border-bottom p-2">
       <div class="row">
@@ -1180,17 +1220,17 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
         </div>
         <div class="col">
           <code><pre>`)
-//line app/vmalert/web.qtpl:383
+//line app/vmalert/web.qtpl:388
 	qw422016.E().S(rule.Query)
-//line app/vmalert/web.qtpl:383
+//line app/vmalert/web.qtpl:388
 	qw422016.N().S(`</pre></code>
         </div>
       </div>
     </div>
     `)
-//line app/vmalert/web.qtpl:387
+//line app/vmalert/web.qtpl:392
 	if rule.Type == "alerting" {
-//line app/vmalert/web.qtpl:387
+//line app/vmalert/web.qtpl:392
 		qw422016.N().S(`
     <div class="container border-bottom p-2">
       <div class="row">
@@ -1199,17 +1239,17 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
         </div>
         <div class="col">
          `)
-//line app/vmalert/web.qtpl:394
+//line app/vmalert/web.qtpl:399
 		qw422016.E().V(rule.Duration)
-//line app/vmalert/web.qtpl:394
+//line app/vmalert/web.qtpl:399
 		qw422016.N().S(` seconds
         </div>
       </div>
     </div>
     `)
-//line app/vmalert/web.qtpl:398
+//line app/vmalert/web.qtpl:403
 	}
-//line app/vmalert/web.qtpl:398
+//line app/vmalert/web.qtpl:403
 	qw422016.N().S(`
     <div class="container border-bottom p-2">
       <div class="row">
@@ -1218,31 +1258,31 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
         </div>
         <div class="col">
           `)
-//line app/vmalert/web.qtpl:405
+//line app/vmalert/web.qtpl:410
 	for _, k := range labelKeys {
-//line app/vmalert/web.qtpl:405
+//line app/vmalert/web.qtpl:410
 		qw422016.N().S(`
                 <span class="m-1 badge bg-primary">`)
-//line app/vmalert/web.qtpl:406
+//line app/vmalert/web.qtpl:411
 		qw422016.E().S(k)
-//line app/vmalert/web.qtpl:406
+//line app/vmalert/web.qtpl:411
 		qw422016.N().S(`=`)
-//line app/vmalert/web.qtpl:406
+//line app/vmalert/web.qtpl:411
 		qw422016.E().S(rule.Labels[k])
-//line app/vmalert/web.qtpl:406
+//line app/vmalert/web.qtpl:411
 		qw422016.N().S(`</span>
           `)
-//line app/vmalert/web.qtpl:407
+//line app/vmalert/web.qtpl:412
 	}
-//line app/vmalert/web.qtpl:407
+//line app/vmalert/web.qtpl:412
 	qw422016.N().S(`
         </div>
       </div>
     </div>
     `)
-//line app/vmalert/web.qtpl:411
+//line app/vmalert/web.qtpl:416
 	if rule.Type == "alerting" {
-//line app/vmalert/web.qtpl:411
+//line app/vmalert/web.qtpl:416
 		qw422016.N().S(`
     <div class="container border-bottom p-2">
       <div class="row">
@@ -1251,32 +1291,32 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
         </div>
         <div class="col">
           `)
-//line app/vmalert/web.qtpl:418
+//line app/vmalert/web.qtpl:423
 		for _, k := range annotationKeys {
-//line app/vmalert/web.qtpl:418
+//line app/vmalert/web.qtpl:423
 			qw422016.N().S(`
                 <b>`)
-//line app/vmalert/web.qtpl:419
+//line app/vmalert/web.qtpl:424
 			qw422016.E().S(k)
-//line app/vmalert/web.qtpl:419
+//line app/vmalert/web.qtpl:424
 			qw422016.N().S(`:</b><br>
                 <p>`)
-//line app/vmalert/web.qtpl:420
+//line app/vmalert/web.qtpl:425
 			qw422016.E().S(rule.Annotations[k])
-//line app/vmalert/web.qtpl:420
+//line app/vmalert/web.qtpl:425
 			qw422016.N().S(`</p>
           `)
-//line app/vmalert/web.qtpl:421
+//line app/vmalert/web.qtpl:426
 		}
-//line app/vmalert/web.qtpl:421
+//line app/vmalert/web.qtpl:426
 		qw422016.N().S(`
         </div>
       </div>
     </div>
     `)
-//line app/vmalert/web.qtpl:425
+//line app/vmalert/web.qtpl:430
 	}
-//line app/vmalert/web.qtpl:425
+//line app/vmalert/web.qtpl:430
 	qw422016.N().S(`
     <div class="container border-bottom p-2">
       <div class="row">
@@ -1285,17 +1325,17 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
         </div>
         <div class="col">
            <a target="_blank" href="`)
-//line app/vmalert/web.qtpl:432
+//line app/vmalert/web.qtpl:437
 	qw422016.E().S(prefix)
-//line app/vmalert/web.qtpl:432
+//line app/vmalert/web.qtpl:437
 	qw422016.N().S(`groups#group-`)
-//line app/vmalert/web.qtpl:432
+//line app/vmalert/web.qtpl:437
 	qw422016.E().S(rule.GroupID)
-//line app/vmalert/web.qtpl:432
+//line app/vmalert/web.qtpl:437
 	qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:432
+//line app/vmalert/web.qtpl:437
 	qw422016.E().S(rule.GroupID)
-//line app/vmalert/web.qtpl:432
+//line app/vmalert/web.qtpl:437
 	qw422016.N().S(`</a>
         </div>
       </div>
@@ -1303,9 +1343,9 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
 
     <br>
     <div class="display-6 pb-3">Last `)
-//line app/vmalert/web.qtpl:438
+//line app/vmalert/web.qtpl:443
 	qw422016.N().D(len(rule.Updates))
-//line app/vmalert/web.qtpl:438
+//line app/vmalert/web.qtpl:443
 	qw422016.N().S(` updates</span>:</div>
         <table class="table table-striped table-hover table-sm">
             <thead>
@@ -1320,201 +1360,201 @@ func StreamRuleDetails(qw422016 *qt422016.Writer, r *http.Request, rule APIRule)
             <tbody>
 
      `)
-//line app/vmalert/web.qtpl:451
+//line app/vmalert/web.qtpl:456
 	for _, u := range rule.Updates {
-//line app/vmalert/web.qtpl:451
+//line app/vmalert/web.qtpl:456
 		qw422016.N().S(`
              <tr`)
-//line app/vmalert/web.qtpl:452
+//line app/vmalert/web.qtpl:457
 		if u.err != nil {
-//line app/vmalert/web.qtpl:452
+//line app/vmalert/web.qtpl:457
 			qw422016.N().S(` class="alert-danger"`)
-//line app/vmalert/web.qtpl:452
+//line app/vmalert/web.qtpl:457
 		}
-//line app/vmalert/web.qtpl:452
+//line app/vmalert/web.qtpl:457
 		qw422016.N().S(`>
                  <td>
                     <span class="badge bg-primary rounded-pill me-3" title="Updated at">`)
-//line app/vmalert/web.qtpl:454
+//line app/vmalert/web.qtpl:459
 		qw422016.E().S(u.time.Format(time.RFC3339))
-//line app/vmalert/web.qtpl:454
+//line app/vmalert/web.qtpl:459
 		qw422016.N().S(`</span>
                  </td>
                  <td class="text-center" wi>`)
-//line app/vmalert/web.qtpl:456
+//line app/vmalert/web.qtpl:461
 		qw422016.N().D(u.samples)
-//line app/vmalert/web.qtpl:456
+//line app/vmalert/web.qtpl:461
 		qw422016.N().S(`</td>
                  <td class="text-center">`)
-//line app/vmalert/web.qtpl:457
+//line app/vmalert/web.qtpl:462
 		qw422016.N().FPrec(u.duration.Seconds(), 3)
-//line app/vmalert/web.qtpl:457
+//line app/vmalert/web.qtpl:462
 		qw422016.N().S(`s</td>
                  <td class="text-center">`)
-//line app/vmalert/web.qtpl:458
+//line app/vmalert/web.qtpl:463
 		qw422016.E().S(u.at.Format(time.RFC3339))
-//line app/vmalert/web.qtpl:458
+//line app/vmalert/web.qtpl:463
 		qw422016.N().S(`</td>
                  <td>
                     <textarea class="curl-area" rows="1" onclick="this.focus();this.select()">`)
-//line app/vmalert/web.qtpl:460
+//line app/vmalert/web.qtpl:465
 		qw422016.E().S(u.curl)
-//line app/vmalert/web.qtpl:460
+//line app/vmalert/web.qtpl:465
 		qw422016.N().S(`</textarea>
                 </td>
              </tr>
           </li>
           `)
-//line app/vmalert/web.qtpl:464
+//line app/vmalert/web.qtpl:469
 		if u.err != nil {
-//line app/vmalert/web.qtpl:464
+//line app/vmalert/web.qtpl:469
 			qw422016.N().S(`
              <tr`)
-//line app/vmalert/web.qtpl:465
+//line app/vmalert/web.qtpl:470
 			if u.err != nil {
-//line app/vmalert/web.qtpl:465
+//line app/vmalert/web.qtpl:470
 				qw422016.N().S(` class="alert-danger"`)
-//line app/vmalert/web.qtpl:465
+//line app/vmalert/web.qtpl:470
 			}
-//line app/vmalert/web.qtpl:465
+//line app/vmalert/web.qtpl:470
 			qw422016.N().S(`>
                <td colspan="5">
                    <span class="alert-danger">`)
-//line app/vmalert/web.qtpl:467
+//line app/vmalert/web.qtpl:472
 			qw422016.E().V(u.err)
-//line app/vmalert/web.qtpl:467
+//line app/vmalert/web.qtpl:472
 			qw422016.N().S(`</span>
                </td>
              </tr>
           `)
-//line app/vmalert/web.qtpl:470
+//line app/vmalert/web.qtpl:475
 		}
-//line app/vmalert/web.qtpl:470
+//line app/vmalert/web.qtpl:475
 		qw422016.N().S(`
      `)
-//line app/vmalert/web.qtpl:471
+//line app/vmalert/web.qtpl:476
 	}
-//line app/vmalert/web.qtpl:471
+//line app/vmalert/web.qtpl:476
 	qw422016.N().S(`
 
     `)
-//line app/vmalert/web.qtpl:473
+//line app/vmalert/web.qtpl:478
 	tpl.StreamFooter(qw422016, r)
-//line app/vmalert/web.qtpl:473
+//line app/vmalert/web.qtpl:478
 	qw422016.N().S(`
 `)
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 }
 
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 func WriteRuleDetails(qq422016 qtio422016.Writer, r *http.Request, rule APIRule) {
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	StreamRuleDetails(qw422016, r, rule)
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 }
 
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 func RuleDetails(r *http.Request, rule APIRule) string {
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	WriteRuleDetails(qb422016, r, rule)
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 	return qs422016
-//line app/vmalert/web.qtpl:474
+//line app/vmalert/web.qtpl:479
 }
 
-//line app/vmalert/web.qtpl:478
+//line app/vmalert/web.qtpl:483
 func streambadgeState(qw422016 *qt422016.Writer, state string) {
-//line app/vmalert/web.qtpl:478
+//line app/vmalert/web.qtpl:483
 	qw422016.N().S(`
 `)
-//line app/vmalert/web.qtpl:480
+//line app/vmalert/web.qtpl:485
 	badgeClass := "bg-warning text-dark"
 	if state == "firing" {
 		badgeClass = "bg-danger"
 	}
 
-//line app/vmalert/web.qtpl:484
+//line app/vmalert/web.qtpl:489
 	qw422016.N().S(`
 <span class="badge `)
-//line app/vmalert/web.qtpl:485
+//line app/vmalert/web.qtpl:490
 	qw422016.E().S(badgeClass)
-//line app/vmalert/web.qtpl:485
+//line app/vmalert/web.qtpl:490
 	qw422016.N().S(`">`)
-//line app/vmalert/web.qtpl:485
+//line app/vmalert/web.qtpl:490
 	qw422016.E().S(state)
-//line app/vmalert/web.qtpl:485
+//line app/vmalert/web.qtpl:490
 	qw422016.N().S(`</span>
 `)
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 }
 
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 func writebadgeState(qq422016 qtio422016.Writer, state string) {
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	streambadgeState(qw422016, state)
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 }
 
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 func badgeState(state string) string {
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	writebadgeState(qb422016, state)
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 	return qs422016
-//line app/vmalert/web.qtpl:486
+//line app/vmalert/web.qtpl:491
 }
 
-//line app/vmalert/web.qtpl:488
+//line app/vmalert/web.qtpl:493
 func streambadgeRestored(qw422016 *qt422016.Writer) {
-//line app/vmalert/web.qtpl:488
+//line app/vmalert/web.qtpl:493
 	qw422016.N().S(`
 <span class="badge bg-warning text-dark" title="Alert state was restored after the service restart from remote storage">restored</span>
 `)
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 }
 
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 func writebadgeRestored(qq422016 qtio422016.Writer) {
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	streambadgeRestored(qw422016)
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	qt422016.ReleaseWriter(qw422016)
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 }
 
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 func badgeRestored() string {
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	qb422016 := qt422016.AcquireByteBuffer()
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	writebadgeRestored(qb422016)
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	qs422016 := string(qb422016.B)
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	qt422016.ReleaseByteBuffer(qb422016)
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 	return qs422016
-//line app/vmalert/web.qtpl:490
+//line app/vmalert/web.qtpl:495
 }