mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-15 00:13:30 +01:00
lib/promscrape: show the number of samples collected during the last scrape at /targets and /api/v1/targets pages
Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1377
This commit is contained in:
parent
fb8114ad9c
commit
5f91a701fa
@ -7,6 +7,7 @@ sort: 15
|
|||||||
## tip
|
## tip
|
||||||
|
|
||||||
* FEATURE: vmagent: add service discovery for DigitalOcean (aka [digitalocean_sd_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#digitalocean_sd_config)). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1367).
|
* FEATURE: vmagent: add service discovery for DigitalOcean (aka [digitalocean_sd_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#digitalocean_sd_config)). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1367).
|
||||||
|
* FEATURE: vmagent: show the number of samples the target returned during the last scrape on `/targets` and `/api/v1/targets` pages. This should simplify debugging targets, which may return too big or too low number of samples. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1377).
|
||||||
|
|
||||||
|
|
||||||
## [v1.61.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.61.1)
|
## [v1.61.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.61.1)
|
||||||
|
@ -324,7 +324,7 @@ func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error
|
|||||||
// body must be released only after wc is released, since wc refers to body.
|
// body must be released only after wc is released, since wc refers to body.
|
||||||
sw.prevBodyLen = len(body.B)
|
sw.prevBodyLen = len(body.B)
|
||||||
leveledbytebufferpool.Put(body)
|
leveledbytebufferpool.Put(body)
|
||||||
tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), err)
|
tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), samplesScraped, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,7 +391,7 @@ func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error {
|
|||||||
sw.prevLabelsLen = len(wc.labels)
|
sw.prevLabelsLen = len(wc.labels)
|
||||||
wc.reset()
|
wc.reset()
|
||||||
writeRequestCtxPool.Put(wc)
|
writeRequestCtxPool.Put(wc)
|
||||||
tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), err)
|
tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), samplesScraped, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,8 @@ job={%q= js.job %} ({%d js.upCount %}/{%d js.targetsTotal %} up)
|
|||||||
{% if showOriginLabels %}, originalLabels={%s= ol %}{% endif %},
|
{% if showOriginLabels %}, originalLabels={%s= ol %}{% endif %},
|
||||||
last_scrape={%f.3 ts.lastScrapeTime.Seconds() %}s ago,
|
last_scrape={%f.3 ts.lastScrapeTime.Seconds() %}s ago,
|
||||||
scrape_duration={%f.3 ts.scrapeDuration.Seconds() %}s,
|
scrape_duration={%f.3 ts.scrapeDuration.Seconds() %}s,
|
||||||
error={%q= ts.error %}
|
samples_scraped={%d ts.samplesScraped %},
|
||||||
|
error={%q= ts.errMsg %}
|
||||||
{% newline %}
|
{% newline %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -62,6 +63,7 @@ job={%q= js.job %} ({%d js.upCount %}/{%d js.targetsTotal %} up)
|
|||||||
<th scope="col">Labels</th>
|
<th scope="col">Labels</th>
|
||||||
<th scope="col">Last Scrape</th>
|
<th scope="col">Last Scrape</th>
|
||||||
<th scope="col">Scrape Duration</th>
|
<th scope="col">Scrape Duration</th>
|
||||||
|
<th scope="col">Samples Scraped</th>
|
||||||
<th scope="col">Error</th>
|
<th scope="col">Error</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@ -76,7 +78,8 @@ job={%q= js.job %} ({%d js.upCount %}/{%d js.targetsTotal %} up)
|
|||||||
</td>
|
</td>
|
||||||
<td>{%f.3 ts.lastScrapeTime.Seconds() %}s ago</td>
|
<td>{%f.3 ts.lastScrapeTime.Seconds() %}s ago</td>
|
||||||
<td>{%f.3 ts.scrapeDuration.Seconds() %}s</td>
|
<td>{%f.3 ts.scrapeDuration.Seconds() %}s</td>
|
||||||
<td>{%s ts.error %}</td>
|
<td>{%d ts.samplesScraped %}</td>
|
||||||
|
<td>{%s ts.errMsg %}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -94,18 +94,18 @@ func StreamTargetsResponsePlain(qw422016 *qt422016.Writer, jts []jobTargetsStatu
|
|||||||
//line lib/promscrape/targets_response.qtpl:21
|
//line lib/promscrape/targets_response.qtpl:21
|
||||||
qw422016.N().FPrec(ts.scrapeDuration.Seconds(), 3)
|
qw422016.N().FPrec(ts.scrapeDuration.Seconds(), 3)
|
||||||
//line lib/promscrape/targets_response.qtpl:21
|
//line lib/promscrape/targets_response.qtpl:21
|
||||||
qw422016.N().S(`s, error=`)
|
qw422016.N().S(`s, samples_scraped=`)
|
||||||
//line lib/promscrape/targets_response.qtpl:22
|
//line lib/promscrape/targets_response.qtpl:22
|
||||||
qw422016.N().Q(ts.error)
|
qw422016.N().D(ts.samplesScraped)
|
||||||
//line lib/promscrape/targets_response.qtpl:22
|
//line lib/promscrape/targets_response.qtpl:22
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(`, error=`)
|
||||||
//line lib/promscrape/targets_response.qtpl:23
|
//line lib/promscrape/targets_response.qtpl:23
|
||||||
qw422016.N().S(`
|
qw422016.N().Q(ts.errMsg)
|
||||||
`)
|
|
||||||
//line lib/promscrape/targets_response.qtpl:23
|
//line lib/promscrape/targets_response.qtpl:23
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:24
|
//line lib/promscrape/targets_response.qtpl:24
|
||||||
}
|
qw422016.N().S(`
|
||||||
|
`)
|
||||||
//line lib/promscrape/targets_response.qtpl:24
|
//line lib/promscrape/targets_response.qtpl:24
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:25
|
//line lib/promscrape/targets_response.qtpl:25
|
||||||
@ -113,261 +113,269 @@ func StreamTargetsResponsePlain(qw422016 *qt422016.Writer, jts []jobTargetsStatu
|
|||||||
//line lib/promscrape/targets_response.qtpl:25
|
//line lib/promscrape/targets_response.qtpl:25
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:26
|
//line lib/promscrape/targets_response.qtpl:26
|
||||||
qw422016.N().S(`
|
}
|
||||||
`)
|
|
||||||
//line lib/promscrape/targets_response.qtpl:26
|
//line lib/promscrape/targets_response.qtpl:26
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:27
|
||||||
|
qw422016.N().S(`
|
||||||
|
`)
|
||||||
|
//line lib/promscrape/targets_response.qtpl:27
|
||||||
|
qw422016.N().S(` `)
|
||||||
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
func WriteTargetsResponsePlain(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, showOriginLabels bool) {
|
func WriteTargetsResponsePlain(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, showOriginLabels bool) {
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
StreamTargetsResponsePlain(qw422016, jts, showOriginLabels)
|
StreamTargetsResponsePlain(qw422016, jts, showOriginLabels)
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
func TargetsResponsePlain(jts []jobTargetsStatuses, showOriginLabels bool) string {
|
func TargetsResponsePlain(jts []jobTargetsStatuses, showOriginLabels bool) string {
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
WriteTargetsResponsePlain(qb422016, jts, showOriginLabels)
|
WriteTargetsResponsePlain(qb422016, jts, showOriginLabels)
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
return qs422016
|
return qs422016
|
||||||
//line lib/promscrape/targets_response.qtpl:28
|
//line lib/promscrape/targets_response.qtpl:29
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:30
|
//line lib/promscrape/targets_response.qtpl:31
|
||||||
func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, jts []jobTargetsStatuses, redirectPath string, onlyUnhealthy bool) {
|
func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, jts []jobTargetsStatuses, redirectPath string, onlyUnhealthy bool) {
|
||||||
//line lib/promscrape/targets_response.qtpl:30
|
//line lib/promscrape/targets_response.qtpl:31
|
||||||
qw422016.N().S(` <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> <title>Scrape targets</title> </head> <body class="m-3"> <h1>Scrape targets</h1> <div> <button type="button" class="btn `)
|
qw422016.N().S(` <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> <title>Scrape targets</title> </head> <body class="m-3"> <h1>Scrape targets</h1> <div> <button type="button" class="btn `)
|
||||||
//line lib/promscrape/targets_response.qtpl:42
|
//line lib/promscrape/targets_response.qtpl:43
|
||||||
if !onlyUnhealthy {
|
if !onlyUnhealthy {
|
||||||
//line lib/promscrape/targets_response.qtpl:42
|
//line lib/promscrape/targets_response.qtpl:43
|
||||||
qw422016.N().S(`btn-primary`)
|
qw422016.N().S(`btn-primary`)
|
||||||
//line lib/promscrape/targets_response.qtpl:42
|
//line lib/promscrape/targets_response.qtpl:43
|
||||||
} else {
|
} else {
|
||||||
//line lib/promscrape/targets_response.qtpl:42
|
//line lib/promscrape/targets_response.qtpl:43
|
||||||
qw422016.N().S(`btn-secondary`)
|
qw422016.N().S(`btn-secondary`)
|
||||||
//line lib/promscrape/targets_response.qtpl:42
|
//line lib/promscrape/targets_response.qtpl:43
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:42
|
//line lib/promscrape/targets_response.qtpl:43
|
||||||
qw422016.N().S(`" `)
|
qw422016.N().S(`" `)
|
||||||
//line lib/promscrape/targets_response.qtpl:43
|
//line lib/promscrape/targets_response.qtpl:44
|
||||||
if onlyUnhealthy {
|
if onlyUnhealthy {
|
||||||
//line lib/promscrape/targets_response.qtpl:43
|
//line lib/promscrape/targets_response.qtpl:44
|
||||||
qw422016.N().S(`onclick="location.href='`)
|
qw422016.N().S(`onclick="location.href='`)
|
||||||
//line lib/promscrape/targets_response.qtpl:43
|
//line lib/promscrape/targets_response.qtpl:44
|
||||||
qw422016.E().S(redirectPath)
|
qw422016.E().S(redirectPath)
|
||||||
//line lib/promscrape/targets_response.qtpl:43
|
//line lib/promscrape/targets_response.qtpl:44
|
||||||
qw422016.N().S(`'"`)
|
qw422016.N().S(`'"`)
|
||||||
//line lib/promscrape/targets_response.qtpl:43
|
//line lib/promscrape/targets_response.qtpl:44
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:43
|
//line lib/promscrape/targets_response.qtpl:44
|
||||||
qw422016.N().S(`> All </button> <button type="button" class="btn `)
|
qw422016.N().S(`> All </button> <button type="button" class="btn `)
|
||||||
//line lib/promscrape/targets_response.qtpl:46
|
//line lib/promscrape/targets_response.qtpl:47
|
||||||
if onlyUnhealthy {
|
if onlyUnhealthy {
|
||||||
//line lib/promscrape/targets_response.qtpl:46
|
//line lib/promscrape/targets_response.qtpl:47
|
||||||
qw422016.N().S(`btn-primary`)
|
qw422016.N().S(`btn-primary`)
|
||||||
//line lib/promscrape/targets_response.qtpl:46
|
//line lib/promscrape/targets_response.qtpl:47
|
||||||
} else {
|
} else {
|
||||||
//line lib/promscrape/targets_response.qtpl:46
|
//line lib/promscrape/targets_response.qtpl:47
|
||||||
qw422016.N().S(`btn-secondary`)
|
qw422016.N().S(`btn-secondary`)
|
||||||
//line lib/promscrape/targets_response.qtpl:46
|
//line lib/promscrape/targets_response.qtpl:47
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:46
|
//line lib/promscrape/targets_response.qtpl:47
|
||||||
qw422016.N().S(`" `)
|
qw422016.N().S(`" `)
|
||||||
//line lib/promscrape/targets_response.qtpl:47
|
//line lib/promscrape/targets_response.qtpl:48
|
||||||
if !onlyUnhealthy {
|
if !onlyUnhealthy {
|
||||||
//line lib/promscrape/targets_response.qtpl:47
|
//line lib/promscrape/targets_response.qtpl:48
|
||||||
qw422016.N().S(`onclick="location.href='`)
|
qw422016.N().S(`onclick="location.href='`)
|
||||||
//line lib/promscrape/targets_response.qtpl:47
|
//line lib/promscrape/targets_response.qtpl:48
|
||||||
qw422016.N().S(redirectPath)
|
qw422016.N().S(redirectPath)
|
||||||
//line lib/promscrape/targets_response.qtpl:47
|
//line lib/promscrape/targets_response.qtpl:48
|
||||||
qw422016.N().S(`?show_only_unhealthy=true'"`)
|
qw422016.N().S(`?show_only_unhealthy=true'"`)
|
||||||
//line lib/promscrape/targets_response.qtpl:47
|
//line lib/promscrape/targets_response.qtpl:48
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:47
|
//line lib/promscrape/targets_response.qtpl:48
|
||||||
qw422016.N().S(`> Unhealthy </button> </div> `)
|
qw422016.N().S(`> Unhealthy </button> </div> `)
|
||||||
//line lib/promscrape/targets_response.qtpl:51
|
//line lib/promscrape/targets_response.qtpl:52
|
||||||
for _, js := range jts {
|
for _, js := range jts {
|
||||||
//line lib/promscrape/targets_response.qtpl:51
|
|
||||||
qw422016.N().S(` `)
|
|
||||||
//line lib/promscrape/targets_response.qtpl:52
|
//line lib/promscrape/targets_response.qtpl:52
|
||||||
|
qw422016.N().S(` `)
|
||||||
|
//line lib/promscrape/targets_response.qtpl:53
|
||||||
if onlyUnhealthy && js.upCount == js.targetsTotal {
|
if onlyUnhealthy && js.upCount == js.targetsTotal {
|
||||||
//line lib/promscrape/targets_response.qtpl:52
|
//line lib/promscrape/targets_response.qtpl:53
|
||||||
continue
|
continue
|
||||||
//line lib/promscrape/targets_response.qtpl:52
|
//line lib/promscrape/targets_response.qtpl:53
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:52
|
//line lib/promscrape/targets_response.qtpl:53
|
||||||
qw422016.N().S(` <div> <h4> <a>`)
|
qw422016.N().S(` <div> <h4> <a>`)
|
||||||
//line lib/promscrape/targets_response.qtpl:55
|
//line lib/promscrape/targets_response.qtpl:56
|
||||||
qw422016.E().S(js.job)
|
qw422016.E().S(js.job)
|
||||||
//line lib/promscrape/targets_response.qtpl:55
|
//line lib/promscrape/targets_response.qtpl:56
|
||||||
qw422016.N().S(` (`)
|
qw422016.N().S(` (`)
|
||||||
//line lib/promscrape/targets_response.qtpl:55
|
//line lib/promscrape/targets_response.qtpl:56
|
||||||
qw422016.N().D(js.upCount)
|
qw422016.N().D(js.upCount)
|
||||||
//line lib/promscrape/targets_response.qtpl:55
|
//line lib/promscrape/targets_response.qtpl:56
|
||||||
qw422016.N().S(`/`)
|
qw422016.N().S(`/`)
|
||||||
//line lib/promscrape/targets_response.qtpl:55
|
//line lib/promscrape/targets_response.qtpl:56
|
||||||
qw422016.N().D(js.targetsTotal)
|
qw422016.N().D(js.targetsTotal)
|
||||||
//line lib/promscrape/targets_response.qtpl:55
|
//line lib/promscrape/targets_response.qtpl:56
|
||||||
qw422016.N().S(` up)</a> </h4> <table class="table table-striped table-hover table-bordered table-sm"> <thead> <tr> <th scope="col">Endpoint</th> <th scope="col">State</th> <th scope="col">Labels</th> <th scope="col">Last Scrape</th> <th scope="col">Scrape Duration</th> <th scope="col">Error</th> </tr> </thead> <tbody> `)
|
qw422016.N().S(` up)</a> </h4> <table class="table table-striped table-hover table-bordered table-sm"> <thead> <tr> <th scope="col">Endpoint</th> <th scope="col">State</th> <th scope="col">Labels</th> <th scope="col">Last Scrape</th> <th scope="col">Scrape Duration</th> <th scope="col">Samples Scraped</th> <th scope="col">Error</th> </tr> </thead> <tbody> `)
|
||||||
//line lib/promscrape/targets_response.qtpl:69
|
//line lib/promscrape/targets_response.qtpl:71
|
||||||
for _, ts := range js.targetsStatus {
|
for _, ts := range js.targetsStatus {
|
||||||
//line lib/promscrape/targets_response.qtpl:69
|
//line lib/promscrape/targets_response.qtpl:71
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:70
|
//line lib/promscrape/targets_response.qtpl:72
|
||||||
if onlyUnhealthy && ts.up {
|
if onlyUnhealthy && ts.up {
|
||||||
//line lib/promscrape/targets_response.qtpl:70
|
//line lib/promscrape/targets_response.qtpl:72
|
||||||
continue
|
continue
|
||||||
//line lib/promscrape/targets_response.qtpl:70
|
//line lib/promscrape/targets_response.qtpl:72
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:70
|
//line lib/promscrape/targets_response.qtpl:72
|
||||||
qw422016.N().S(` <tr `)
|
qw422016.N().S(` <tr `)
|
||||||
//line lib/promscrape/targets_response.qtpl:71
|
//line lib/promscrape/targets_response.qtpl:73
|
||||||
if !ts.up {
|
if !ts.up {
|
||||||
//line lib/promscrape/targets_response.qtpl:71
|
//line lib/promscrape/targets_response.qtpl:73
|
||||||
qw422016.N().S(`class="alert alert-danger" role="alert"`)
|
qw422016.N().S(`class="alert alert-danger" role="alert"`)
|
||||||
//line lib/promscrape/targets_response.qtpl:71
|
//line lib/promscrape/targets_response.qtpl:73
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:71
|
//line lib/promscrape/targets_response.qtpl:73
|
||||||
qw422016.N().S(`> <td><a href="`)
|
qw422016.N().S(`> <td><a href="`)
|
||||||
//line lib/promscrape/targets_response.qtpl:72
|
//line lib/promscrape/targets_response.qtpl:74
|
||||||
qw422016.E().S(ts.endpoint)
|
qw422016.E().S(ts.endpoint)
|
||||||
//line lib/promscrape/targets_response.qtpl:72
|
//line lib/promscrape/targets_response.qtpl:74
|
||||||
qw422016.N().S(`">`)
|
qw422016.N().S(`">`)
|
||||||
//line lib/promscrape/targets_response.qtpl:72
|
//line lib/promscrape/targets_response.qtpl:74
|
||||||
qw422016.E().S(ts.endpoint)
|
qw422016.E().S(ts.endpoint)
|
||||||
//line lib/promscrape/targets_response.qtpl:72
|
//line lib/promscrape/targets_response.qtpl:74
|
||||||
qw422016.N().S(`</a><br></td> <td>`)
|
qw422016.N().S(`</a><br></td> <td>`)
|
||||||
//line lib/promscrape/targets_response.qtpl:73
|
//line lib/promscrape/targets_response.qtpl:75
|
||||||
if ts.up {
|
if ts.up {
|
||||||
//line lib/promscrape/targets_response.qtpl:73
|
//line lib/promscrape/targets_response.qtpl:75
|
||||||
qw422016.N().S(`UP`)
|
qw422016.N().S(`UP`)
|
||||||
//line lib/promscrape/targets_response.qtpl:73
|
//line lib/promscrape/targets_response.qtpl:75
|
||||||
} else {
|
} else {
|
||||||
//line lib/promscrape/targets_response.qtpl:73
|
//line lib/promscrape/targets_response.qtpl:75
|
||||||
qw422016.N().S(`DOWN`)
|
qw422016.N().S(`DOWN`)
|
||||||
//line lib/promscrape/targets_response.qtpl:73
|
//line lib/promscrape/targets_response.qtpl:75
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:73
|
//line lib/promscrape/targets_response.qtpl:75
|
||||||
qw422016.N().S(`</td> <td title="Original labels: `)
|
qw422016.N().S(`</td> <td title="Original labels: `)
|
||||||
//line lib/promscrape/targets_response.qtpl:74
|
//line lib/promscrape/targets_response.qtpl:76
|
||||||
streamformatLabel(qw422016, ts.originalLabels)
|
streamformatLabel(qw422016, ts.originalLabels)
|
||||||
//line lib/promscrape/targets_response.qtpl:74
|
//line lib/promscrape/targets_response.qtpl:76
|
||||||
qw422016.N().S(`"> `)
|
qw422016.N().S(`"> `)
|
||||||
//line lib/promscrape/targets_response.qtpl:75
|
//line lib/promscrape/targets_response.qtpl:77
|
||||||
streamformatLabel(qw422016, ts.labels)
|
streamformatLabel(qw422016, ts.labels)
|
||||||
//line lib/promscrape/targets_response.qtpl:75
|
//line lib/promscrape/targets_response.qtpl:77
|
||||||
qw422016.N().S(` </td> <td>`)
|
qw422016.N().S(` </td> <td>`)
|
||||||
//line lib/promscrape/targets_response.qtpl:77
|
//line lib/promscrape/targets_response.qtpl:79
|
||||||
qw422016.N().FPrec(ts.lastScrapeTime.Seconds(), 3)
|
qw422016.N().FPrec(ts.lastScrapeTime.Seconds(), 3)
|
||||||
//line lib/promscrape/targets_response.qtpl:77
|
//line lib/promscrape/targets_response.qtpl:79
|
||||||
qw422016.N().S(`s ago</td> <td>`)
|
qw422016.N().S(`s ago</td> <td>`)
|
||||||
//line lib/promscrape/targets_response.qtpl:78
|
//line lib/promscrape/targets_response.qtpl:80
|
||||||
qw422016.N().FPrec(ts.scrapeDuration.Seconds(), 3)
|
qw422016.N().FPrec(ts.scrapeDuration.Seconds(), 3)
|
||||||
//line lib/promscrape/targets_response.qtpl:78
|
//line lib/promscrape/targets_response.qtpl:80
|
||||||
qw422016.N().S(`s</td> <td>`)
|
qw422016.N().S(`s</td> <td>`)
|
||||||
//line lib/promscrape/targets_response.qtpl:79
|
//line lib/promscrape/targets_response.qtpl:81
|
||||||
qw422016.E().S(ts.error)
|
qw422016.N().D(ts.samplesScraped)
|
||||||
//line lib/promscrape/targets_response.qtpl:79
|
//line lib/promscrape/targets_response.qtpl:81
|
||||||
|
qw422016.N().S(`</td> <td>`)
|
||||||
|
//line lib/promscrape/targets_response.qtpl:82
|
||||||
|
qw422016.E().S(ts.errMsg)
|
||||||
|
//line lib/promscrape/targets_response.qtpl:82
|
||||||
qw422016.N().S(`</td> </tr> `)
|
qw422016.N().S(`</td> </tr> `)
|
||||||
//line lib/promscrape/targets_response.qtpl:81
|
//line lib/promscrape/targets_response.qtpl:84
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:81
|
//line lib/promscrape/targets_response.qtpl:84
|
||||||
qw422016.N().S(` </tbody> </table> </div> `)
|
qw422016.N().S(` </tbody> </table> </div> `)
|
||||||
//line lib/promscrape/targets_response.qtpl:85
|
//line lib/promscrape/targets_response.qtpl:88
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:85
|
//line lib/promscrape/targets_response.qtpl:88
|
||||||
qw422016.N().S(` </body> </html> `)
|
qw422016.N().S(` </body> </html> `)
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
func WriteTargetsResponseHTML(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, redirectPath string, onlyUnhealthy bool) {
|
func WriteTargetsResponseHTML(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, redirectPath string, onlyUnhealthy bool) {
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
StreamTargetsResponseHTML(qw422016, jts, redirectPath, onlyUnhealthy)
|
StreamTargetsResponseHTML(qw422016, jts, redirectPath, onlyUnhealthy)
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
func TargetsResponseHTML(jts []jobTargetsStatuses, redirectPath string, onlyUnhealthy bool) string {
|
func TargetsResponseHTML(jts []jobTargetsStatuses, redirectPath string, onlyUnhealthy bool) string {
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
WriteTargetsResponseHTML(qb422016, jts, redirectPath, onlyUnhealthy)
|
WriteTargetsResponseHTML(qb422016, jts, redirectPath, onlyUnhealthy)
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
return qs422016
|
return qs422016
|
||||||
//line lib/promscrape/targets_response.qtpl:88
|
//line lib/promscrape/targets_response.qtpl:91
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:90
|
//line lib/promscrape/targets_response.qtpl:93
|
||||||
func streamformatLabel(qw422016 *qt422016.Writer, labels []prompbmarshal.Label) {
|
func streamformatLabel(qw422016 *qt422016.Writer, labels []prompbmarshal.Label) {
|
||||||
//line lib/promscrape/targets_response.qtpl:90
|
//line lib/promscrape/targets_response.qtpl:93
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:91
|
//line lib/promscrape/targets_response.qtpl:94
|
||||||
for _, label := range labels {
|
for _, label := range labels {
|
||||||
//line lib/promscrape/targets_response.qtpl:91
|
//line lib/promscrape/targets_response.qtpl:94
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:92
|
//line lib/promscrape/targets_response.qtpl:95
|
||||||
qw422016.E().S(label.Name)
|
qw422016.E().S(label.Name)
|
||||||
//line lib/promscrape/targets_response.qtpl:92
|
//line lib/promscrape/targets_response.qtpl:95
|
||||||
qw422016.N().S(`=`)
|
qw422016.N().S(`=`)
|
||||||
//line lib/promscrape/targets_response.qtpl:92
|
//line lib/promscrape/targets_response.qtpl:95
|
||||||
qw422016.E().Q(label.Value)
|
qw422016.E().Q(label.Value)
|
||||||
//line lib/promscrape/targets_response.qtpl:92
|
//line lib/promscrape/targets_response.qtpl:95
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:92
|
//line lib/promscrape/targets_response.qtpl:95
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:92
|
//line lib/promscrape/targets_response.qtpl:95
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:93
|
//line lib/promscrape/targets_response.qtpl:96
|
||||||
}
|
}
|
||||||
//line lib/promscrape/targets_response.qtpl:93
|
//line lib/promscrape/targets_response.qtpl:96
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
func writeformatLabel(qq422016 qtio422016.Writer, labels []prompbmarshal.Label) {
|
func writeformatLabel(qq422016 qtio422016.Writer, labels []prompbmarshal.Label) {
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
streamformatLabel(qw422016, labels)
|
streamformatLabel(qw422016, labels)
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
}
|
}
|
||||||
|
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
func formatLabel(labels []prompbmarshal.Label) string {
|
func formatLabel(labels []prompbmarshal.Label) string {
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
writeformatLabel(qb422016, labels)
|
writeformatLabel(qb422016, labels)
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
return qs422016
|
return qs422016
|
||||||
//line lib/promscrape/targets_response.qtpl:94
|
//line lib/promscrape/targets_response.qtpl:97
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ func (tsm *targetStatusMap) Unregister(sw *ScrapeWork) {
|
|||||||
tsm.mu.Unlock()
|
tsm.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tsm *targetStatusMap) Update(sw *ScrapeWork, group string, up bool, scrapeTime, scrapeDuration int64, err error) {
|
func (tsm *targetStatusMap) Update(sw *ScrapeWork, group string, up bool, scrapeTime, scrapeDuration int64, samplesScraped int, err error) {
|
||||||
tsm.mu.Lock()
|
tsm.mu.Lock()
|
||||||
ts := tsm.m[sw]
|
ts := tsm.m[sw]
|
||||||
if ts == nil {
|
if ts == nil {
|
||||||
@ -101,6 +101,7 @@ func (tsm *targetStatusMap) Update(sw *ScrapeWork, group string, up bool, scrape
|
|||||||
ts.scrapeGroup = group
|
ts.scrapeGroup = group
|
||||||
ts.scrapeTime = scrapeTime
|
ts.scrapeTime = scrapeTime
|
||||||
ts.scrapeDuration = scrapeDuration
|
ts.scrapeDuration = scrapeDuration
|
||||||
|
ts.samplesScraped = samplesScraped
|
||||||
ts.err = err
|
ts.err = err
|
||||||
tsm.mu.Unlock()
|
tsm.mu.Unlock()
|
||||||
}
|
}
|
||||||
@ -156,6 +157,7 @@ func (tsm *targetStatusMap) WriteActiveTargetsJSON(w io.Writer) {
|
|||||||
fmt.Fprintf(w, `,"lastError":%q`, errMsg)
|
fmt.Fprintf(w, `,"lastError":%q`, errMsg)
|
||||||
fmt.Fprintf(w, `,"lastScrape":%q`, time.Unix(st.scrapeTime/1000, (st.scrapeTime%1000)*1e6).Format(time.RFC3339Nano))
|
fmt.Fprintf(w, `,"lastScrape":%q`, time.Unix(st.scrapeTime/1000, (st.scrapeTime%1000)*1e6).Format(time.RFC3339Nano))
|
||||||
fmt.Fprintf(w, `,"lastScrapeDuration":%g`, (time.Millisecond * time.Duration(st.scrapeDuration)).Seconds())
|
fmt.Fprintf(w, `,"lastScrapeDuration":%g`, (time.Millisecond * time.Duration(st.scrapeDuration)).Seconds())
|
||||||
|
fmt.Fprintf(w, `,"lastSamplesScraped":%d`, st.samplesScraped)
|
||||||
state := "up"
|
state := "up"
|
||||||
if !st.up {
|
if !st.up {
|
||||||
state = "down"
|
state = "down"
|
||||||
@ -185,6 +187,7 @@ type targetStatus struct {
|
|||||||
scrapeGroup string
|
scrapeGroup string
|
||||||
scrapeTime int64
|
scrapeTime int64
|
||||||
scrapeDuration int64
|
scrapeDuration int64
|
||||||
|
samplesScraped int
|
||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +273,8 @@ type jobTargetStatus struct {
|
|||||||
originalLabels []prompbmarshal.Label
|
originalLabels []prompbmarshal.Label
|
||||||
lastScrapeTime time.Duration
|
lastScrapeTime time.Duration
|
||||||
scrapeDuration time.Duration
|
scrapeDuration time.Duration
|
||||||
error string
|
samplesScraped int
|
||||||
|
errMsg string
|
||||||
}
|
}
|
||||||
|
|
||||||
type jobTargetsStatuses struct {
|
type jobTargetsStatuses struct {
|
||||||
@ -313,7 +317,8 @@ func (tsm *targetStatusMap) getTargetsStatusByJob() []jobTargetsStatuses {
|
|||||||
originalLabels: st.sw.OriginalLabels,
|
originalLabels: st.sw.OriginalLabels,
|
||||||
lastScrapeTime: st.getDurationFromLastScrape(),
|
lastScrapeTime: st.getDurationFromLastScrape(),
|
||||||
scrapeDuration: time.Duration(st.scrapeDuration) * time.Millisecond,
|
scrapeDuration: time.Duration(st.scrapeDuration) * time.Millisecond,
|
||||||
error: errMsg,
|
samplesScraped: st.samplesScraped,
|
||||||
|
errMsg: errMsg,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
jts = append(jts, jobTargetsStatuses{
|
jts = append(jts, jobTargetsStatuses{
|
||||||
|
Loading…
Reference in New Issue
Block a user