From 31b42e9c57a20b255c16b8143de96332d26accd7 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 12 Feb 2022 18:40:29 +0200 Subject: [PATCH] lib/promscrape: add `expand all` and `collapse all` buttons to `/targets` page See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2021 --- docs/CHANGELOG.md | 3 +- lib/promscrape/targets_response.qtpl.go | 466 ----------------- ...argets_response.qtpl => targetstatus.qtpl} | 22 +- lib/promscrape/targetstatus.qtpl.go | 474 ++++++++++++++++++ 4 files changed, 497 insertions(+), 468 deletions(-) delete mode 100644 lib/promscrape/targets_response.qtpl.go rename lib/promscrape/{targets_response.qtpl => targetstatus.qtpl} (91%) create mode 100644 lib/promscrape/targetstatus.qtpl.go diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 2527f6106..02bdf7830 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -31,7 +31,8 @@ The following tip changes can be tested by building VictoriaMetrics components f * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): provide the ability to fetch target responses on behalf of `vmagent` by clicking the `response` link for the needed target at `/targets` page. This feature may be useful for debugging responses from targets located in isolated environments. * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): show the total number of scrapes and the total number of scrape errors per target at `/targets` page. This information may be useful when debugging unreliable scrape targets. * FEATURE: vmagent and single-node VictoriaMetrics: disallow unknown fields at `-promscrape.config` file. Previously unknown fields were allowed. This could lead to long-living silent config errors. The previous behaviour can be returned by passing `-promscrape.config.strictParse=false` command-line flag. -* FEATURE: add `__meta_kubernetes_endpointslice_label*` and `__meta_kubernetes_endpointslice_annotation*` labels for `role: endpointslice` targets in [kubernetes_sd_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config) to be consistent with other `role` values. See [this issue](https://github.com/prometheus/prometheus/issues/10284). +* FEATURE: vmagent: add `__meta_kubernetes_endpointslice_label*` and `__meta_kubernetes_endpointslice_annotation*` labels for `role: endpointslice` targets in [kubernetes_sd_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config) to be consistent with other `role` values. See [this issue](https://github.com/prometheus/prometheus/issues/10284). +* FEATURE: vmagent: add `collapse all` and `expand all` buttons to `http://vmagent:8429/targets` page. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2021). * FEATURE: vmagent: support Prometheus-like durations in `-promscrape.config`. See [this comment](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/817#issuecomment-1033384766). * BUGFIX: calculate [absent_over_time()](https://docs.victoriametrics.com/MetricsQL.html#absent_over_time) in the same way as Prometheus does. Previously it could return multiple time series instead of at most one time series like Prometheus does. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2130). diff --git a/lib/promscrape/targets_response.qtpl.go b/lib/promscrape/targets_response.qtpl.go deleted file mode 100644 index c5abd4e9a..000000000 --- a/lib/promscrape/targets_response.qtpl.go +++ /dev/null @@ -1,466 +0,0 @@ -// Code generated by qtc from "targets_response.qtpl". DO NOT EDIT. -// See https://github.com/valyala/quicktemplate for details. - -//line lib/promscrape/targets_response.qtpl:1 -package promscrape - -//line lib/promscrape/targets_response.qtpl:1 -import ( - "github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal" - "github.com/VictoriaMetrics/VictoriaMetrics/lib/promrelabel" - "time" -) - -//line lib/promscrape/targets_response.qtpl:9 -import ( - qtio422016 "io" - - qt422016 "github.com/valyala/quicktemplate" -) - -//line lib/promscrape/targets_response.qtpl:9 -var ( - _ = qtio422016.Copy - _ = qt422016.AcquireByteBuffer -) - -//line lib/promscrape/targets_response.qtpl:9 -func StreamTargetsResponsePlain(qw422016 *qt422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, showOriginLabels bool) { -//line lib/promscrape/targets_response.qtpl:11 - for _, js := range jts { -//line lib/promscrape/targets_response.qtpl:11 - qw422016.N().S(`job=`) -//line lib/promscrape/targets_response.qtpl:12 - qw422016.N().Q(js.job) -//line lib/promscrape/targets_response.qtpl:12 - qw422016.N().S(`(`) -//line lib/promscrape/targets_response.qtpl:12 - qw422016.N().D(js.upCount) -//line lib/promscrape/targets_response.qtpl:12 - qw422016.N().S(`/`) -//line lib/promscrape/targets_response.qtpl:12 - qw422016.N().D(js.targetsTotal) -//line lib/promscrape/targets_response.qtpl:12 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:12 - qw422016.N().S(`up)`) -//line lib/promscrape/targets_response.qtpl:13 - qw422016.N().S(` -`) -//line lib/promscrape/targets_response.qtpl:14 - for _, ts := range js.targetsStatus { -//line lib/promscrape/targets_response.qtpl:15 - qw422016.N().S("\t") -//line lib/promscrape/targets_response.qtpl:15 - qw422016.N().S(`state=`) -//line lib/promscrape/targets_response.qtpl:16 - if ts.up { -//line lib/promscrape/targets_response.qtpl:16 - qw422016.N().S(`up`) -//line lib/promscrape/targets_response.qtpl:16 - } else { -//line lib/promscrape/targets_response.qtpl:16 - qw422016.N().S(`down`) -//line lib/promscrape/targets_response.qtpl:16 - } -//line lib/promscrape/targets_response.qtpl:16 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:16 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:16 - qw422016.N().S(`endpoint=`) -//line lib/promscrape/targets_response.qtpl:17 - qw422016.N().S(ts.sw.Config.ScrapeURL) -//line lib/promscrape/targets_response.qtpl:17 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:17 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:17 - qw422016.N().S(`labels=`) -//line lib/promscrape/targets_response.qtpl:18 - qw422016.N().S(promLabelsString(promrelabel.FinalizeLabels(nil, ts.sw.Config.Labels))) -//line lib/promscrape/targets_response.qtpl:18 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:18 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:19 - if showOriginLabels { -//line lib/promscrape/targets_response.qtpl:19 - qw422016.N().S(`originalLabels=`) -//line lib/promscrape/targets_response.qtpl:19 - qw422016.N().S(promLabelsString(ts.sw.Config.OriginalLabels)) -//line lib/promscrape/targets_response.qtpl:19 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:19 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:19 - } -//line lib/promscrape/targets_response.qtpl:19 - qw422016.N().S(`scrapes_total=`) -//line lib/promscrape/targets_response.qtpl:20 - qw422016.N().D(ts.scrapesTotal) -//line lib/promscrape/targets_response.qtpl:20 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:20 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:20 - qw422016.N().S(`scrapes_failed=`) -//line lib/promscrape/targets_response.qtpl:21 - qw422016.N().D(ts.scrapesFailed) -//line lib/promscrape/targets_response.qtpl:21 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:21 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:21 - qw422016.N().S(`last_scrape=`) -//line lib/promscrape/targets_response.qtpl:22 - qw422016.N().FPrec(ts.getDurationFromLastScrape().Seconds(), 3) -//line lib/promscrape/targets_response.qtpl:22 - qw422016.N().S(`s ago,`) -//line lib/promscrape/targets_response.qtpl:22 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:22 - qw422016.N().S(`scrape_duration=`) -//line lib/promscrape/targets_response.qtpl:23 - qw422016.N().D(int(ts.scrapeDuration)) -//line lib/promscrape/targets_response.qtpl:23 - qw422016.N().S(`ms,`) -//line lib/promscrape/targets_response.qtpl:23 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:23 - qw422016.N().S(`samples_scraped=`) -//line lib/promscrape/targets_response.qtpl:24 - qw422016.N().D(ts.samplesScraped) -//line lib/promscrape/targets_response.qtpl:24 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:24 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:24 - qw422016.N().S(`error=`) -//line lib/promscrape/targets_response.qtpl:25 - if ts.err != nil { -//line lib/promscrape/targets_response.qtpl:25 - qw422016.N().S(ts.err.Error()) -//line lib/promscrape/targets_response.qtpl:25 - } -//line lib/promscrape/targets_response.qtpl:26 - qw422016.N().S(` -`) -//line lib/promscrape/targets_response.qtpl:27 - } -//line lib/promscrape/targets_response.qtpl:28 - } -//line lib/promscrape/targets_response.qtpl:30 - for _, jobName := range emptyJobs { -//line lib/promscrape/targets_response.qtpl:30 - qw422016.N().S(`job=`) -//line lib/promscrape/targets_response.qtpl:31 - qw422016.N().Q(jobName) -//line lib/promscrape/targets_response.qtpl:31 - qw422016.N().S(`(0/0 up)`) -//line lib/promscrape/targets_response.qtpl:32 - qw422016.N().S(` -`) -//line lib/promscrape/targets_response.qtpl:33 - } -//line lib/promscrape/targets_response.qtpl:35 -} - -//line lib/promscrape/targets_response.qtpl:35 -func WriteTargetsResponsePlain(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, showOriginLabels bool) { -//line lib/promscrape/targets_response.qtpl:35 - qw422016 := qt422016.AcquireWriter(qq422016) -//line lib/promscrape/targets_response.qtpl:35 - StreamTargetsResponsePlain(qw422016, jts, emptyJobs, showOriginLabels) -//line lib/promscrape/targets_response.qtpl:35 - qt422016.ReleaseWriter(qw422016) -//line lib/promscrape/targets_response.qtpl:35 -} - -//line lib/promscrape/targets_response.qtpl:35 -func TargetsResponsePlain(jts []jobTargetsStatuses, emptyJobs []string, showOriginLabels bool) string { -//line lib/promscrape/targets_response.qtpl:35 - qb422016 := qt422016.AcquireByteBuffer() -//line lib/promscrape/targets_response.qtpl:35 - WriteTargetsResponsePlain(qb422016, jts, emptyJobs, showOriginLabels) -//line lib/promscrape/targets_response.qtpl:35 - qs422016 := string(qb422016.B) -//line lib/promscrape/targets_response.qtpl:35 - qt422016.ReleaseByteBuffer(qb422016) -//line lib/promscrape/targets_response.qtpl:35 - return qs422016 -//line lib/promscrape/targets_response.qtpl:35 -} - -//line lib/promscrape/targets_response.qtpl:37 -func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, onlyUnhealthy bool) { -//line lib/promscrape/targets_response.qtpl:37 - qw422016.N().S(`Scrape targets

Scrape targets

`) -//line lib/promscrape/targets_response.qtpl:56 - for i, js := range jts { -//line lib/promscrape/targets_response.qtpl:57 - if onlyUnhealthy && js.upCount == js.targetsTotal { -//line lib/promscrape/targets_response.qtpl:57 - continue -//line lib/promscrape/targets_response.qtpl:57 - } -//line lib/promscrape/targets_response.qtpl:57 - qw422016.N().S(`

`) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.E().S(js.job) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.N().S(`(`) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.N().D(js.upCount) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.N().S(`/`) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.N().D(js.targetsTotal) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:60 - qw422016.N().S(`up)

`) -//line lib/promscrape/targets_response.qtpl:80 - for _, ts := range js.targetsStatus { -//line lib/promscrape/targets_response.qtpl:82 - endpoint := ts.sw.Config.ScrapeURL - targetID := getTargetID(ts.sw) - lastScrapeTime := ts.getDurationFromLastScrape() - -//line lib/promscrape/targets_response.qtpl:86 - if onlyUnhealthy && ts.up { -//line lib/promscrape/targets_response.qtpl:86 - continue -//line lib/promscrape/targets_response.qtpl:86 - } -//line lib/promscrape/targets_response.qtpl:86 - qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:112 - } -//line lib/promscrape/targets_response.qtpl:112 - qw422016.N().S(`
EndpointStateLabelsScrapesErrorsLast ScrapeDurationSamplesLast error
`) -//line lib/promscrape/targets_response.qtpl:88 - qw422016.E().S(endpoint) -//line lib/promscrape/targets_response.qtpl:88 - qw422016.N().S(` (response)`) -//line lib/promscrape/targets_response.qtpl:91 - if ts.up { -//line lib/promscrape/targets_response.qtpl:91 - qw422016.N().S(`UP`) -//line lib/promscrape/targets_response.qtpl:91 - } else { -//line lib/promscrape/targets_response.qtpl:91 - qw422016.N().S(`DOWN`) -//line lib/promscrape/targets_response.qtpl:91 - } -//line lib/promscrape/targets_response.qtpl:91 - qw422016.N().S(`
`) -//line lib/promscrape/targets_response.qtpl:94 - streamformatLabel(qw422016, promrelabel.FinalizeLabels(nil, ts.sw.Config.Labels)) -//line lib/promscrape/targets_response.qtpl:94 - qw422016.N().S(`
`) -//line lib/promscrape/targets_response.qtpl:100 - qw422016.N().D(ts.scrapesTotal) -//line lib/promscrape/targets_response.qtpl:100 - qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:101 - qw422016.N().D(ts.scrapesFailed) -//line lib/promscrape/targets_response.qtpl:101 - qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:103 - if lastScrapeTime < 365*24*time.Hour { -//line lib/promscrape/targets_response.qtpl:104 - qw422016.N().FPrec(lastScrapeTime.Seconds(), 3) -//line lib/promscrape/targets_response.qtpl:104 - qw422016.N().S(`s ago`) -//line lib/promscrape/targets_response.qtpl:105 - } else { -//line lib/promscrape/targets_response.qtpl:105 - qw422016.N().S(`none`) -//line lib/promscrape/targets_response.qtpl:107 - } -//line lib/promscrape/targets_response.qtpl:107 - qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:108 - qw422016.N().D(int(ts.scrapeDuration)) -//line lib/promscrape/targets_response.qtpl:108 - qw422016.N().S(`ms`) -//line lib/promscrape/targets_response.qtpl:109 - qw422016.N().D(ts.samplesScraped) -//line lib/promscrape/targets_response.qtpl:109 - qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:110 - if ts.err != nil { -//line lib/promscrape/targets_response.qtpl:110 - qw422016.E().S(ts.err.Error()) -//line lib/promscrape/targets_response.qtpl:110 - } -//line lib/promscrape/targets_response.qtpl:110 - qw422016.N().S(`
`) -//line lib/promscrape/targets_response.qtpl:117 - } -//line lib/promscrape/targets_response.qtpl:119 - for _, jobName := range emptyJobs { -//line lib/promscrape/targets_response.qtpl:119 - qw422016.N().S(`

`) -//line lib/promscrape/targets_response.qtpl:122 - qw422016.E().S(jobName) -//line lib/promscrape/targets_response.qtpl:122 - qw422016.N().S(`(0/0 up)

EndpointStateLabelsLast ScrapeScrape DurationSamples ScrapedError
`) -//line lib/promscrape/targets_response.qtpl:138 - } -//line lib/promscrape/targets_response.qtpl:138 - qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:141 -} - -//line lib/promscrape/targets_response.qtpl:141 -func WriteTargetsResponseHTML(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, onlyUnhealthy bool) { -//line lib/promscrape/targets_response.qtpl:141 - qw422016 := qt422016.AcquireWriter(qq422016) -//line lib/promscrape/targets_response.qtpl:141 - StreamTargetsResponseHTML(qw422016, jts, emptyJobs, onlyUnhealthy) -//line lib/promscrape/targets_response.qtpl:141 - qt422016.ReleaseWriter(qw422016) -//line lib/promscrape/targets_response.qtpl:141 -} - -//line lib/promscrape/targets_response.qtpl:141 -func TargetsResponseHTML(jts []jobTargetsStatuses, emptyJobs []string, onlyUnhealthy bool) string { -//line lib/promscrape/targets_response.qtpl:141 - qb422016 := qt422016.AcquireByteBuffer() -//line lib/promscrape/targets_response.qtpl:141 - WriteTargetsResponseHTML(qb422016, jts, emptyJobs, onlyUnhealthy) -//line lib/promscrape/targets_response.qtpl:141 - qs422016 := string(qb422016.B) -//line lib/promscrape/targets_response.qtpl:141 - qt422016.ReleaseByteBuffer(qb422016) -//line lib/promscrape/targets_response.qtpl:141 - return qs422016 -//line lib/promscrape/targets_response.qtpl:141 -} - -//line lib/promscrape/targets_response.qtpl:143 -func streamformatLabel(qw422016 *qt422016.Writer, labels []prompbmarshal.Label) { -//line lib/promscrape/targets_response.qtpl:143 - qw422016.N().S(`{`) -//line lib/promscrape/targets_response.qtpl:145 - for i, label := range labels { -//line lib/promscrape/targets_response.qtpl:146 - qw422016.E().S(label.Name) -//line lib/promscrape/targets_response.qtpl:146 - qw422016.N().S(`=`) -//line lib/promscrape/targets_response.qtpl:146 - qw422016.E().Q(label.Value) -//line lib/promscrape/targets_response.qtpl:147 - if i+1 < len(labels) { -//line lib/promscrape/targets_response.qtpl:147 - qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:147 - qw422016.N().S(` `) -//line lib/promscrape/targets_response.qtpl:147 - } -//line lib/promscrape/targets_response.qtpl:148 - } -//line lib/promscrape/targets_response.qtpl:148 - qw422016.N().S(`}`) -//line lib/promscrape/targets_response.qtpl:150 -} - -//line lib/promscrape/targets_response.qtpl:150 -func writeformatLabel(qq422016 qtio422016.Writer, labels []prompbmarshal.Label) { -//line lib/promscrape/targets_response.qtpl:150 - qw422016 := qt422016.AcquireWriter(qq422016) -//line lib/promscrape/targets_response.qtpl:150 - streamformatLabel(qw422016, labels) -//line lib/promscrape/targets_response.qtpl:150 - qt422016.ReleaseWriter(qw422016) -//line lib/promscrape/targets_response.qtpl:150 -} - -//line lib/promscrape/targets_response.qtpl:150 -func formatLabel(labels []prompbmarshal.Label) string { -//line lib/promscrape/targets_response.qtpl:150 - qb422016 := qt422016.AcquireByteBuffer() -//line lib/promscrape/targets_response.qtpl:150 - writeformatLabel(qb422016, labels) -//line lib/promscrape/targets_response.qtpl:150 - qs422016 := string(qb422016.B) -//line lib/promscrape/targets_response.qtpl:150 - qt422016.ReleaseByteBuffer(qb422016) -//line lib/promscrape/targets_response.qtpl:150 - return qs422016 -//line lib/promscrape/targets_response.qtpl:150 -} diff --git a/lib/promscrape/targets_response.qtpl b/lib/promscrape/targetstatus.qtpl similarity index 91% rename from lib/promscrape/targets_response.qtpl rename to lib/promscrape/targetstatus.qtpl index 1d50802ee..292a34551 100644 --- a/lib/promscrape/targets_response.qtpl +++ b/lib/promscrape/targetstatus.qtpl @@ -42,16 +42,36 @@ job={%q= jobName %} (0/0 up) Scrape targets +

Scrape targets

-
+
+ +
{% for i, js := range jts %} {% if onlyUnhealthy && js.upCount == js.targetsTotal %}{% continue %}{% endif %} diff --git a/lib/promscrape/targetstatus.qtpl.go b/lib/promscrape/targetstatus.qtpl.go new file mode 100644 index 000000000..534e2d4a7 --- /dev/null +++ b/lib/promscrape/targetstatus.qtpl.go @@ -0,0 +1,474 @@ +// Code generated by qtc from "targetstatus.qtpl". DO NOT EDIT. +// See https://github.com/valyala/quicktemplate for details. + +//line lib/promscrape/targetstatus.qtpl:1 +package promscrape + +//line lib/promscrape/targetstatus.qtpl:1 +import ( + "github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/promrelabel" + "time" +) + +//line lib/promscrape/targetstatus.qtpl:9 +import ( + qtio422016 "io" + + qt422016 "github.com/valyala/quicktemplate" +) + +//line lib/promscrape/targetstatus.qtpl:9 +var ( + _ = qtio422016.Copy + _ = qt422016.AcquireByteBuffer +) + +//line lib/promscrape/targetstatus.qtpl:9 +func StreamTargetsResponsePlain(qw422016 *qt422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, showOriginLabels bool) { +//line lib/promscrape/targetstatus.qtpl:11 + for _, js := range jts { +//line lib/promscrape/targetstatus.qtpl:11 + qw422016.N().S(`job=`) +//line lib/promscrape/targetstatus.qtpl:12 + qw422016.N().Q(js.job) +//line lib/promscrape/targetstatus.qtpl:12 + qw422016.N().S(`(`) +//line lib/promscrape/targetstatus.qtpl:12 + qw422016.N().D(js.upCount) +//line lib/promscrape/targetstatus.qtpl:12 + qw422016.N().S(`/`) +//line lib/promscrape/targetstatus.qtpl:12 + qw422016.N().D(js.targetsTotal) +//line lib/promscrape/targetstatus.qtpl:12 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:12 + qw422016.N().S(`up)`) +//line lib/promscrape/targetstatus.qtpl:13 + qw422016.N().S(` +`) +//line lib/promscrape/targetstatus.qtpl:14 + for _, ts := range js.targetsStatus { +//line lib/promscrape/targetstatus.qtpl:15 + qw422016.N().S("\t") +//line lib/promscrape/targetstatus.qtpl:15 + qw422016.N().S(`state=`) +//line lib/promscrape/targetstatus.qtpl:16 + if ts.up { +//line lib/promscrape/targetstatus.qtpl:16 + qw422016.N().S(`up`) +//line lib/promscrape/targetstatus.qtpl:16 + } else { +//line lib/promscrape/targetstatus.qtpl:16 + qw422016.N().S(`down`) +//line lib/promscrape/targetstatus.qtpl:16 + } +//line lib/promscrape/targetstatus.qtpl:16 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:16 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:16 + qw422016.N().S(`endpoint=`) +//line lib/promscrape/targetstatus.qtpl:17 + qw422016.N().S(ts.sw.Config.ScrapeURL) +//line lib/promscrape/targetstatus.qtpl:17 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:17 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:17 + qw422016.N().S(`labels=`) +//line lib/promscrape/targetstatus.qtpl:18 + qw422016.N().S(promLabelsString(promrelabel.FinalizeLabels(nil, ts.sw.Config.Labels))) +//line lib/promscrape/targetstatus.qtpl:18 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:18 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:19 + if showOriginLabels { +//line lib/promscrape/targetstatus.qtpl:19 + qw422016.N().S(`originalLabels=`) +//line lib/promscrape/targetstatus.qtpl:19 + qw422016.N().S(promLabelsString(ts.sw.Config.OriginalLabels)) +//line lib/promscrape/targetstatus.qtpl:19 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:19 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:19 + } +//line lib/promscrape/targetstatus.qtpl:19 + qw422016.N().S(`scrapes_total=`) +//line lib/promscrape/targetstatus.qtpl:20 + qw422016.N().D(ts.scrapesTotal) +//line lib/promscrape/targetstatus.qtpl:20 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:20 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:20 + qw422016.N().S(`scrapes_failed=`) +//line lib/promscrape/targetstatus.qtpl:21 + qw422016.N().D(ts.scrapesFailed) +//line lib/promscrape/targetstatus.qtpl:21 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:21 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:21 + qw422016.N().S(`last_scrape=`) +//line lib/promscrape/targetstatus.qtpl:22 + qw422016.N().FPrec(ts.getDurationFromLastScrape().Seconds(), 3) +//line lib/promscrape/targetstatus.qtpl:22 + qw422016.N().S(`s ago,`) +//line lib/promscrape/targetstatus.qtpl:22 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:22 + qw422016.N().S(`scrape_duration=`) +//line lib/promscrape/targetstatus.qtpl:23 + qw422016.N().D(int(ts.scrapeDuration)) +//line lib/promscrape/targetstatus.qtpl:23 + qw422016.N().S(`ms,`) +//line lib/promscrape/targetstatus.qtpl:23 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:23 + qw422016.N().S(`samples_scraped=`) +//line lib/promscrape/targetstatus.qtpl:24 + qw422016.N().D(ts.samplesScraped) +//line lib/promscrape/targetstatus.qtpl:24 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:24 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:24 + qw422016.N().S(`error=`) +//line lib/promscrape/targetstatus.qtpl:25 + if ts.err != nil { +//line lib/promscrape/targetstatus.qtpl:25 + qw422016.N().S(ts.err.Error()) +//line lib/promscrape/targetstatus.qtpl:25 + } +//line lib/promscrape/targetstatus.qtpl:26 + qw422016.N().S(` +`) +//line lib/promscrape/targetstatus.qtpl:27 + } +//line lib/promscrape/targetstatus.qtpl:28 + } +//line lib/promscrape/targetstatus.qtpl:30 + for _, jobName := range emptyJobs { +//line lib/promscrape/targetstatus.qtpl:30 + qw422016.N().S(`job=`) +//line lib/promscrape/targetstatus.qtpl:31 + qw422016.N().Q(jobName) +//line lib/promscrape/targetstatus.qtpl:31 + qw422016.N().S(`(0/0 up)`) +//line lib/promscrape/targetstatus.qtpl:32 + qw422016.N().S(` +`) +//line lib/promscrape/targetstatus.qtpl:33 + } +//line lib/promscrape/targetstatus.qtpl:35 +} + +//line lib/promscrape/targetstatus.qtpl:35 +func WriteTargetsResponsePlain(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, showOriginLabels bool) { +//line lib/promscrape/targetstatus.qtpl:35 + qw422016 := qt422016.AcquireWriter(qq422016) +//line lib/promscrape/targetstatus.qtpl:35 + StreamTargetsResponsePlain(qw422016, jts, emptyJobs, showOriginLabels) +//line lib/promscrape/targetstatus.qtpl:35 + qt422016.ReleaseWriter(qw422016) +//line lib/promscrape/targetstatus.qtpl:35 +} + +//line lib/promscrape/targetstatus.qtpl:35 +func TargetsResponsePlain(jts []jobTargetsStatuses, emptyJobs []string, showOriginLabels bool) string { +//line lib/promscrape/targetstatus.qtpl:35 + qb422016 := qt422016.AcquireByteBuffer() +//line lib/promscrape/targetstatus.qtpl:35 + WriteTargetsResponsePlain(qb422016, jts, emptyJobs, showOriginLabels) +//line lib/promscrape/targetstatus.qtpl:35 + qs422016 := string(qb422016.B) +//line lib/promscrape/targetstatus.qtpl:35 + qt422016.ReleaseByteBuffer(qb422016) +//line lib/promscrape/targetstatus.qtpl:35 + return qs422016 +//line lib/promscrape/targetstatus.qtpl:35 +} + +//line lib/promscrape/targetstatus.qtpl:37 +func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, onlyUnhealthy bool) { +//line lib/promscrape/targetstatus.qtpl:37 + qw422016.N().S(`Scrape targets

Scrape targets

`) +//line lib/promscrape/targetstatus.qtpl:76 + for i, js := range jts { +//line lib/promscrape/targetstatus.qtpl:77 + if onlyUnhealthy && js.upCount == js.targetsTotal { +//line lib/promscrape/targetstatus.qtpl:77 + continue +//line lib/promscrape/targetstatus.qtpl:77 + } +//line lib/promscrape/targetstatus.qtpl:77 + qw422016.N().S(`

`) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.E().S(js.job) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.N().S(`(`) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.N().D(js.upCount) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.N().S(`/`) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.N().D(js.targetsTotal) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:80 + qw422016.N().S(`up)

`) +//line lib/promscrape/targetstatus.qtpl:100 + for _, ts := range js.targetsStatus { +//line lib/promscrape/targetstatus.qtpl:102 + endpoint := ts.sw.Config.ScrapeURL + targetID := getTargetID(ts.sw) + lastScrapeTime := ts.getDurationFromLastScrape() + +//line lib/promscrape/targetstatus.qtpl:106 + if onlyUnhealthy && ts.up { +//line lib/promscrape/targetstatus.qtpl:106 + continue +//line lib/promscrape/targetstatus.qtpl:106 + } +//line lib/promscrape/targetstatus.qtpl:106 + qw422016.N().S(``) +//line lib/promscrape/targetstatus.qtpl:132 + } +//line lib/promscrape/targetstatus.qtpl:132 + qw422016.N().S(`
EndpointStateLabelsScrapesErrorsLast ScrapeDurationSamplesLast error
`) +//line lib/promscrape/targetstatus.qtpl:108 + qw422016.E().S(endpoint) +//line lib/promscrape/targetstatus.qtpl:108 + qw422016.N().S(` (response)`) +//line lib/promscrape/targetstatus.qtpl:111 + if ts.up { +//line lib/promscrape/targetstatus.qtpl:111 + qw422016.N().S(`UP`) +//line lib/promscrape/targetstatus.qtpl:111 + } else { +//line lib/promscrape/targetstatus.qtpl:111 + qw422016.N().S(`DOWN`) +//line lib/promscrape/targetstatus.qtpl:111 + } +//line lib/promscrape/targetstatus.qtpl:111 + qw422016.N().S(`
`) +//line lib/promscrape/targetstatus.qtpl:114 + streamformatLabel(qw422016, promrelabel.FinalizeLabels(nil, ts.sw.Config.Labels)) +//line lib/promscrape/targetstatus.qtpl:114 + qw422016.N().S(`
`) +//line lib/promscrape/targetstatus.qtpl:120 + qw422016.N().D(ts.scrapesTotal) +//line lib/promscrape/targetstatus.qtpl:120 + qw422016.N().S(``) +//line lib/promscrape/targetstatus.qtpl:121 + qw422016.N().D(ts.scrapesFailed) +//line lib/promscrape/targetstatus.qtpl:121 + qw422016.N().S(``) +//line lib/promscrape/targetstatus.qtpl:123 + if lastScrapeTime < 365*24*time.Hour { +//line lib/promscrape/targetstatus.qtpl:124 + qw422016.N().FPrec(lastScrapeTime.Seconds(), 3) +//line lib/promscrape/targetstatus.qtpl:124 + qw422016.N().S(`s ago`) +//line lib/promscrape/targetstatus.qtpl:125 + } else { +//line lib/promscrape/targetstatus.qtpl:125 + qw422016.N().S(`none`) +//line lib/promscrape/targetstatus.qtpl:127 + } +//line lib/promscrape/targetstatus.qtpl:127 + qw422016.N().S(``) +//line lib/promscrape/targetstatus.qtpl:128 + qw422016.N().D(int(ts.scrapeDuration)) +//line lib/promscrape/targetstatus.qtpl:128 + qw422016.N().S(`ms`) +//line lib/promscrape/targetstatus.qtpl:129 + qw422016.N().D(ts.samplesScraped) +//line lib/promscrape/targetstatus.qtpl:129 + qw422016.N().S(``) +//line lib/promscrape/targetstatus.qtpl:130 + if ts.err != nil { +//line lib/promscrape/targetstatus.qtpl:130 + qw422016.E().S(ts.err.Error()) +//line lib/promscrape/targetstatus.qtpl:130 + } +//line lib/promscrape/targetstatus.qtpl:130 + qw422016.N().S(`
`) +//line lib/promscrape/targetstatus.qtpl:137 + } +//line lib/promscrape/targetstatus.qtpl:139 + for _, jobName := range emptyJobs { +//line lib/promscrape/targetstatus.qtpl:139 + qw422016.N().S(`

`) +//line lib/promscrape/targetstatus.qtpl:142 + qw422016.E().S(jobName) +//line lib/promscrape/targetstatus.qtpl:142 + qw422016.N().S(`(0/0 up)

EndpointStateLabelsLast ScrapeScrape DurationSamples ScrapedError
`) +//line lib/promscrape/targetstatus.qtpl:158 + } +//line lib/promscrape/targetstatus.qtpl:158 + qw422016.N().S(``) +//line lib/promscrape/targetstatus.qtpl:161 +} + +//line lib/promscrape/targetstatus.qtpl:161 +func WriteTargetsResponseHTML(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, onlyUnhealthy bool) { +//line lib/promscrape/targetstatus.qtpl:161 + qw422016 := qt422016.AcquireWriter(qq422016) +//line lib/promscrape/targetstatus.qtpl:161 + StreamTargetsResponseHTML(qw422016, jts, emptyJobs, onlyUnhealthy) +//line lib/promscrape/targetstatus.qtpl:161 + qt422016.ReleaseWriter(qw422016) +//line lib/promscrape/targetstatus.qtpl:161 +} + +//line lib/promscrape/targetstatus.qtpl:161 +func TargetsResponseHTML(jts []jobTargetsStatuses, emptyJobs []string, onlyUnhealthy bool) string { +//line lib/promscrape/targetstatus.qtpl:161 + qb422016 := qt422016.AcquireByteBuffer() +//line lib/promscrape/targetstatus.qtpl:161 + WriteTargetsResponseHTML(qb422016, jts, emptyJobs, onlyUnhealthy) +//line lib/promscrape/targetstatus.qtpl:161 + qs422016 := string(qb422016.B) +//line lib/promscrape/targetstatus.qtpl:161 + qt422016.ReleaseByteBuffer(qb422016) +//line lib/promscrape/targetstatus.qtpl:161 + return qs422016 +//line lib/promscrape/targetstatus.qtpl:161 +} + +//line lib/promscrape/targetstatus.qtpl:163 +func streamformatLabel(qw422016 *qt422016.Writer, labels []prompbmarshal.Label) { +//line lib/promscrape/targetstatus.qtpl:163 + qw422016.N().S(`{`) +//line lib/promscrape/targetstatus.qtpl:165 + for i, label := range labels { +//line lib/promscrape/targetstatus.qtpl:166 + qw422016.E().S(label.Name) +//line lib/promscrape/targetstatus.qtpl:166 + qw422016.N().S(`=`) +//line lib/promscrape/targetstatus.qtpl:166 + qw422016.E().Q(label.Value) +//line lib/promscrape/targetstatus.qtpl:167 + if i+1 < len(labels) { +//line lib/promscrape/targetstatus.qtpl:167 + qw422016.N().S(`,`) +//line lib/promscrape/targetstatus.qtpl:167 + qw422016.N().S(` `) +//line lib/promscrape/targetstatus.qtpl:167 + } +//line lib/promscrape/targetstatus.qtpl:168 + } +//line lib/promscrape/targetstatus.qtpl:168 + qw422016.N().S(`}`) +//line lib/promscrape/targetstatus.qtpl:170 +} + +//line lib/promscrape/targetstatus.qtpl:170 +func writeformatLabel(qq422016 qtio422016.Writer, labels []prompbmarshal.Label) { +//line lib/promscrape/targetstatus.qtpl:170 + qw422016 := qt422016.AcquireWriter(qq422016) +//line lib/promscrape/targetstatus.qtpl:170 + streamformatLabel(qw422016, labels) +//line lib/promscrape/targetstatus.qtpl:170 + qt422016.ReleaseWriter(qw422016) +//line lib/promscrape/targetstatus.qtpl:170 +} + +//line lib/promscrape/targetstatus.qtpl:170 +func formatLabel(labels []prompbmarshal.Label) string { +//line lib/promscrape/targetstatus.qtpl:170 + qb422016 := qt422016.AcquireByteBuffer() +//line lib/promscrape/targetstatus.qtpl:170 + writeformatLabel(qb422016, labels) +//line lib/promscrape/targetstatus.qtpl:170 + qs422016 := string(qb422016.B) +//line lib/promscrape/targetstatus.qtpl:170 + qt422016.ReleaseByteBuffer(qb422016) +//line lib/promscrape/targetstatus.qtpl:170 + return qs422016 +//line lib/promscrape/targetstatus.qtpl:170 +}