2021-09-07 19:39:22 +00:00
// Code generated by qtc from "web.qtpl". DO NOT EDIT.
// See https://github.com/valyala/quicktemplate for details.
2022-05-04 17:26:38 +00:00
//line app/vmalert/web.qtpl:1
2021-09-07 19:39:22 +00:00
package main
2022-05-04 17:26:38 +00:00
//line app/vmalert/web.qtpl:3
2021-09-07 19:39:22 +00:00
import (
2022-07-06 08:46:01 +00:00
"net/http"
2021-09-07 19:39:22 +00:00
"sort"
"time"
2022-02-02 12:11:41 +00:00
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/notifier"
2021-09-07 19:39:22 +00:00
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/tpl"
2022-07-08 08:26:13 +00:00
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmalert/utils"
2021-09-07 19:39:22 +00:00
)
2022-07-06 08:46:01 +00:00
//line app/vmalert/web.qtpl:14
2021-09-07 19:39:22 +00:00
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
2022-07-06 08:46:01 +00:00
//line app/vmalert/web.qtpl:14
2021-09-07 19:39:22 +00:00
var (
_ = qtio422016 . Copy
_ = qt422016 . AcquireByteBuffer
)
2022-05-04 17:26:38 +00:00
//line app/vmalert/web.qtpl:14
2022-07-06 08:46:01 +00:00
func StreamWelcome ( qw422016 * qt422016 . Writer , r * http . Request ) {
2022-05-04 17:26:38 +00:00
//line app/vmalert/web.qtpl:14
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2022-07-06 08:46:01 +00:00
` )
//line app/vmalert/web.qtpl:15
2023-08-07 19:58:40 +00:00
tpl . StreamHeader ( qw422016 , r , navItems , "vmalert" , getLastConfigError ( ) )
2022-07-06 08:46:01 +00:00
//line app/vmalert/web.qtpl:15
qw422016 . N ( ) . S ( `
2021-09-07 19:39:22 +00:00
< p >
API : < br >
` )
2022-07-06 08:46:01 +00:00
//line app/vmalert/web.qtpl:18
2021-09-21 11:41:01 +00:00
for _ , p := range apiLinks {
2022-07-06 08:46:01 +00:00
//line app/vmalert/web.qtpl:18
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:19
2021-09-07 19:39:22 +00:00
p , doc := p [ 0 ] , p [ 1 ]
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:19
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2022-12-09 19:43:54 +00:00
< a href = " ` )
//line app/vmalert/web.qtpl:20
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( p )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:20
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:20
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( p )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:20
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` </a> - ` )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:20
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( doc )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:20
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < br / >
` )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:21
2021-09-07 19:39:22 +00:00
}
2022-12-09 19:43:54 +00:00
//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
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< / p >
` )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:30
2022-07-06 08:46:01 +00:00
tpl . StreamFooter ( qw422016 , r )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:30
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
}
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2022-07-06 08:46:01 +00:00
func WriteWelcome ( qq422016 qtio422016 . Writer , r * http . Request ) {
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2022-07-06 08:46:01 +00:00
StreamWelcome ( qw422016 , r )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
}
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2022-07-06 08:46:01 +00:00
func Welcome ( r * http . Request ) string {
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2022-07-06 08:46:01 +00:00
WriteWelcome ( qb422016 , r )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
qs422016 := string ( qb422016 . B )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
return qs422016
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:31
2021-09-07 19:39:22 +00:00
}
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:33
2023-05-10 12:38:13 +00:00
func streambuttonActive ( qw422016 * qt422016 . Writer , filter , expValue string ) {
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:33
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2022-12-09 19:43:54 +00:00
//line app/vmalert/web.qtpl:34
2023-05-10 12:38:13 +00:00
if filter != expValue {
//line app/vmalert/web.qtpl:34
qw422016 . N ( ) . S ( `
btn - secondary
` )
//line app/vmalert/web.qtpl:36
} else {
//line app/vmalert/web.qtpl:36
qw422016 . N ( ) . S ( `
btn - primary
` )
//line app/vmalert/web.qtpl:38
}
//line app/vmalert/web.qtpl:38
qw422016 . N ( ) . S ( `
` )
//line app/vmalert/web.qtpl:39
}
//line app/vmalert/web.qtpl:39
func writebuttonActive ( qq422016 qtio422016 . Writer , filter , expValue string ) {
//line app/vmalert/web.qtpl:39
qw422016 := qt422016 . AcquireWriter ( qq422016 )
//line app/vmalert/web.qtpl:39
streambuttonActive ( qw422016 , filter , expValue )
//line app/vmalert/web.qtpl:39
qt422016 . ReleaseWriter ( qw422016 )
//line app/vmalert/web.qtpl:39
}
//line app/vmalert/web.qtpl:39
func buttonActive ( filter , expValue string ) string {
//line app/vmalert/web.qtpl:39
qb422016 := qt422016 . AcquireByteBuffer ( )
//line app/vmalert/web.qtpl:39
writebuttonActive ( qb422016 , filter , expValue )
//line app/vmalert/web.qtpl:39
qs422016 := string ( qb422016 . B )
//line app/vmalert/web.qtpl:39
qt422016 . ReleaseByteBuffer ( qb422016 )
//line app/vmalert/web.qtpl:39
return qs422016
//line app/vmalert/web.qtpl:39
}
//line app/vmalert/web.qtpl:41
func StreamListGroups ( qw422016 * qt422016 . Writer , r * http . Request , originGroups [ ] APIGroup ) {
//line app/vmalert/web.qtpl:41
qw422016 . N ( ) . S ( `
` )
//line app/vmalert/web.qtpl:42
2022-09-14 12:04:24 +00:00
prefix := utils . Prefix ( r . URL . Path )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:42
2022-07-06 08:46:01 +00:00
qw422016 . N ( ) . S ( `
` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:43
2023-08-07 19:58:40 +00:00
tpl . StreamHeader ( qw422016 , r , navItems , "Groups" , getLastConfigError ( ) )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:43
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
2021-09-07 19:39:22 +00:00
` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:45
filter := r . URL . Query ( ) . Get ( "filter" )
rOk := make ( map [ string ] int )
rNotOk := make ( map [ string ] int )
rNoMatch := make ( map [ string ] int )
var groups [ ] APIGroup
for _ , g := range originGroups {
var rules [ ] APIRule
for _ , r := range g . Rules {
if r . LastError != "" {
rNotOk [ g . ID ] ++
} else {
rOk [ g . ID ] ++
}
if isNoMatch ( r ) {
rNoMatch [ g . ID ] ++
2021-09-07 19:39:22 +00:00
}
2023-05-10 12:38:13 +00:00
if ( filter == "unhealthy" && r . LastError == "" ) ||
( filter == "noMatch" && ! isNoMatch ( r ) ) {
continue
}
rules = append ( rules , r )
}
if len ( rules ) > 0 {
g . Rules = rules
groups = append ( groups , g )
2021-09-07 19:39:22 +00:00
}
2023-05-10 12:38:13 +00:00
}
2021-09-07 19:39:22 +00:00
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:72
qw422016 . N ( ) . S ( `
< a class = " btn ` )
//line app/vmalert/web.qtpl:73
streambuttonActive ( qw422016 , filter , "" )
//line app/vmalert/web.qtpl:73
qw422016 . N ( ) . S ( ` " role=" button " onclick=" window . location = window . location . pathname " > All < / a >
2021-09-07 19:39:22 +00:00
< a class = "btn btn-primary" role = "button" onclick = "collapseAll()" > Collapse All < / a >
< a class = "btn btn-primary" role = "button" onclick = "expandAll()" > Expand All < / a >
2023-05-10 12:38:13 +00:00
< a class = " btn ` )
//line app/vmalert/web.qtpl:76
streambuttonActive ( qw422016 , filter , "unhealthy" )
//line app/vmalert/web.qtpl:76
2023-05-11 14:38:08 +00:00
qw422016 . N ( ) . S ( ` " role=" button " onclick=" location . href = ' ? filter = unhealthy ' " title=" Show only rules with errors " > Unhealthy < / a >
2023-05-10 12:38:13 +00:00
< a class = " btn ` )
//line app/vmalert/web.qtpl:77
streambuttonActive ( qw422016 , filter , "noMatch" )
//line app/vmalert/web.qtpl:77
2023-05-11 14:38:08 +00:00
qw422016 . N ( ) . S ( ` " role=" button " onclick=" location . href = ' ? filter = noMatch ' " title=" Show only rules matching no time series during last evaluation " > NoMatch < / a >
2021-09-07 19:39:22 +00:00
` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:78
if len ( groups ) > 0 {
//line app/vmalert/web.qtpl:78
qw422016 . N ( ) . S ( `
` )
//line app/vmalert/web.qtpl:79
2021-09-07 19:39:22 +00:00
for _ , g := range groups {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:79
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< div
class = " group - heading ` )
//line app/vmalert/web.qtpl:81
2023-02-08 13:34:03 +00:00
if rNotOk [ g . ID ] > 0 {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:81
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` alert-danger ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:81
2021-09-07 19:39:22 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:81
qw422016 . N ( ) . S ( ` " data-bs-target="rules- ` )
//line app/vmalert/web.qtpl:81
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:81
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` " >
2023-05-10 12:38:13 +00:00
< span class = "anchor" id = " group - ` )
//line app/vmalert/web.qtpl:82
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:82
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` " > < / span >
2023-05-10 12:38:13 +00:00
< a href = " # group - ` )
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . Name )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
if g . Type != "prometheus" {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` ( ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . Type )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` ) ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` (every ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2022-03-15 11:54:53 +00:00
qw422016 . N ( ) . FPrec ( g . Interval , 0 )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:83
2023-03-27 22:11:40 +00:00
qw422016 . N ( ) . S ( ` s ) # < / a >
2023-05-10 12:38:13 +00:00
` )
//line app/vmalert/web.qtpl:84
2023-02-08 13:34:03 +00:00
if rNotOk [ g . ID ] > 0 {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:84
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( ` <span class="badge bg-danger" title="Number of rules with status Error"> ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:84
2023-02-08 13:34:03 +00:00
qw422016 . N ( ) . D ( rNotOk [ g . ID ] )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:84
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` </span> ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:84
2021-09-07 19:39:22 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:84
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
` )
//line app/vmalert/web.qtpl:85
if rNoMatch [ g . ID ] > 0 {
//line app/vmalert/web.qtpl:85
qw422016 . N ( ) . S ( ` <span class="badge bg-warning" title="Number of rules with status NoMatch"> ` )
//line app/vmalert/web.qtpl:85
qw422016 . N ( ) . D ( rNoMatch [ g . ID ] )
//line app/vmalert/web.qtpl:85
qw422016 . N ( ) . S ( ` </span> ` )
//line app/vmalert/web.qtpl:85
}
//line app/vmalert/web.qtpl:85
qw422016 . N ( ) . S ( `
< span class = "badge bg-success" title = "Number of rules withs status Ok" > ` )
//line app/vmalert/web.qtpl:86
2023-02-08 13:34:03 +00:00
qw422016 . N ( ) . D ( rOk [ g . ID ] )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:86
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / span >
2023-05-10 12:38:13 +00:00
< p class = "fs-6 fw-lighter" > ` )
//line app/vmalert/web.qtpl:87
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . File )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:87
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / p >
2023-05-10 12:38:13 +00:00
` )
//line app/vmalert/web.qtpl:88
2021-12-02 12:45:08 +00:00
if len ( g . Params ) > 0 {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:88
2021-09-13 11:11:38 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< div class = "fs-6 fw-lighter" > Extra params
` )
//line app/vmalert/web.qtpl:90
2021-12-02 12:45:08 +00:00
for _ , param := range g . Params {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:90
2021-09-13 11:11:38 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< span class = "float-left badge bg-primary" > ` )
//line app/vmalert/web.qtpl:91
2021-12-02 12:45:08 +00:00
qw422016 . E ( ) . S ( param )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:91
2021-09-13 11:11:38 +00:00
qw422016 . N ( ) . S ( ` < / span >
2023-05-10 12:38:13 +00:00
` )
//line app/vmalert/web.qtpl:92
2021-09-13 11:11:38 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:92
2021-09-13 11:11:38 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< / div >
` )
//line app/vmalert/web.qtpl:94
2021-09-13 11:11:38 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:94
2021-09-13 11:11:38 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
` )
//line app/vmalert/web.qtpl:95
2022-07-21 13:59:55 +00:00
if len ( g . Headers ) > 0 {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:95
2022-07-21 13:59:55 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< div class = "fs-6 fw-lighter" > Extra headers
` )
//line app/vmalert/web.qtpl:97
2022-07-21 13:59:55 +00:00
for _ , header := range g . Headers {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:97
2022-07-21 13:59:55 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< span class = "float-left badge bg-primary" > ` )
//line app/vmalert/web.qtpl:98
2022-07-21 13:59:55 +00:00
qw422016 . E ( ) . S ( header )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:98
2022-07-21 13:59:55 +00:00
qw422016 . N ( ) . S ( ` < / span >
2023-05-10 12:38:13 +00:00
` )
//line app/vmalert/web.qtpl:99
2022-07-21 13:59:55 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:99
2022-07-21 13:59:55 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< / div >
` )
//line app/vmalert/web.qtpl:101
2022-07-21 13:59:55 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:101
2022-07-21 13:59:55 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< / div >
< div class = "collapse" id = " rules - ` )
//line app/vmalert/web.qtpl:103
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:103
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` " >
2023-05-10 12:38:13 +00:00
< 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:113
2022-03-15 11:54:53 +00:00
for _ , r := range g . Rules {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:113
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< tr ` )
//line app/vmalert/web.qtpl:114
2022-03-15 11:54:53 +00:00
if r . LastError != "" {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:114
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` class="alert-danger" ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:114
2021-09-07 19:39:22 +00:00
}
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:114
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` >
2023-05-10 12:38:13 +00:00
< td >
< div class = "row" >
< div class = "col-12 mb-2" >
` )
//line app/vmalert/web.qtpl:118
2022-03-15 11:54:53 +00:00
if r . Type == "alerting" {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:118
2022-03-15 11:54:53 +00:00
qw422016 . N ( ) . S ( `
2023-07-27 13:13:13 +00:00
` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:119
2023-07-27 13:13:13 +00:00
if r . KeepFiringFor > 0 {
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:119
2023-07-27 13:13:13 +00:00
qw422016 . N ( ) . S ( `
< b > alert : < / b > ` )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:120
2023-07-27 13:13:13 +00:00
qw422016 . E ( ) . S ( r . Name )
//line app/vmalert/web.qtpl:120
qw422016 . N ( ) . S ( ` (for: ` )
//line app/vmalert/web.qtpl:120
qw422016 . E ( ) . V ( r . Duration )
2023-05-10 12:38:13 +00:00
//line app/vmalert/web.qtpl:120
2023-07-27 13:13:13 +00:00
qw422016 . N ( ) . S ( ` seconds, keep_firing_for: ` )
//line app/vmalert/web.qtpl:120
qw422016 . E ( ) . V ( r . KeepFiringFor )
//line app/vmalert/web.qtpl:120
qw422016 . N ( ) . S ( ` seconds )
` )
//line app/vmalert/web.qtpl:121
} else {
//line app/vmalert/web.qtpl:121
qw422016 . N ( ) . S ( `
< b > alert : < / b > ` )
//line app/vmalert/web.qtpl:122
qw422016 . E ( ) . S ( r . Name )
//line app/vmalert/web.qtpl:122
qw422016 . N ( ) . S ( ` (for: ` )
//line app/vmalert/web.qtpl:122
qw422016 . E ( ) . V ( r . Duration )
//line app/vmalert/web.qtpl:122
qw422016 . N ( ) . S ( ` seconds )
` )
//line app/vmalert/web.qtpl:123
}
//line app/vmalert/web.qtpl:123
qw422016 . N ( ) . S ( `
` )
//line app/vmalert/web.qtpl:124
} else {
//line app/vmalert/web.qtpl:124
2022-03-15 11:54:53 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< b > record : < / b > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:125
2022-03-15 11:54:53 +00:00
qw422016 . E ( ) . S ( r . Name )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:125
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:126
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:126
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
|
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:128
2023-05-08 07:36:39 +00:00
streamseriesFetchedWarn ( qw422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:128
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< span > < a target = "_blank" href = " ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:129
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( prefix + r . WebLink ( ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:129
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` " > Details < / a > < / span >
2023-05-10 12:38:13 +00:00
< / div >
< div class = "col-12" >
< code > < pre > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:132
2022-03-15 11:54:53 +00:00
qw422016 . E ( ) . S ( r . Query )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:132
2022-05-04 16:02:18 +00:00
qw422016 . N ( ) . S ( ` < / pre > < / code >
2023-05-10 12:38:13 +00:00
< / div >
< div class = "col-12 mb-2" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:135
2022-03-15 11:54:53 +00:00
if len ( r . Labels ) > 0 {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:135
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` <b>Labels:</b> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:135
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:135
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:136
2022-03-15 11:54:53 +00:00
for k , v := range r . Labels {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:136
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< span class = "ms-1 badge bg-primary" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:137
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( k )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:137
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` = ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:137
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( v )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:137
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / span >
2023-05-10 12:38:13 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:138
2022-05-04 16:02:18 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:138
2022-05-04 16:02:18 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:140
2022-05-04 16:02:18 +00:00
if r . LastError != "" {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:140
2022-05-04 16:02:18 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< div class = "col-12" >
< b > Error : < / b >
< div class = "error-cell" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:144
2022-05-04 16:02:18 +00:00
qw422016 . E ( ) . S ( r . LastError )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:144
2022-05-04 16:02:18 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< / div >
2022-05-04 16:02:18 +00:00
< / div >
2023-05-10 12:38:13 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:147
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:147
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< / div >
< / td >
< td class = "text-center" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:150
2022-03-15 11:54:53 +00:00
qw422016 . N ( ) . D ( r . LastSamples )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:150
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / td >
2023-05-10 12:38:13 +00:00
< td class = "text-center" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:151
2022-03-15 11:54:53 +00:00
qw422016 . N ( ) . FPrec ( time . Since ( r . LastEvaluation ) . Seconds ( ) , 3 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:151
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` s ago < / td >
2023-05-10 12:38:13 +00:00
< / tr >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:153
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:153
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< / tbody >
< / table >
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:157
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:157
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:158
2021-09-07 19:39:22 +00:00
} else {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:158
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< div >
< p > No groups ... < / p >
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:162
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:162
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:164
2022-07-06 08:46:01 +00:00
tpl . StreamFooter ( qw422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:164
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2023-05-10 12:38:13 +00:00
func WriteListGroups ( qq422016 qtio422016 . Writer , r * http . Request , originGroups [ ] APIGroup ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2023-05-10 12:38:13 +00:00
StreamListGroups ( qw422016 , r , originGroups )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2023-05-10 12:38:13 +00:00
func ListGroups ( r * http . Request , originGroups [ ] APIGroup ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2023-05-10 12:38:13 +00:00
WriteListGroups ( qb422016 , r , originGroups )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:166
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:169
2022-07-06 08:46:01 +00:00
func StreamListAlerts ( qw422016 * qt422016 . Writer , r * http . Request , groupAlerts [ ] GroupAlerts ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:169
2022-02-08 19:03:42 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:170
2022-07-08 08:26:13 +00:00
prefix := utils . Prefix ( r . URL . Path )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:170
2022-07-06 08:46:01 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:171
2023-08-07 19:58:40 +00:00
tpl . StreamHeader ( qw422016 , r , navItems , "Alerts" , getLastConfigError ( ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:171
2022-07-08 08:26:13 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:172
2022-07-08 08:26:13 +00:00
if len ( groupAlerts ) > 0 {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:172
2021-09-07 19:39:22 +00:00
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 >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:175
2021-09-07 19:39:22 +00:00
for _ , ga := range groupAlerts {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:175
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:176
2021-09-07 19:39:22 +00:00
g := ga . Group
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:176
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< div class = "group-heading alert-danger" data - bs - target = " rules - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:177
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:177
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` " >
< span class = "anchor" id = " group - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:178
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:178
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` " > < / span >
< a href = " # group - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . Name )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
if g . Type != "prometheus" {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` ( ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . Type )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` ) ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:179
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / a >
< span class = "badge bg-danger" title = "Number of active alerts" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:180
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . D ( len ( ga . Alerts ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:180
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / span >
< br >
< p class = "fs-6 fw-lighter" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:182
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . File )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:182
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / p >
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:185
2021-09-07 19:39:22 +00:00
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 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:194
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< div class = "collapse" id = " rules - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:195
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( g . ID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:195
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` " >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:196
2021-09-07 19:39:22 +00:00
for _ , ruleID := range keys {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:196
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:198
2021-09-07 19:39:22 +00:00
defaultAR := alertsByRule [ ruleID ] [ 0 ]
var labelKeys [ ] string
for k := range defaultAR . Labels {
labelKeys = append ( labelKeys , k )
}
sort . Strings ( labelKeys )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:204
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< br >
< b > alert : < / b > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:206
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( defaultAR . Name )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:206
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` ( ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:206
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . D ( len ( alertsByRule [ ruleID ] ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:206
2021-10-13 12:25:11 +00:00
qw422016 . N ( ) . S ( ` )
| < span > < a target = "_blank" href = " ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:207
2021-10-13 12:25:11 +00:00
qw422016 . E ( ) . S ( defaultAR . SourceLink )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:207
2021-10-13 12:25:11 +00:00
qw422016 . N ( ) . S ( ` " > Source < / a > < / span >
< br >
< b > expr : < / b > < code > < pre > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:209
2021-10-13 12:25:11 +00:00
qw422016 . E ( ) . S ( defaultAR . Expression )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:209
2021-09-07 19:39:22 +00:00
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 >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:221
2021-09-07 19:39:22 +00:00
for _ , ar := range alertsByRule [ ruleID ] {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:221
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< tr >
< td >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:224
2021-09-07 19:39:22 +00:00
for _ , k := range labelKeys {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:224
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< span class = "ms-1 badge bg-primary" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:225
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( k )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:225
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` = ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:225
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( ar . Labels [ k ] )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:225
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / span >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:226
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:226
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< / td >
2021-10-22 09:30:38 +00:00
< td > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:228
2021-10-22 09:30:38 +00:00
streambadgeState ( qw422016 , ar . State )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:228
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / td >
2021-10-22 09:30:38 +00:00
< td >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:230
2021-10-22 09:30:38 +00:00
qw422016 . E ( ) . S ( ar . ActiveAt . Format ( "2006-01-02T15:04:05Z07:00" ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:230
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:231
2021-10-22 09:30:38 +00:00
if ar . Restored {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:231
2021-10-22 09:30:38 +00:00
streambadgeRestored ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:231
2021-10-22 09:30:38 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:231
qw422016 . N ( ) . S ( `
` )
//line app/vmalert/web.qtpl:232
if ar . Stabilizing {
//line app/vmalert/web.qtpl:232
streambadgeStabilizing ( qw422016 )
//line app/vmalert/web.qtpl:232
}
//line app/vmalert/web.qtpl:232
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( `
< / td >
< td > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:234
2021-10-22 09:30:38 +00:00
qw422016 . E ( ) . S ( ar . Value )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:234
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / td >
< td >
2022-02-08 19:03:42 +00:00
< a href = " ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:236
2022-07-08 08:26:13 +00:00
qw422016 . E ( ) . S ( prefix + ar . WebLink ( ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:236
2022-02-08 19:03:42 +00:00
qw422016 . N ( ) . S ( ` " > Details < / a >
2021-09-07 19:39:22 +00:00
< / td >
< / tr >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:239
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:239
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< / tbody >
< / table >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:242
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:242
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< / div >
< br >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:245
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:245
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:247
2021-09-07 19:39:22 +00:00
} else {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:247
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< div >
2022-09-14 12:04:24 +00:00
< p > No active alerts ... < / p >
2021-09-07 19:39:22 +00:00
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:251
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:251
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:253
2022-07-06 08:46:01 +00:00
tpl . StreamFooter ( qw422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:253
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2022-07-06 08:46:01 +00:00
func WriteListAlerts ( qq422016 qtio422016 . Writer , r * http . Request , groupAlerts [ ] GroupAlerts ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2022-07-06 08:46:01 +00:00
StreamListAlerts ( qw422016 , r , groupAlerts )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2022-07-06 08:46:01 +00:00
func ListAlerts ( r * http . Request , groupAlerts [ ] GroupAlerts ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2022-07-06 08:46:01 +00:00
WriteListAlerts ( qb422016 , r , groupAlerts )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:255
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:257
2022-07-06 08:46:01 +00:00
func StreamListTargets ( qw422016 * qt422016 . Writer , r * http . Request , targets map [ notifier . TargetType ] [ ] notifier . Target ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:257
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:258
2023-08-07 19:58:40 +00:00
tpl . StreamHeader ( qw422016 , r , navItems , "Notifiers" , getLastConfigError ( ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:258
2022-07-06 08:46:01 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:259
2022-07-06 08:46:01 +00:00
if len ( targets ) > 0 {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:259
2022-02-02 12:11:41 +00:00
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 >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:264
2022-02-02 12:11:41 +00:00
var keys [ ] string
for key := range targets {
keys = append ( keys , string ( key ) )
}
sort . Strings ( keys )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:269
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:271
2022-02-02 12:11:41 +00:00
for i := range keys {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:271
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:272
2022-02-02 12:11:41 +00:00
typeK , ns := keys [ i ] , targets [ notifier . TargetType ( keys [ i ] ) ]
count := len ( ns )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:274
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
2023-05-10 12:38:13 +00:00
< div class = "group-heading" data - bs - target = " notifiers - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:275
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( typeK )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:275
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` " >
2023-05-10 12:38:13 +00:00
< span class = "anchor" id = " group - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:276
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( typeK )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:276
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` " > < / span >
2023-05-10 12:38:13 +00:00
< a href = " # group - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:277
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( typeK )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:277
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:277
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( typeK )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:277
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` ( ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:277
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . D ( count )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:277
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` ) < / a >
< / div >
< div class = "collapse show" id = " notifiers - ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:279
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( typeK )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:279
2022-02-02 12:11:41 +00:00
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 >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:288
2022-02-02 12:11:41 +00:00
for _ , n := range ns {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:288
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
< tr >
< td >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:291
2022-11-30 05:22:12 +00:00
for _ , l := range n . Labels . GetLabels ( ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:291
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
< span class = "ms-1 badge bg-primary" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:292
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( l . Name )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:292
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` = ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:292
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( l . Value )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:292
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` < / span >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:293
2022-02-02 12:11:41 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:293
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
< / td >
< td > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:295
2022-02-02 12:11:41 +00:00
qw422016 . E ( ) . S ( n . Notifier . Addr ( ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:295
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( ` < / td >
< / tr >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:297
2022-02-02 12:11:41 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:297
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
< / tbody >
< / table >
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:301
2022-02-02 12:11:41 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:301
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:303
2022-02-02 12:11:41 +00:00
} else {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:303
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
< div >
2022-09-14 12:04:24 +00:00
< p > No targets ... < / p >
2022-02-02 12:11:41 +00:00
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:307
2022-02-02 12:11:41 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:307
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:309
2022-07-06 08:46:01 +00:00
tpl . StreamFooter ( qw422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:309
2022-02-02 12:11:41 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-07-06 08:46:01 +00:00
func WriteListTargets ( qq422016 qtio422016 . Writer , r * http . Request , targets map [ notifier . TargetType ] [ ] notifier . Target ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-07-06 08:46:01 +00:00
StreamListTargets ( qw422016 , r , targets )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-07-06 08:46:01 +00:00
func ListTargets ( r * http . Request , targets map [ notifier . TargetType ] [ ] notifier . Target ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-07-06 08:46:01 +00:00
WriteListTargets ( qb422016 , r , targets )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:311
2022-02-02 12:11:41 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:313
2022-07-06 08:46:01 +00:00
func StreamAlert ( qw422016 * qt422016 . Writer , r * http . Request , alert * APIAlert ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:313
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:314
2022-07-08 08:26:13 +00:00
prefix := utils . Prefix ( r . URL . Path )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:314
2022-07-06 08:46:01 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:315
2023-08-07 19:58:40 +00:00
tpl . StreamHeader ( qw422016 , r , navItems , "" , getLastConfigError ( ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:315
2022-07-08 08:26:13 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:317
2021-09-07 19:39:22 +00:00
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 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:328
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< div class = "display-6 pb-3 mb-3" > Alert : ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . Name )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` <span class="ms-2 badge ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
if alert . State == "firing" {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` bg-danger ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
} else {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` bg-warning text-dark ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . State )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:329
2021-09-07 19:39:22 +00:00
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" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:336
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . ActiveAt . Format ( "2006-01-02T15:04:05Z07:00" ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:336
2021-09-07 19:39:22 +00:00
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 > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:346
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . Expression )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:346
2021-09-07 19:39:22 +00:00
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" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:356
2021-09-07 19:39:22 +00:00
for _ , k := range labelKeys {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:356
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< span class = "m-1 badge bg-primary" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:357
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( k )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:357
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` = ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:357
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . Labels [ k ] )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:357
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / span >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:358
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:358
2021-09-07 19:39:22 +00:00
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" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:368
2021-09-07 19:39:22 +00:00
for _ , k := range annotationKeys {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:368
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
< b > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:369
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( k )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:369
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` : < / b > < br >
< p > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:370
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . Annotations [ k ] )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:370
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / p >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:371
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:371
2021-09-07 19:39:22 +00:00
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" >
2022-07-08 08:26:13 +00:00
< a target = "_blank" href = " ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:381
2022-07-08 08:26:13 +00:00
qw422016 . E ( ) . S ( prefix )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:381
2022-07-08 08:26:13 +00:00
qw422016 . N ( ) . S ( ` groups#group- ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:381
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . GroupID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:381
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:381
2021-09-07 19:39:22 +00:00
qw422016 . E ( ) . S ( alert . GroupID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:381
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( ` < / a >
< / div >
< / div >
2021-10-13 12:25:11 +00:00
< / 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 = " ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:391
2021-10-13 12:25:11 +00:00
qw422016 . E ( ) . S ( alert . SourceLink )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:391
2021-10-13 12:25:11 +00:00
qw422016 . N ( ) . S ( ` " > Link < / a >
< / div >
< / div >
2021-09-07 19:39:22 +00:00
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:395
2022-07-06 08:46:01 +00:00
tpl . StreamFooter ( qw422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:395
2021-09-07 19:39:22 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2022-07-06 08:46:01 +00:00
func WriteAlert ( qq422016 qtio422016 . Writer , r * http . Request , alert * APIAlert ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-09-07 19:39:22 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2022-07-06 08:46:01 +00:00
StreamAlert ( qw422016 , r , alert )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-09-07 19:39:22 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2022-07-06 08:46:01 +00:00
func Alert ( r * http . Request , alert * APIAlert ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-09-07 19:39:22 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2022-07-06 08:46:01 +00:00
WriteAlert ( qb422016 , r , alert )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-10-22 09:30:38 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-10-22 09:30:38 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-10-22 09:30:38 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:397
2021-10-22 09:30:38 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:400
2022-09-14 12:04:24 +00:00
func StreamRuleDetails ( qw422016 * qt422016 . Writer , r * http . Request , rule APIRule ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:400
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:401
2022-09-14 12:04:24 +00:00
prefix := utils . Prefix ( r . URL . Path )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:401
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:402
2023-08-07 19:58:40 +00:00
tpl . StreamHeader ( qw422016 , r , navItems , "" , getLastConfigError ( ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:402
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:404
2022-09-14 12:04:24 +00:00
var labelKeys [ ] string
for k := range rule . Labels {
labelKeys = append ( labelKeys , k )
}
sort . Strings ( labelKeys )
var annotationKeys [ ] string
for k := range rule . Annotations {
annotationKeys = append ( annotationKeys , k )
}
sort . Strings ( annotationKeys )
2023-05-08 07:36:39 +00:00
var seriesFetchedEnabled bool
var seriesFetchedWarning bool
for _ , u := range rule . Updates {
if u . seriesFetched != nil {
seriesFetchedEnabled = true
if * u . seriesFetched == 0 && u . samples == 0 {
seriesFetchedWarning = true
}
}
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:427
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
< div class = "display-6 pb-3 mb-3" > Rule : ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( rule . Name )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` <span class="ms-2 badge ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
if rule . Health != "ok" {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` bg-danger ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
} else {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( ` bg-success text-dark ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( rule . Health )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:428
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / span > < / div >
< div class = "container border-bottom p-2" >
< div class = "row" >
< div class = "col-2" >
Expr
< / div >
< div class = "col" >
< code > < pre > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:435
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( rule . Query )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:435
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / pre > < / code >
< / div >
< / div >
< / div >
2022-09-15 14:15:39 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:439
2022-09-15 14:15:39 +00:00
if rule . Type == "alerting" {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:439
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< div class = "container border-bottom p-2" >
< div class = "row" >
< div class = "col-2" >
For
< / div >
< div class = "col" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:446
2022-09-15 14:15:39 +00:00
qw422016 . E ( ) . V ( rule . Duration )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:446
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( ` seconds
2022-09-14 12:04:24 +00:00
< / div >
< / div >
< / div >
2022-09-15 14:15:39 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:450
if rule . KeepFiringFor > 0 {
//line app/vmalert/web.qtpl:450
qw422016 . N ( ) . S ( `
< div class = "container border-bottom p-2" >
< div class = "row" >
< div class = "col-2" >
Keep firing for
< / div >
< div class = "col" >
` )
//line app/vmalert/web.qtpl:457
qw422016 . E ( ) . V ( rule . KeepFiringFor )
//line app/vmalert/web.qtpl:457
qw422016 . N ( ) . S ( ` seconds
< / div >
< / div >
< / div >
` )
//line app/vmalert/web.qtpl:461
}
//line app/vmalert/web.qtpl:461
qw422016 . N ( ) . S ( `
` )
//line app/vmalert/web.qtpl:462
2022-09-15 14:15:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:462
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< div class = "container border-bottom p-2" >
< div class = "row" >
< div class = "col-2" >
Labels
< / div >
< div class = "col" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:469
2022-09-14 12:04:24 +00:00
for _ , k := range labelKeys {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:469
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
< span class = "m-1 badge bg-primary" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:470
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( k )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:470
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` = ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:470
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( rule . Labels [ k ] )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:470
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / span >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:471
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:471
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
< / div >
< / div >
< / div >
2022-09-15 14:15:39 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:475
2022-09-15 14:15:39 +00:00
if rule . Type == "alerting" {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:475
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< div class = "container border-bottom p-2" >
< div class = "row" >
< div class = "col-2" >
Annotations
< / div >
< div class = "col" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:482
2022-09-15 14:15:39 +00:00
for _ , k := range annotationKeys {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:482
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< b > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:483
2022-09-15 14:15:39 +00:00
qw422016 . E ( ) . S ( k )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:483
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( ` : < / b > < br >
2022-09-14 12:04:24 +00:00
< p > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:484
2022-09-15 14:15:39 +00:00
qw422016 . E ( ) . S ( rule . Annotations [ k ] )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:484
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( ` < / p >
2022-09-14 12:04:24 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:485
2022-09-15 14:15:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:485
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< / div >
< / div >
< / div >
2023-02-08 13:34:03 +00:00
< div class = "container border-bottom p-2" >
< div class = "row" >
< div class = "col-2" >
Debug
< / div >
< div class = "col" >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:495
2023-02-08 13:34:03 +00:00
qw422016 . E ( ) . V ( rule . Debug )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:495
2023-02-08 13:34:03 +00:00
qw422016 . N ( ) . S ( `
< / div >
< / div >
< / div >
2022-09-15 14:15:39 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:499
2022-09-15 14:15:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:499
2022-09-15 14:15:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< div class = "container border-bottom p-2" >
< div class = "row" >
< div class = "col-2" >
Group
< / div >
< div class = "col" >
< a target = "_blank" href = " ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:506
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( prefix )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:506
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` groups#group- ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:506
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( rule . GroupID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:506
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:506
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( rule . GroupID )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:506
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / a >
< / div >
< / div >
< / div >
< br >
2023-05-08 07:36:39 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:512
2023-05-08 07:36:39 +00:00
if seriesFetchedWarning {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:512
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
< div class = "alert alert-warning" role = "alert" >
< strong > Warning : < / strong > some of updates have "Series fetched" equal to 0. < br >
It might be that either this data is missing in the datasource or there is a typo in rule ' s expression .
For example , < strong > foo { label = "bar" } > 0 < / strong > could never trigger because < strong > foo { label = "bar" } < / strong >
metric doesn ' t exist .
< br >
Rule ' s expressions without time series selector , like < strong > expr : 42 < / strong > or < strong > expr : time ( ) < / strong >
aren ' t fetching time series from datasource , so they could have "Series fetched" equal to 0 and this won ' t be a problem .
< br >
See more details about this detection < a target = "_blank" href = "https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4039" > here < / a > .
< / div >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:524
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:524
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< div class = "display-6 pb-3" > Last ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:525
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . D ( len ( rule . Updates ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:525
2022-12-29 11:36:44 +00:00
qw422016 . N ( ) . S ( ` / ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:525
2022-12-29 11:36:44 +00:00
qw422016 . N ( ) . D ( rule . MaxUpdates )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:525
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` updates < / span > : < / div >
< table class = "table table-striped table-hover table-sm" >
< thead >
< tr >
2022-09-15 10:40:22 +00:00
< th scope = "col" title = "The time when event was created" > Updated at < / th >
< th scope = "col" style = "width: 10%" class = "text-center" title = "How many samples were returned" > Samples < / th >
2023-05-08 07:36:39 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:531
2023-05-08 07:36:39 +00:00
if seriesFetchedEnabled {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:531
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( ` <th scope="col" style="width: 10%" class="text-center" title="How many series were scanned by datasource during the evaluation">Series fetched</th> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:531
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:531
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-15 10:40:22 +00:00
< th scope = "col" style = "width: 10%" class = "text-center" title = "How many seconds request took" > Duration < / th >
< th scope = "col" class = "text-center" title = "Time used for rule execution" > Executed at < / th >
< th scope = "col" class = "text-center" title = "cURL command with request example" > cURL < / th >
2022-09-14 12:04:24 +00:00
< / tr >
< / thead >
< tbody >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:539
2022-09-14 12:04:24 +00:00
for _ , u := range rule . Updates {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:539
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
< tr ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:540
2022-09-14 12:04:24 +00:00
if u . err != nil {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:540
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` class="alert-danger" ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:540
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:540
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` >
< td >
< span class = "badge bg-primary rounded-pill me-3" title = "Updated at" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:542
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( u . time . Format ( time . RFC3339 ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:542
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / span >
< / td >
2023-05-08 07:36:39 +00:00
< td class = "text-center" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:544
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . D ( u . samples )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:544
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / td >
2023-05-08 07:36:39 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
if seriesFetchedEnabled {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( ` <td class="text-center"> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
if u . seriesFetched != nil {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . D ( * u . seriesFetched )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( ` </td> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:545
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
2022-09-14 12:04:24 +00:00
< td class = "text-center" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:546
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . FPrec ( u . duration . Seconds ( ) , 3 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:546
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` s < / td >
< td class = "text-center" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:547
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . S ( u . at . Format ( time . RFC3339 ) )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:547
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / td >
2022-09-15 10:40:22 +00:00
< td >
< textarea class = "curl-area" rows = "1" onclick = "this.focus();this.select()" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:549
2022-12-09 15:13:29 +00:00
qw422016 . E ( ) . S ( u . curl )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:549
2022-09-15 10:40:22 +00:00
qw422016 . N ( ) . S ( ` < / textarea >
< / td >
2022-09-14 12:04:24 +00:00
< / tr >
< / li >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:553
2022-09-14 12:04:24 +00:00
if u . err != nil {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:553
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
< tr ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:554
2022-09-14 12:04:24 +00:00
if u . err != nil {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:554
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` class="alert-danger" ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:554
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:554
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` >
2023-05-08 07:36:39 +00:00
< td colspan = " ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:555
2023-05-08 07:36:39 +00:00
if seriesFetchedEnabled {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:555
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( ` 6 ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:555
2023-05-08 07:36:39 +00:00
} else {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:555
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( ` 5 ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:555
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:555
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( ` " >
2022-09-14 12:04:24 +00:00
< span class = "alert-danger" > ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:556
2022-09-14 12:04:24 +00:00
qw422016 . E ( ) . V ( u . err )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:556
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( ` < / span >
< / td >
< / tr >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:559
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:559
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:560
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:560
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:562
2022-09-14 12:04:24 +00:00
tpl . StreamFooter ( qw422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:562
2022-09-14 12:04:24 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
func WriteRuleDetails ( qq422016 qtio422016 . Writer , r * http . Request , rule APIRule ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
StreamRuleDetails ( qw422016 , r , rule )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
func RuleDetails ( r * http . Request , rule APIRule ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
WriteRuleDetails ( qb422016 , r , rule )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:563
2022-09-14 12:04:24 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:567
2021-10-22 09:30:38 +00:00
func streambadgeState ( qw422016 * qt422016 . Writer , state string ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:567
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:569
2021-10-22 09:30:38 +00:00
badgeClass := "bg-warning text-dark"
if state == "firing" {
badgeClass = "bg-danger"
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:573
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( `
< span class = " badge ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:574
2021-10-22 09:30:38 +00:00
qw422016 . E ( ) . S ( badgeClass )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:574
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( ` "> ` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:574
2021-10-22 09:30:38 +00:00
qw422016 . E ( ) . S ( state )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:574
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( ` < / span >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
func writebadgeState ( qq422016 qtio422016 . Writer , state string ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
streambadgeState ( qw422016 , state )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
func badgeState ( state string ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
writebadgeState ( qb422016 , state )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:575
2021-10-22 09:30:38 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:577
2021-10-22 09:30:38 +00:00
func streambadgeRestored ( qw422016 * qt422016 . Writer ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:577
2021-10-22 09:30:38 +00:00
qw422016 . N ( ) . S ( `
2021-10-27 16:59:13 +00:00
< span class = "badge bg-warning text-dark" title = "Alert state was restored after the service restart from remote storage" > restored < / span >
2021-10-22 09:30:38 +00:00
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
func writebadgeRestored ( qq422016 qtio422016 . Writer ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
streambadgeRestored ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
func badgeRestored ( ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2021-10-22 09:30:38 +00:00
writebadgeRestored ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2023-05-08 07:36:39 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2023-05-08 07:36:39 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
2023-05-08 07:36:39 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:579
}
//line app/vmalert/web.qtpl:581
func streambadgeStabilizing ( qw422016 * qt422016 . Writer ) {
//line app/vmalert/web.qtpl:581
qw422016 . N ( ) . S ( `
< span class = "badge bg-warning text-dark" title = " This firing state is kept because of ` )
//line app/vmalert/web.qtpl:581
qw422016 . N ( ) . S ( "`" )
//line app/vmalert/web.qtpl:581
qw422016 . N ( ) . S ( ` keep_firing_for ` )
//line app/vmalert/web.qtpl:581
qw422016 . N ( ) . S ( "`" )
//line app/vmalert/web.qtpl:581
qw422016 . N ( ) . S ( ` " > stabilizing < / span >
` )
//line app/vmalert/web.qtpl:583
}
//line app/vmalert/web.qtpl:583
func writebadgeStabilizing ( qq422016 qtio422016 . Writer ) {
//line app/vmalert/web.qtpl:583
qw422016 := qt422016 . AcquireWriter ( qq422016 )
//line app/vmalert/web.qtpl:583
streambadgeStabilizing ( qw422016 )
//line app/vmalert/web.qtpl:583
qt422016 . ReleaseWriter ( qw422016 )
//line app/vmalert/web.qtpl:583
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:583
func badgeStabilizing ( ) string {
//line app/vmalert/web.qtpl:583
qb422016 := qt422016 . AcquireByteBuffer ( )
//line app/vmalert/web.qtpl:583
writebadgeStabilizing ( qb422016 )
//line app/vmalert/web.qtpl:583
qs422016 := string ( qb422016 . B )
//line app/vmalert/web.qtpl:583
qt422016 . ReleaseByteBuffer ( qb422016 )
//line app/vmalert/web.qtpl:583
return qs422016
//line app/vmalert/web.qtpl:583
}
//line app/vmalert/web.qtpl:585
2023-05-08 07:36:39 +00:00
func streamseriesFetchedWarn ( qw422016 * qt422016 . Writer , r APIRule ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:585
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:586
2023-05-10 12:38:13 +00:00
if isNoMatch ( r ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:586
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
< svg xmlns = "http://www.w3.org/2000/svg"
data - bs - toggle = "tooltip"
2023-05-19 10:45:15 +00:00
title = " No match ! This rule ' s last evaluation hasn ' t selected any time series from the datasource .
2023-05-08 07:36:39 +00:00
It might be that either this data is missing in the datasource or there is a typo in rule ' s expression .
See more in Details . "
width = "18" height = "18" fill = "currentColor" class = "bi bi-exclamation-triangle-fill flex-shrink-0 me-2" viewBox = "0 0 16 16" role = "img" aria - label = "Warning:" >
< path d = "M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" / >
< / svg >
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:595
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:595
2023-05-08 07:36:39 +00:00
qw422016 . N ( ) . S ( `
` )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
func writeseriesFetchedWarn ( qq422016 qtio422016 . Writer , r APIRule ) {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
qw422016 := qt422016 . AcquireWriter ( qq422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
streamseriesFetchedWarn ( qw422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
qt422016 . ReleaseWriter ( qw422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
func seriesFetchedWarn ( r APIRule ) string {
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
qb422016 := qt422016 . AcquireByteBuffer ( )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-08 07:36:39 +00:00
writeseriesFetchedWarn ( qb422016 , r )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2021-09-07 19:39:22 +00:00
qs422016 := string ( qb422016 . B )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2021-09-07 19:39:22 +00:00
qt422016 . ReleaseByteBuffer ( qb422016 )
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2021-09-07 19:39:22 +00:00
return qs422016
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:596
2023-05-10 12:38:13 +00:00
}
2023-07-27 13:13:13 +00:00
//line app/vmalert/web.qtpl:599
2023-05-10 12:38:13 +00:00
func isNoMatch ( r APIRule ) bool {
return r . LastSamples == 0 && r . LastSeriesFetched != nil && * r . LastSeriesFetched == 0
2021-09-07 19:39:22 +00:00
}