// Code generated by qtc from "web.qtpl". DO NOT EDIT. // See https://github.com/valyala/quicktemplate for details. //line app/vmalert/web.qtpl:1 package main //line app/vmalert/web.qtpl:3 import ( "net/http" "sort" "time" "github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/notifier" "github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/tpl" "github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/utils" ) //line app/vmalert/web.qtpl:14 import ( qtio422016 "io" qt422016 "github.com/valyala/quicktemplate" ) //line app/vmalert/web.qtpl:14 var ( _ = qtio422016.Copy _ = qt422016.AcquireByteBuffer ) //line app/vmalert/web.qtpl:14 func StreamWelcome(qw422016 *qt422016.Writer, r *http.Request) { //line app/vmalert/web.qtpl:14 qw422016.N().S(` `) //line app/vmalert/web.qtpl:15 tpl.StreamHeader(qw422016, r, navItems, "vmalert") //line app/vmalert/web.qtpl:15 qw422016.N().S(` <p> API:<br> `) //line app/vmalert/web.qtpl:18 for _, p := range apiLinks { //line app/vmalert/web.qtpl:18 qw422016.N().S(` `) //line app/vmalert/web.qtpl:20 p, doc := p[0], p[1] //line app/vmalert/web.qtpl:21 qw422016.N().S(` <a href="`) //line app/vmalert/web.qtpl:22 qw422016.E().S(p) //line app/vmalert/web.qtpl:22 qw422016.N().S(`">`) //line app/vmalert/web.qtpl:22 qw422016.E().S(p) //line app/vmalert/web.qtpl:22 qw422016.N().S(`</a> - `) //line app/vmalert/web.qtpl:22 qw422016.E().S(doc) //line app/vmalert/web.qtpl:22 qw422016.N().S(`<br/> `) //line app/vmalert/web.qtpl:23 } //line app/vmalert/web.qtpl:23 qw422016.N().S(` </p> `) //line app/vmalert/web.qtpl:25 tpl.StreamFooter(qw422016, r) //line app/vmalert/web.qtpl:25 qw422016.N().S(` `) //line app/vmalert/web.qtpl:26 } //line app/vmalert/web.qtpl:26 func WriteWelcome(qq422016 qtio422016.Writer, r *http.Request) { //line app/vmalert/web.qtpl:26 qw422016 := qt422016.AcquireWriter(qq422016) //line app/vmalert/web.qtpl:26 StreamWelcome(qw422016, r) //line app/vmalert/web.qtpl:26 qt422016.ReleaseWriter(qw422016) //line app/vmalert/web.qtpl:26 } //line app/vmalert/web.qtpl:26 func Welcome(r *http.Request) string { //line app/vmalert/web.qtpl:26 qb422016 := qt422016.AcquireByteBuffer() //line app/vmalert/web.qtpl:26 WriteWelcome(qb422016, r) //line app/vmalert/web.qtpl:26 qs422016 := string(qb422016.B) //line app/vmalert/web.qtpl:26 qt422016.ReleaseByteBuffer(qb422016) //line app/vmalert/web.qtpl:26 return qs422016 //line app/vmalert/web.qtpl:26 } //line app/vmalert/web.qtpl:28 func StreamListGroups(qw422016 *qt422016.Writer, r *http.Request, groups []APIGroup) { //line app/vmalert/web.qtpl:28 qw422016.N().S(` `) //line app/vmalert/web.qtpl:29 tpl.StreamHeader(qw422016, r, navItems, "Groups") //line app/vmalert/web.qtpl:29 qw422016.N().S(` `) //line app/vmalert/web.qtpl:30 if len(groups) > 0 { //line app/vmalert/web.qtpl:30 qw422016.N().S(` `) //line app/vmalert/web.qtpl:32 rOk := make(map[string]int) rNotOk := make(map[string]int) for _, g := range groups { for _, r := range g.Rules { if r.LastError != "" { rNotOk[g.Name]++ } else { rOk[g.Name]++ } } } //line app/vmalert/web.qtpl:43 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:46 for _, g := range groups { //line app/vmalert/web.qtpl:46 qw422016.N().S(` <div class="group-heading`) //line app/vmalert/web.qtpl:47 if rNotOk[g.Name] > 0 { //line app/vmalert/web.qtpl:47 qw422016.N().S(` alert-danger`) //line app/vmalert/web.qtpl:47 } //line app/vmalert/web.qtpl:47 qw422016.N().S(`" data-bs-target="rules-`) //line app/vmalert/web.qtpl:47 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:47 qw422016.N().S(`"> <span class="anchor" id="group-`) //line app/vmalert/web.qtpl:48 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:48 qw422016.N().S(`"></span> <a href="#group-`) //line app/vmalert/web.qtpl:49 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:49 qw422016.N().S(`">`) //line app/vmalert/web.qtpl:49 qw422016.E().S(g.Name) //line app/vmalert/web.qtpl:49 if g.Type != "prometheus" { //line app/vmalert/web.qtpl:49 qw422016.N().S(` (`) //line app/vmalert/web.qtpl:49 qw422016.E().S(g.Type) //line app/vmalert/web.qtpl:49 qw422016.N().S(`)`) //line app/vmalert/web.qtpl:49 } //line app/vmalert/web.qtpl:49 qw422016.N().S(` (every `) //line app/vmalert/web.qtpl:49 qw422016.N().FPrec(g.Interval, 0) //line app/vmalert/web.qtpl:49 qw422016.N().S(`s)</a> `) //line app/vmalert/web.qtpl:50 if rNotOk[g.Name] > 0 { //line app/vmalert/web.qtpl:50 qw422016.N().S(`<span class="badge bg-danger" title="Number of rules with status Error">`) //line app/vmalert/web.qtpl:50 qw422016.N().D(rNotOk[g.Name]) //line app/vmalert/web.qtpl:50 qw422016.N().S(`</span> `) //line app/vmalert/web.qtpl:50 } //line app/vmalert/web.qtpl:50 qw422016.N().S(` <span class="badge bg-success" title="Number of rules withs status Ok">`) //line app/vmalert/web.qtpl:51 qw422016.N().D(rOk[g.Name]) //line app/vmalert/web.qtpl:51 qw422016.N().S(`</span> <p class="fs-6 fw-lighter">`) //line app/vmalert/web.qtpl:52 qw422016.E().S(g.File) //line app/vmalert/web.qtpl:52 qw422016.N().S(`</p> `) //line app/vmalert/web.qtpl:53 if len(g.Params) > 0 { //line app/vmalert/web.qtpl:53 qw422016.N().S(` <div class="fs-6 fw-lighter">Extra params `) //line app/vmalert/web.qtpl:55 for _, param := range g.Params { //line app/vmalert/web.qtpl:55 qw422016.N().S(` <span class="float-left badge bg-primary">`) //line app/vmalert/web.qtpl:56 qw422016.E().S(param) //line app/vmalert/web.qtpl:56 qw422016.N().S(`</span> `) //line app/vmalert/web.qtpl:57 } //line app/vmalert/web.qtpl:57 qw422016.N().S(` </div> `) //line app/vmalert/web.qtpl:59 } //line app/vmalert/web.qtpl:59 qw422016.N().S(` </div> <div class="collapse" id="rules-`) //line app/vmalert/web.qtpl:61 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:61 qw422016.N().S(`"> <table class="table table-striped table-hover table-sm"> <thead> <tr> <th scope="col" style="width: 60%">Rule</th> <th scope="col" style="width: 20%" class="text-center" title="How many samples were produced by the rule">Samples</th> <th scope="col" style="width: 20%" class="text-center" title="How many seconds ago rule was executed">Updated</th> </tr> </thead> <tbody> `) //line app/vmalert/web.qtpl:71 for _, r := range g.Rules { //line app/vmalert/web.qtpl:71 qw422016.N().S(` <tr`) //line app/vmalert/web.qtpl:72 if r.LastError != "" { //line app/vmalert/web.qtpl:72 qw422016.N().S(` class="alert-danger"`) //line app/vmalert/web.qtpl:72 } //line app/vmalert/web.qtpl:72 qw422016.N().S(`> <td> <div class="row"> <div class="col-12 mb-2"> `) //line app/vmalert/web.qtpl:76 if r.Type == "alerting" { //line app/vmalert/web.qtpl:76 qw422016.N().S(` <b>alert:</b> `) //line app/vmalert/web.qtpl:77 qw422016.E().S(r.Name) //line app/vmalert/web.qtpl:77 qw422016.N().S(` (for: `) //line app/vmalert/web.qtpl:77 qw422016.E().V(r.Duration) //line app/vmalert/web.qtpl:77 qw422016.N().S(` seconds) `) //line app/vmalert/web.qtpl:78 } else { //line app/vmalert/web.qtpl:78 qw422016.N().S(` <b>record:</b> `) //line app/vmalert/web.qtpl:79 qw422016.E().S(r.Name) //line app/vmalert/web.qtpl:79 qw422016.N().S(` `) //line app/vmalert/web.qtpl:80 } //line app/vmalert/web.qtpl:80 qw422016.N().S(` </div> <div class="col-12"> <code><pre>`) //line app/vmalert/web.qtpl:83 qw422016.E().S(r.Query) //line app/vmalert/web.qtpl:83 qw422016.N().S(`</pre></code> </div> <div class="col-12 mb-2"> `) //line app/vmalert/web.qtpl:86 if len(r.Labels) > 0 { //line app/vmalert/web.qtpl:86 qw422016.N().S(` <b>Labels:</b>`) //line app/vmalert/web.qtpl:86 } //line app/vmalert/web.qtpl:86 qw422016.N().S(` `) //line app/vmalert/web.qtpl:87 for k, v := range r.Labels { //line app/vmalert/web.qtpl:87 qw422016.N().S(` <span class="ms-1 badge bg-primary">`) //line app/vmalert/web.qtpl:88 qw422016.E().S(k) //line app/vmalert/web.qtpl:88 qw422016.N().S(`=`) //line app/vmalert/web.qtpl:88 qw422016.E().S(v) //line app/vmalert/web.qtpl:88 qw422016.N().S(`</span> `) //line app/vmalert/web.qtpl:89 } //line app/vmalert/web.qtpl:89 qw422016.N().S(` </div> `) //line app/vmalert/web.qtpl:91 if r.LastError != "" { //line app/vmalert/web.qtpl:91 qw422016.N().S(` <div class="col-12"> <b>Error:</b> <div class="error-cell"> `) //line app/vmalert/web.qtpl:95 qw422016.E().S(r.LastError) //line app/vmalert/web.qtpl:95 qw422016.N().S(` </div> </div> `) //line app/vmalert/web.qtpl:98 } //line app/vmalert/web.qtpl:98 qw422016.N().S(` </div> </td> <td class="text-center">`) //line app/vmalert/web.qtpl:101 qw422016.N().D(r.LastSamples) //line app/vmalert/web.qtpl:101 qw422016.N().S(`</td> <td class="text-center">`) //line app/vmalert/web.qtpl:102 qw422016.N().FPrec(time.Since(r.LastEvaluation).Seconds(), 3) //line app/vmalert/web.qtpl:102 qw422016.N().S(`s ago</td> </tr> `) //line app/vmalert/web.qtpl:104 } //line app/vmalert/web.qtpl:104 qw422016.N().S(` </tbody> </table> </div> `) //line app/vmalert/web.qtpl:108 } //line app/vmalert/web.qtpl:108 qw422016.N().S(` `) //line app/vmalert/web.qtpl:110 } else { //line app/vmalert/web.qtpl:110 qw422016.N().S(` <div> <p>No items...</p> </div> `) //line app/vmalert/web.qtpl:114 } //line app/vmalert/web.qtpl:114 qw422016.N().S(` `) //line app/vmalert/web.qtpl:116 tpl.StreamFooter(qw422016, r) //line app/vmalert/web.qtpl:116 qw422016.N().S(` `) //line app/vmalert/web.qtpl:118 } //line app/vmalert/web.qtpl:118 func WriteListGroups(qq422016 qtio422016.Writer, r *http.Request, groups []APIGroup) { //line app/vmalert/web.qtpl:118 qw422016 := qt422016.AcquireWriter(qq422016) //line app/vmalert/web.qtpl:118 StreamListGroups(qw422016, r, groups) //line app/vmalert/web.qtpl:118 qt422016.ReleaseWriter(qw422016) //line app/vmalert/web.qtpl:118 } //line app/vmalert/web.qtpl:118 func ListGroups(r *http.Request, groups []APIGroup) string { //line app/vmalert/web.qtpl:118 qb422016 := qt422016.AcquireByteBuffer() //line app/vmalert/web.qtpl:118 WriteListGroups(qb422016, r, groups) //line app/vmalert/web.qtpl:118 qs422016 := string(qb422016.B) //line app/vmalert/web.qtpl:118 qt422016.ReleaseByteBuffer(qb422016) //line app/vmalert/web.qtpl:118 return qs422016 //line app/vmalert/web.qtpl:118 } //line app/vmalert/web.qtpl:121 func StreamListAlerts(qw422016 *qt422016.Writer, r *http.Request, groupAlerts []GroupAlerts) { //line app/vmalert/web.qtpl:121 qw422016.N().S(` `) //line app/vmalert/web.qtpl:122 prefix := utils.Prefix(r.URL.Path) //line app/vmalert/web.qtpl:122 qw422016.N().S(` `) //line app/vmalert/web.qtpl:123 tpl.StreamHeader(qw422016, r, navItems, "Alerts") //line app/vmalert/web.qtpl:123 qw422016.N().S(` `) //line app/vmalert/web.qtpl:124 if len(groupAlerts) > 0 { //line app/vmalert/web.qtpl:124 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:127 for _, ga := range groupAlerts { //line app/vmalert/web.qtpl:127 qw422016.N().S(` `) //line app/vmalert/web.qtpl:128 g := ga.Group //line app/vmalert/web.qtpl:128 qw422016.N().S(` <div class="group-heading alert-danger" data-bs-target="rules-`) //line app/vmalert/web.qtpl:129 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:129 qw422016.N().S(`"> <span class="anchor" id="group-`) //line app/vmalert/web.qtpl:130 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:130 qw422016.N().S(`"></span> <a href="#group-`) //line app/vmalert/web.qtpl:131 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:131 qw422016.N().S(`">`) //line app/vmalert/web.qtpl:131 qw422016.E().S(g.Name) //line app/vmalert/web.qtpl:131 if g.Type != "prometheus" { //line app/vmalert/web.qtpl:131 qw422016.N().S(` (`) //line app/vmalert/web.qtpl:131 qw422016.E().S(g.Type) //line app/vmalert/web.qtpl:131 qw422016.N().S(`)`) //line app/vmalert/web.qtpl:131 } //line app/vmalert/web.qtpl:131 qw422016.N().S(`</a> <span class="badge bg-danger" title="Number of active alerts">`) //line app/vmalert/web.qtpl:132 qw422016.N().D(len(ga.Alerts)) //line app/vmalert/web.qtpl:132 qw422016.N().S(`</span> <br> <p class="fs-6 fw-lighter">`) //line app/vmalert/web.qtpl:134 qw422016.E().S(g.File) //line app/vmalert/web.qtpl:134 qw422016.N().S(`</p> </div> `) //line app/vmalert/web.qtpl:137 var keys []string alertsByRule := make(map[string][]*APIAlert) for _, alert := range ga.Alerts { if len(alertsByRule[alert.RuleID]) < 1 { keys = append(keys, alert.RuleID) } alertsByRule[alert.RuleID] = append(alertsByRule[alert.RuleID], alert) } sort.Strings(keys) //line app/vmalert/web.qtpl:146 qw422016.N().S(` <div class="collapse" id="rules-`) //line app/vmalert/web.qtpl:147 qw422016.E().S(g.ID) //line app/vmalert/web.qtpl:147 qw422016.N().S(`"> `) //line app/vmalert/web.qtpl:148 for _, ruleID := range keys { //line app/vmalert/web.qtpl:148 qw422016.N().S(` `) //line app/vmalert/web.qtpl:150 defaultAR := alertsByRule[ruleID][0] var labelKeys []string for k := range defaultAR.Labels { labelKeys = append(labelKeys, k) } sort.Strings(labelKeys) //line app/vmalert/web.qtpl:156 qw422016.N().S(` <br> <b>alert:</b> `) //line app/vmalert/web.qtpl:158 qw422016.E().S(defaultAR.Name) //line app/vmalert/web.qtpl:158 qw422016.N().S(` (`) //line app/vmalert/web.qtpl:158 qw422016.N().D(len(alertsByRule[ruleID])) //line app/vmalert/web.qtpl:158 qw422016.N().S(`) | <span><a target="_blank" href="`) //line app/vmalert/web.qtpl:159 qw422016.E().S(defaultAR.SourceLink) //line app/vmalert/web.qtpl:159 qw422016.N().S(`">Source</a></span> <br> <b>expr:</b><code><pre>`) //line app/vmalert/web.qtpl:161 qw422016.E().S(defaultAR.Expression) //line app/vmalert/web.qtpl:161 qw422016.N().S(`</pre></code> <table class="table table-striped table-hover table-sm"> <thead> <tr> <th scope="col">Labels</th> <th scope="col">State</th> <th scope="col">Active at</th> <th scope="col">Value</th> <th scope="col">Link</th> </tr> </thead> <tbody> `) //line app/vmalert/web.qtpl:173 for _, ar := range alertsByRule[ruleID] { //line app/vmalert/web.qtpl:173 qw422016.N().S(` <tr> <td> `) //line app/vmalert/web.qtpl:176 for _, k := range labelKeys { //line app/vmalert/web.qtpl:176 qw422016.N().S(` <span class="ms-1 badge bg-primary">`) //line app/vmalert/web.qtpl:177 qw422016.E().S(k) //line app/vmalert/web.qtpl:177 qw422016.N().S(`=`) //line app/vmalert/web.qtpl:177 qw422016.E().S(ar.Labels[k]) //line app/vmalert/web.qtpl:177 qw422016.N().S(`</span> `) //line app/vmalert/web.qtpl:178 } //line app/vmalert/web.qtpl:178 qw422016.N().S(` </td> <td>`) //line app/vmalert/web.qtpl:180 streambadgeState(qw422016, ar.State) //line app/vmalert/web.qtpl:180 qw422016.N().S(`</td> <td> `) //line app/vmalert/web.qtpl:182 qw422016.E().S(ar.ActiveAt.Format("2006-01-02T15:04:05Z07:00")) //line app/vmalert/web.qtpl:182 qw422016.N().S(` `) //line app/vmalert/web.qtpl:183 if ar.Restored { //line app/vmalert/web.qtpl:183 streambadgeRestored(qw422016) //line app/vmalert/web.qtpl:183 } //line app/vmalert/web.qtpl:183 qw422016.N().S(` </td> <td>`) //line app/vmalert/web.qtpl:185 qw422016.E().S(ar.Value) //line app/vmalert/web.qtpl:185 qw422016.N().S(`</td> <td> <a href="`) //line app/vmalert/web.qtpl:187 qw422016.E().S(prefix + ar.WebLink()) //line app/vmalert/web.qtpl:187 qw422016.N().S(`">Details</a> </td> </tr> `) //line app/vmalert/web.qtpl:190 } //line app/vmalert/web.qtpl:190 qw422016.N().S(` </tbody> </table> `) //line app/vmalert/web.qtpl:193 } //line app/vmalert/web.qtpl:193 qw422016.N().S(` </div> <br> `) //line app/vmalert/web.qtpl:196 } //line app/vmalert/web.qtpl:196 qw422016.N().S(` `) //line app/vmalert/web.qtpl:198 } else { //line app/vmalert/web.qtpl:198 qw422016.N().S(` <div> <p>No items...</p> </div> `) //line app/vmalert/web.qtpl:202 } //line app/vmalert/web.qtpl:202 qw422016.N().S(` `) //line app/vmalert/web.qtpl:204 tpl.StreamFooter(qw422016, r) //line app/vmalert/web.qtpl:204 qw422016.N().S(` `) //line app/vmalert/web.qtpl:206 } //line app/vmalert/web.qtpl:206 func WriteListAlerts(qq422016 qtio422016.Writer, r *http.Request, groupAlerts []GroupAlerts) { //line app/vmalert/web.qtpl:206 qw422016 := qt422016.AcquireWriter(qq422016) //line app/vmalert/web.qtpl:206 StreamListAlerts(qw422016, r, groupAlerts) //line app/vmalert/web.qtpl:206 qt422016.ReleaseWriter(qw422016) //line app/vmalert/web.qtpl:206 } //line app/vmalert/web.qtpl:206 func ListAlerts(r *http.Request, groupAlerts []GroupAlerts) string { //line app/vmalert/web.qtpl:206 qb422016 := qt422016.AcquireByteBuffer() //line app/vmalert/web.qtpl:206 WriteListAlerts(qb422016, r, groupAlerts) //line app/vmalert/web.qtpl:206 qs422016 := string(qb422016.B) //line app/vmalert/web.qtpl:206 qt422016.ReleaseByteBuffer(qb422016) //line app/vmalert/web.qtpl:206 return qs422016 //line app/vmalert/web.qtpl:206 } //line app/vmalert/web.qtpl:208 func StreamListTargets(qw422016 *qt422016.Writer, r *http.Request, targets map[notifier.TargetType][]notifier.Target) { //line app/vmalert/web.qtpl:208 qw422016.N().S(` `) //line app/vmalert/web.qtpl:209 tpl.StreamHeader(qw422016, r, navItems, "Notifiers") //line app/vmalert/web.qtpl:209 qw422016.N().S(` `) //line app/vmalert/web.qtpl:210 if len(targets) > 0 { //line app/vmalert/web.qtpl:210 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:215 var keys []string for key := range targets { keys = append(keys, string(key)) } sort.Strings(keys) //line app/vmalert/web.qtpl:220 qw422016.N().S(` `) //line app/vmalert/web.qtpl:222 for i := range keys { //line app/vmalert/web.qtpl:222 qw422016.N().S(` `) //line app/vmalert/web.qtpl:223 typeK, ns := keys[i], targets[notifier.TargetType(keys[i])] count := len(ns) //line app/vmalert/web.qtpl:225 qw422016.N().S(` <div class="group-heading data-bs-target="rules-`) //line app/vmalert/web.qtpl:226 qw422016.E().S(typeK) //line app/vmalert/web.qtpl:226 qw422016.N().S(`"> <span class="anchor" id="notifiers-`) //line app/vmalert/web.qtpl:227 qw422016.E().S(typeK) //line app/vmalert/web.qtpl:227 qw422016.N().S(`"></span> <a href="#notifiers-`) //line app/vmalert/web.qtpl:228 qw422016.E().S(typeK) //line app/vmalert/web.qtpl:228 qw422016.N().S(`">`) //line app/vmalert/web.qtpl:228 qw422016.E().S(typeK) //line app/vmalert/web.qtpl:228 qw422016.N().S(` (`) //line app/vmalert/web.qtpl:228 qw422016.N().D(count) //line app/vmalert/web.qtpl:228 qw422016.N().S(`)</a> </div> <div class="collapse show" id="notifiers-`) //line app/vmalert/web.qtpl:230 qw422016.E().S(typeK) //line app/vmalert/web.qtpl:230 qw422016.N().S(`"> <table class="table table-striped table-hover table-sm"> <thead> <tr> <th scope="col">Labels</th> <th scope="col">Address</th> </tr> </thead> <tbody> `) //line app/vmalert/web.qtpl:239 for _, n := range ns { //line app/vmalert/web.qtpl:239 qw422016.N().S(` <tr> <td> `) //line app/vmalert/web.qtpl:242 for _, l := range n.Labels { //line app/vmalert/web.qtpl:242 qw422016.N().S(` <span class="ms-1 badge bg-primary">`) //line app/vmalert/web.qtpl:243 qw422016.E().S(l.Name) //line app/vmalert/web.qtpl:243 qw422016.N().S(`=`) //line app/vmalert/web.qtpl:243 qw422016.E().S(l.Value) //line app/vmalert/web.qtpl:243 qw422016.N().S(`</span> `) //line app/vmalert/web.qtpl:244 } //line app/vmalert/web.qtpl:244 qw422016.N().S(` </td> <td>`) //line app/vmalert/web.qtpl:246 qw422016.E().S(n.Notifier.Addr()) //line app/vmalert/web.qtpl:246 qw422016.N().S(`</td> </tr> `) //line app/vmalert/web.qtpl:248 } //line app/vmalert/web.qtpl:248 qw422016.N().S(` </tbody> </table> </div> `) //line app/vmalert/web.qtpl:252 } //line app/vmalert/web.qtpl:252 qw422016.N().S(` `) //line app/vmalert/web.qtpl:254 } else { //line app/vmalert/web.qtpl:254 qw422016.N().S(` <div> <p>No items...</p> </div> `) //line app/vmalert/web.qtpl:258 } //line app/vmalert/web.qtpl:258 qw422016.N().S(` `) //line app/vmalert/web.qtpl:260 tpl.StreamFooter(qw422016, r) //line app/vmalert/web.qtpl:260 qw422016.N().S(` `) //line app/vmalert/web.qtpl:262 } //line app/vmalert/web.qtpl:262 func WriteListTargets(qq422016 qtio422016.Writer, r *http.Request, targets map[notifier.TargetType][]notifier.Target) { //line app/vmalert/web.qtpl:262 qw422016 := qt422016.AcquireWriter(qq422016) //line app/vmalert/web.qtpl:262 StreamListTargets(qw422016, r, targets) //line app/vmalert/web.qtpl:262 qt422016.ReleaseWriter(qw422016) //line app/vmalert/web.qtpl:262 } //line app/vmalert/web.qtpl:262 func ListTargets(r *http.Request, targets map[notifier.TargetType][]notifier.Target) string { //line app/vmalert/web.qtpl:262 qb422016 := qt422016.AcquireByteBuffer() //line app/vmalert/web.qtpl:262 WriteListTargets(qb422016, r, targets) //line app/vmalert/web.qtpl:262 qs422016 := string(qb422016.B) //line app/vmalert/web.qtpl:262 qt422016.ReleaseByteBuffer(qb422016) //line app/vmalert/web.qtpl:262 return qs422016 //line app/vmalert/web.qtpl:262 } //line app/vmalert/web.qtpl:264 func StreamAlert(qw422016 *qt422016.Writer, r *http.Request, alert *APIAlert) { //line app/vmalert/web.qtpl:264 qw422016.N().S(` `) //line app/vmalert/web.qtpl:265 prefix := utils.Prefix(r.URL.Path) //line app/vmalert/web.qtpl:265 qw422016.N().S(` `) //line app/vmalert/web.qtpl:266 tpl.StreamHeader(qw422016, r, navItems, "") //line app/vmalert/web.qtpl:266 qw422016.N().S(` `) //line app/vmalert/web.qtpl:268 var labelKeys []string for k := range alert.Labels { labelKeys = append(labelKeys, k) } sort.Strings(labelKeys) var annotationKeys []string for k := range alert.Annotations { annotationKeys = append(annotationKeys, k) } sort.Strings(annotationKeys) //line app/vmalert/web.qtpl:279 qw422016.N().S(` <div class="display-6 pb-3 mb-3">`) //line app/vmalert/web.qtpl:280 qw422016.E().S(alert.Name) //line app/vmalert/web.qtpl:280 qw422016.N().S(`<span class="ms-2 badge `) //line app/vmalert/web.qtpl:280 if alert.State == "firing" { //line app/vmalert/web.qtpl:280 qw422016.N().S(`bg-danger`) //line app/vmalert/web.qtpl:280 } else { //line app/vmalert/web.qtpl:280 qw422016.N().S(` bg-warning text-dark`) //line app/vmalert/web.qtpl:280 } //line app/vmalert/web.qtpl:280 qw422016.N().S(`">`) //line app/vmalert/web.qtpl:280 qw422016.E().S(alert.State) //line app/vmalert/web.qtpl:280 qw422016.N().S(`</span></div> <div class="container border-bottom p-2"> <div class="row"> <div class="col-2"> Active at </div> <div class="col"> `) //line app/vmalert/web.qtpl:287 qw422016.E().S(alert.ActiveAt.Format("2006-01-02T15:04:05Z07:00")) //line app/vmalert/web.qtpl:287 qw422016.N().S(` </div> </div> </div> <div class="container border-bottom p-2"> <div class="row"> <div class="col-2"> Expr </div> <div class="col"> <code><pre>`) //line app/vmalert/web.qtpl:297 qw422016.E().S(alert.Expression) //line app/vmalert/web.qtpl:297 qw422016.N().S(`</pre></code> </div> </div> </div> <div class="container border-bottom p-2"> <div class="row"> <div class="col-2"> Labels </div> <div class="col"> `) //line app/vmalert/web.qtpl:307 for _, k := range labelKeys { //line app/vmalert/web.qtpl:307 qw422016.N().S(` <span class="m-1 badge bg-primary">`) //line app/vmalert/web.qtpl:308 qw422016.E().S(k) //line app/vmalert/web.qtpl:308 qw422016.N().S(`=`) //line app/vmalert/web.qtpl:308 qw422016.E().S(alert.Labels[k]) //line app/vmalert/web.qtpl:308 qw422016.N().S(`</span> `) //line app/vmalert/web.qtpl:309 } //line app/vmalert/web.qtpl:309 qw422016.N().S(` </div> </div> </div> <div class="container border-bottom p-2"> <div class="row"> <div class="col-2"> Annotations </div> <div class="col"> `) //line app/vmalert/web.qtpl:319 for _, k := range annotationKeys { //line app/vmalert/web.qtpl:319 qw422016.N().S(` <b>`) //line app/vmalert/web.qtpl:320 qw422016.E().S(k) //line app/vmalert/web.qtpl:320 qw422016.N().S(`:</b><br> <p>`) //line app/vmalert/web.qtpl:321 qw422016.E().S(alert.Annotations[k]) //line app/vmalert/web.qtpl:321 qw422016.N().S(`</p> `) //line app/vmalert/web.qtpl:322 } //line app/vmalert/web.qtpl:322 qw422016.N().S(` </div> </div> </div> <div class="container border-bottom p-2"> <div class="row"> <div class="col-2"> Group </div> <div class="col"> <a target="_blank" href="`) //line app/vmalert/web.qtpl:332 qw422016.E().S(prefix) //line app/vmalert/web.qtpl:332 qw422016.N().S(`groups#group-`) //line app/vmalert/web.qtpl:332 qw422016.E().S(alert.GroupID) //line app/vmalert/web.qtpl:332 qw422016.N().S(`">`) //line app/vmalert/web.qtpl:332 qw422016.E().S(alert.GroupID) //line app/vmalert/web.qtpl:332 qw422016.N().S(`</a> </div> </div> </div> <div class="container border-bottom p-2"> <div class="row"> <div class="col-2"> Source link </div> <div class="col"> <a target="_blank" href="`) //line app/vmalert/web.qtpl:342 qw422016.E().S(alert.SourceLink) //line app/vmalert/web.qtpl:342 qw422016.N().S(`">Link</a> </div> </div> </div> `) //line app/vmalert/web.qtpl:346 tpl.StreamFooter(qw422016, r) //line app/vmalert/web.qtpl:346 qw422016.N().S(` `) //line app/vmalert/web.qtpl:348 } //line app/vmalert/web.qtpl:348 func WriteAlert(qq422016 qtio422016.Writer, r *http.Request, alert *APIAlert) { //line app/vmalert/web.qtpl:348 qw422016 := qt422016.AcquireWriter(qq422016) //line app/vmalert/web.qtpl:348 StreamAlert(qw422016, r, alert) //line app/vmalert/web.qtpl:348 qt422016.ReleaseWriter(qw422016) //line app/vmalert/web.qtpl:348 } //line app/vmalert/web.qtpl:348 func Alert(r *http.Request, alert *APIAlert) string { //line app/vmalert/web.qtpl:348 qb422016 := qt422016.AcquireByteBuffer() //line app/vmalert/web.qtpl:348 WriteAlert(qb422016, r, alert) //line app/vmalert/web.qtpl:348 qs422016 := string(qb422016.B) //line app/vmalert/web.qtpl:348 qt422016.ReleaseByteBuffer(qb422016) //line app/vmalert/web.qtpl:348 return qs422016 //line app/vmalert/web.qtpl:348 } //line app/vmalert/web.qtpl:350 func streambadgeState(qw422016 *qt422016.Writer, state string) { //line app/vmalert/web.qtpl:350 qw422016.N().S(` `) //line app/vmalert/web.qtpl:352 badgeClass := "bg-warning text-dark" if state == "firing" { badgeClass = "bg-danger" } //line app/vmalert/web.qtpl:356 qw422016.N().S(` <span class="badge `) //line app/vmalert/web.qtpl:357 qw422016.E().S(badgeClass) //line app/vmalert/web.qtpl:357 qw422016.N().S(`">`) //line app/vmalert/web.qtpl:357 qw422016.E().S(state) //line app/vmalert/web.qtpl:357 qw422016.N().S(`</span> `) //line app/vmalert/web.qtpl:358 } //line app/vmalert/web.qtpl:358 func writebadgeState(qq422016 qtio422016.Writer, state string) { //line app/vmalert/web.qtpl:358 qw422016 := qt422016.AcquireWriter(qq422016) //line app/vmalert/web.qtpl:358 streambadgeState(qw422016, state) //line app/vmalert/web.qtpl:358 qt422016.ReleaseWriter(qw422016) //line app/vmalert/web.qtpl:358 } //line app/vmalert/web.qtpl:358 func badgeState(state string) string { //line app/vmalert/web.qtpl:358 qb422016 := qt422016.AcquireByteBuffer() //line app/vmalert/web.qtpl:358 writebadgeState(qb422016, state) //line app/vmalert/web.qtpl:358 qs422016 := string(qb422016.B) //line app/vmalert/web.qtpl:358 qt422016.ReleaseByteBuffer(qb422016) //line app/vmalert/web.qtpl:358 return qs422016 //line app/vmalert/web.qtpl:358 } //line app/vmalert/web.qtpl:360 func streambadgeRestored(qw422016 *qt422016.Writer) { //line app/vmalert/web.qtpl:360 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:362 } //line app/vmalert/web.qtpl:362 func writebadgeRestored(qq422016 qtio422016.Writer) { //line app/vmalert/web.qtpl:362 qw422016 := qt422016.AcquireWriter(qq422016) //line app/vmalert/web.qtpl:362 streambadgeRestored(qw422016) //line app/vmalert/web.qtpl:362 qt422016.ReleaseWriter(qw422016) //line app/vmalert/web.qtpl:362 } //line app/vmalert/web.qtpl:362 func badgeRestored() string { //line app/vmalert/web.qtpl:362 qb422016 := qt422016.AcquireByteBuffer() //line app/vmalert/web.qtpl:362 writebadgeRestored(qb422016) //line app/vmalert/web.qtpl:362 qs422016 := string(qb422016.B) //line app/vmalert/web.qtpl:362 qt422016.ReleaseByteBuffer(qb422016) //line app/vmalert/web.qtpl:362 return qs422016 //line app/vmalert/web.qtpl:362 }