diff --git a/docs/vmagent.md b/docs/vmagent.md
index 0dccdf3264..c8648f4f22 100644
--- a/docs/vmagent.md
+++ b/docs/vmagent.md
@@ -813,9 +813,15 @@ start a cluster of three `vmagent` instances, where each target is scraped by tw
 Every `vmagent` in the cluster exposes all the discovered targets at `http://vmagent:8429/service-discovery` page.
 Each discovered target on this page contains its status (`UP`, `DOWN` or `DROPPED` with the reason why the target has been dropped).
 If the target is dropped because of sharding to other `vmagent` instances in the cluster, then the status column contains
-`-promscrape.cluster.memberNum` values for `vmagent` instances where the given target is scraped. Note that `vmagent` shows
-up to `-promscrape.maxDroppedTargets` dropped targets on the `/service-discovery` page. Increase the `-promscrape.maxDroppedTargets` command-line flag value
-if the `/service-discovery` page misses some dropped targets.
+`-promscrape.cluster.memberNum` values for `vmagent` instances where the given target is scraped.
+
+The `/service-discovery` page provides links to the corresponding `vmagent` instances if `-promscrape.cluster.memberURLTemplate` command-line flag is set.
+Every occurrence of `%d` inside the `-promscrape.cluster.memberURLTemplate` is substituted with the `-promscrape.cluster.memberNum`
+for the corresponding `vmagent` instance. For examle, `-promscrape.cluster.memberURLTemplate='http://vmagent-instance-%d:8429/targets'`
+generates `http://vmagent-instance-42:8429/targets` url for `vmagent` instance, which runs with `-promscrape.cluster.memberNum=42`.
+
+Note that `vmagent` shows up to `-promscrape.maxDroppedTargets` dropped targets on the `/service-discovery` page.
+Increase the `-promscrape.maxDroppedTargets` command-line flag value if the `/service-discovery` page misses some dropped targets.
 
 If each target is scraped by multiple `vmagent` instances, then data deduplication must be enabled at remote storage pointed by `-remoteWrite.url`.
 The `-dedup.minScrapeInterval` must be set to the `scrape_interval` configured at `-promscrape.config`.
diff --git a/lib/promscrape/config.go b/lib/promscrape/config.go
index 5f8cb9e17b..4b60e86963 100644
--- a/lib/promscrape/config.go
+++ b/lib/promscrape/config.go
@@ -64,6 +64,10 @@ var (
 		"See also -promscrape.cluster.memberLabel . See https://docs.victoriametrics.com/vmagent.html#scraping-big-number-of-targets for more info")
 	clusterMemberLabel = flag.String("promscrape.cluster.memberLabel", "", "If non-empty, then the label with this name and the -promscrape.cluster.memberNum value "+
 		"is added to all the scraped metrics. See https://docs.victoriametrics.com/vmagent.html#scraping-big-number-of-targets for more info")
+	clusterMemberURLTemplate = flag.String("promscrape.cluster.memberURLTemplate", "", "An optional template for URL to access vmagent instance with the given -promscrape.cluster.memberNum value. "+
+		"Every %d occurence in the template is substituted with -promscrape.cluster.memberNum at urls to vmagent instances responsible for scraping the given target "+
+		"at /service-discovery page. For example -promscrape.cluster.memberURLTemplate='http://vmagent-%d:8429/targets'. "+
+		"See https://docs.victoriametrics.com/vmagent.html#scraping-big-number-of-targets for more details")
 	clusterReplicationFactor = flag.Int("promscrape.cluster.replicationFactor", 1, "The number of members in the cluster, which scrape the same targets. "+
 		"If the replication factor is greater than 1, then the deduplication must be enabled at remote storage side. "+
 		"See https://docs.victoriametrics.com/vmagent.html#scraping-big-number-of-targets for more info")
diff --git a/lib/promscrape/targetstatus.qtpl b/lib/promscrape/targetstatus.qtpl
index d4206ee2d2..d7acee30e2 100644
--- a/lib/promscrape/targetstatus.qtpl
+++ b/lib/promscrape/targetstatus.qtpl
@@ -1,5 +1,7 @@
 {% import (
 	"net/url"
+	"strconv"
+	"strings"
 
 	"github.com/VictoriaMetrics/VictoriaMetrics/lib/htmlcomponents"
 	"github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils"
@@ -335,7 +337,11 @@
                                 <span title="The target exists at vmagent instances with the given -promscrape.cluster.memberNum values">
                                 exists at{% space %}
                                 {% for i, memberNum := range t.clusterMemberNums %}
-                                    {%d memberNum %}
+                                    {% if *clusterMemberURLTemplate == "" %}
+                                        {%d memberNum %}
+                                    {% else %}
+                                        <a href="{%s strings.ReplaceAll(*clusterMemberURLTemplate, "%d", strconv.Itoa(memberNum)) %}">{%d memberNum %}</a>
+                                    {% endif %}
                                     {% if i+1 < len(t.clusterMemberNums) %},{% space %}{% endif %}
                                 {% endfor %}
                             {% endif %}
diff --git a/lib/promscrape/targetstatus.qtpl.go b/lib/promscrape/targetstatus.qtpl.go
index 1957684df8..eda7b760c6 100644
--- a/lib/promscrape/targetstatus.qtpl.go
+++ b/lib/promscrape/targetstatus.qtpl.go
@@ -7,987 +7,1005 @@ package promscrape
 //line lib/promscrape/targetstatus.qtpl:1
 import (
 	"net/url"
+	"strconv"
+	"strings"
 
 	"github.com/VictoriaMetrics/VictoriaMetrics/lib/htmlcomponents"
 	"github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils"
 )
 
-//line lib/promscrape/targetstatus.qtpl:10
+//line lib/promscrape/targetstatus.qtpl:12
 import (
 	qtio422016 "io"
 
 	qt422016 "github.com/valyala/quicktemplate"
 )
 
-//line lib/promscrape/targetstatus.qtpl:10
+//line lib/promscrape/targetstatus.qtpl:12
 var (
 	_ = qtio422016.Copy
 	_ = qt422016.AcquireByteBuffer
 )
 
-//line lib/promscrape/targetstatus.qtpl:10
-func StreamTargetsResponsePlain(qw422016 *qt422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
 //line lib/promscrape/targetstatus.qtpl:12
-	if tsr.err != nil {
-//line lib/promscrape/targetstatus.qtpl:13
-		qw422016.N().S(tsr.err.Error())
+func StreamTargetsResponsePlain(qw422016 *qt422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
 //line lib/promscrape/targetstatus.qtpl:14
-		return
+	if tsr.err != nil {
 //line lib/promscrape/targetstatus.qtpl:15
+		qw422016.N().S(tsr.err.Error())
+//line lib/promscrape/targetstatus.qtpl:16
+		return
+//line lib/promscrape/targetstatus.qtpl:17
 	}
-//line lib/promscrape/targetstatus.qtpl:17
-	for _, jts := range tsr.jobTargetsStatuses {
-//line lib/promscrape/targetstatus.qtpl:17
-		qw422016.N().S(`job=`)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().S(jts.jobName)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().S(`(`)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().D(jts.upCount)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().S(`/`)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().D(jts.targetsTotal)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:18
-		qw422016.N().S(`up)`)
 //line lib/promscrape/targetstatus.qtpl:19
+	for _, jts := range tsr.jobTargetsStatuses {
+//line lib/promscrape/targetstatus.qtpl:19
+		qw422016.N().S(`job=`)
+//line lib/promscrape/targetstatus.qtpl:20
+		qw422016.N().S(jts.jobName)
+//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().D(jts.upCount)
+//line lib/promscrape/targetstatus.qtpl:20
+		qw422016.N().S(`/`)
+//line lib/promscrape/targetstatus.qtpl:20
+		qw422016.N().D(jts.targetsTotal)
+//line lib/promscrape/targetstatus.qtpl:20
+		qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:20
+		qw422016.N().S(`up)`)
+//line lib/promscrape/targetstatus.qtpl:21
 		qw422016.N().S(`
 `)
-//line lib/promscrape/targetstatus.qtpl:20
+//line lib/promscrape/targetstatus.qtpl:22
 		for _, ts := range jts.targetsStatus {
-//line lib/promscrape/targetstatus.qtpl:21
+//line lib/promscrape/targetstatus.qtpl:23
 			qw422016.N().S("\t")
-//line lib/promscrape/targetstatus.qtpl:21
+//line lib/promscrape/targetstatus.qtpl:23
 			qw422016.N().S(`state=`)
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 			if ts.up {
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 				qw422016.N().S(`up`)
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 			} else {
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 				qw422016.N().S(`down`)
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 			}
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:22
+//line lib/promscrape/targetstatus.qtpl:24
 			qw422016.N().S(`endpoint=`)
-//line lib/promscrape/targetstatus.qtpl:23
+//line lib/promscrape/targetstatus.qtpl:25
 			qw422016.N().S(ts.sw.Config.ScrapeURL)
-//line lib/promscrape/targetstatus.qtpl:23
+//line lib/promscrape/targetstatus.qtpl:25
 			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:23
+//line lib/promscrape/targetstatus.qtpl:25
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:23
+//line lib/promscrape/targetstatus.qtpl:25
 			qw422016.N().S(`labels=`)
-//line lib/promscrape/targetstatus.qtpl:24
+//line lib/promscrape/targetstatus.qtpl:26
 			qw422016.N().S(ts.sw.Config.Labels.String())
-//line lib/promscrape/targetstatus.qtpl:24
+//line lib/promscrape/targetstatus.qtpl:26
 			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:24
+//line lib/promscrape/targetstatus.qtpl:26
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:25
+//line lib/promscrape/targetstatus.qtpl:27
 			if filter.showOriginalLabels {
-//line lib/promscrape/targetstatus.qtpl:25
+//line lib/promscrape/targetstatus.qtpl:27
 				qw422016.N().S(`originalLabels=`)
-//line lib/promscrape/targetstatus.qtpl:25
+//line lib/promscrape/targetstatus.qtpl:27
 				qw422016.N().S(ts.sw.Config.OriginalLabels.String())
-//line lib/promscrape/targetstatus.qtpl:25
+//line lib/promscrape/targetstatus.qtpl:27
 				qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:25
+//line lib/promscrape/targetstatus.qtpl:27
 				qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:25
+//line lib/promscrape/targetstatus.qtpl:27
 			}
-//line lib/promscrape/targetstatus.qtpl:25
+//line lib/promscrape/targetstatus.qtpl:27
 			qw422016.N().S(`scrapes_total=`)
-//line lib/promscrape/targetstatus.qtpl:26
+//line lib/promscrape/targetstatus.qtpl:28
 			qw422016.N().D(ts.scrapesTotal)
-//line lib/promscrape/targetstatus.qtpl:26
+//line lib/promscrape/targetstatus.qtpl:28
 			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:26
+//line lib/promscrape/targetstatus.qtpl:28
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:26
+//line lib/promscrape/targetstatus.qtpl:28
 			qw422016.N().S(`scrapes_failed=`)
-//line lib/promscrape/targetstatus.qtpl:27
+//line lib/promscrape/targetstatus.qtpl:29
 			qw422016.N().D(ts.scrapesFailed)
-//line lib/promscrape/targetstatus.qtpl:27
+//line lib/promscrape/targetstatus.qtpl:29
 			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:27
+//line lib/promscrape/targetstatus.qtpl:29
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:27
+//line lib/promscrape/targetstatus.qtpl:29
 			qw422016.N().S(`last_scrape=`)
-//line lib/promscrape/targetstatus.qtpl:28
+//line lib/promscrape/targetstatus.qtpl:30
 			qw422016.E().S(ts.getDurationFromLastScrape())
-//line lib/promscrape/targetstatus.qtpl:28
+//line lib/promscrape/targetstatus.qtpl:30
 			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:28
+//line lib/promscrape/targetstatus.qtpl:30
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:28
+//line lib/promscrape/targetstatus.qtpl:30
 			qw422016.N().S(`scrape_duration=`)
-//line lib/promscrape/targetstatus.qtpl:29
+//line lib/promscrape/targetstatus.qtpl:31
 			qw422016.N().D(int(ts.scrapeDuration))
-//line lib/promscrape/targetstatus.qtpl:29
+//line lib/promscrape/targetstatus.qtpl:31
 			qw422016.N().S(`ms,`)
-//line lib/promscrape/targetstatus.qtpl:29
+//line lib/promscrape/targetstatus.qtpl:31
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:29
+//line lib/promscrape/targetstatus.qtpl:31
 			qw422016.N().S(`samples_scraped=`)
-//line lib/promscrape/targetstatus.qtpl:30
-			qw422016.N().D(ts.samplesScraped)
-//line lib/promscrape/targetstatus.qtpl:30
-			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:30
-			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:30
-			qw422016.N().S(`error=`)
-//line lib/promscrape/targetstatus.qtpl:31
-			if ts.err != nil {
-//line lib/promscrape/targetstatus.qtpl:31
-				qw422016.N().S(ts.err.Error())
-//line lib/promscrape/targetstatus.qtpl:31
-			}
 //line lib/promscrape/targetstatus.qtpl:32
+			qw422016.N().D(ts.samplesScraped)
+//line lib/promscrape/targetstatus.qtpl:32
+			qw422016.N().S(`,`)
+//line lib/promscrape/targetstatus.qtpl:32
+			qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:32
+			qw422016.N().S(`error=`)
+//line lib/promscrape/targetstatus.qtpl:33
+			if ts.err != nil {
+//line lib/promscrape/targetstatus.qtpl:33
+				qw422016.N().S(ts.err.Error())
+//line lib/promscrape/targetstatus.qtpl:33
+			}
+//line lib/promscrape/targetstatus.qtpl:34
 			qw422016.N().S(`
 `)
-//line lib/promscrape/targetstatus.qtpl:33
+//line lib/promscrape/targetstatus.qtpl:35
 		}
-//line lib/promscrape/targetstatus.qtpl:34
+//line lib/promscrape/targetstatus.qtpl:36
 	}
-//line lib/promscrape/targetstatus.qtpl:36
-	for _, jobName := range tsr.emptyJobs {
-//line lib/promscrape/targetstatus.qtpl:36
-		qw422016.N().S(`job=`)
-//line lib/promscrape/targetstatus.qtpl:37
-		qw422016.N().S(jobName)
-//line lib/promscrape/targetstatus.qtpl:37
-		qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:37
-		qw422016.N().S(`(0/0 up)`)
 //line lib/promscrape/targetstatus.qtpl:38
+	for _, jobName := range tsr.emptyJobs {
+//line lib/promscrape/targetstatus.qtpl:38
+		qw422016.N().S(`job=`)
+//line lib/promscrape/targetstatus.qtpl:39
+		qw422016.N().S(jobName)
+//line lib/promscrape/targetstatus.qtpl:39
+		qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:39
+		qw422016.N().S(`(0/0 up)`)
+//line lib/promscrape/targetstatus.qtpl:40
 		qw422016.N().S(`
 `)
-//line lib/promscrape/targetstatus.qtpl:39
-	}
 //line lib/promscrape/targetstatus.qtpl:41
+	}
+//line lib/promscrape/targetstatus.qtpl:43
 }
 
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 func WriteTargetsResponsePlain(qq422016 qtio422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	StreamTargetsResponsePlain(qw422016, tsr, filter)
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 }
 
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 func TargetsResponsePlain(tsr *targetsStatusResult, filter *requestFilter) string {
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	WriteTargetsResponsePlain(qb422016, tsr, filter)
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:41
+//line lib/promscrape/targetstatus.qtpl:43
 }
 
-//line lib/promscrape/targetstatus.qtpl:43
+//line lib/promscrape/targetstatus.qtpl:45
 func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
-//line lib/promscrape/targetstatus.qtpl:43
+//line lib/promscrape/targetstatus.qtpl:45
 	qw422016.N().S(`<!DOCTYPE html><html lang="en"><head>`)
-//line lib/promscrape/targetstatus.qtpl:47
+//line lib/promscrape/targetstatus.qtpl:49
 	htmlcomponents.StreamCommonHeader(qw422016)
-//line lib/promscrape/targetstatus.qtpl:47
+//line lib/promscrape/targetstatus.qtpl:49
 	qw422016.N().S(`<title>Active Targets</title></head><body>`)
-//line lib/promscrape/targetstatus.qtpl:51
-	htmlcomponents.StreamNavbar(qw422016)
-//line lib/promscrape/targetstatus.qtpl:51
-	qw422016.N().S(`<div class="container-fluid">`)
 //line lib/promscrape/targetstatus.qtpl:53
-	if tsr.err != nil {
-//line lib/promscrape/targetstatus.qtpl:54
-		htmlcomponents.StreamErrorNotification(qw422016, tsr.err)
-//line lib/promscrape/targetstatus.qtpl:55
-	}
-//line lib/promscrape/targetstatus.qtpl:55
-	qw422016.N().S(`<div class="row"><main class="col-12"><h1>Active Targets</h1><hr />`)
-//line lib/promscrape/targetstatus.qtpl:60
-	streamfiltersForm(qw422016, filter)
-//line lib/promscrape/targetstatus.qtpl:60
-	qw422016.N().S(`<hr />`)
-//line lib/promscrape/targetstatus.qtpl:62
-	streamtargetsTabs(qw422016, tsr, filter, "scrapeTargets")
-//line lib/promscrape/targetstatus.qtpl:62
-	qw422016.N().S(`</main></div></div></body></html>`)
-//line lib/promscrape/targetstatus.qtpl:68
-}
-
-//line lib/promscrape/targetstatus.qtpl:68
-func WriteTargetsResponseHTML(qq422016 qtio422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
-//line lib/promscrape/targetstatus.qtpl:68
-	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:68
-	StreamTargetsResponseHTML(qw422016, tsr, filter)
-//line lib/promscrape/targetstatus.qtpl:68
-	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:68
-}
-
-//line lib/promscrape/targetstatus.qtpl:68
-func TargetsResponseHTML(tsr *targetsStatusResult, filter *requestFilter) string {
-//line lib/promscrape/targetstatus.qtpl:68
-	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:68
-	WriteTargetsResponseHTML(qb422016, tsr, filter)
-//line lib/promscrape/targetstatus.qtpl:68
-	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:68
-	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:68
-	return qs422016
-//line lib/promscrape/targetstatus.qtpl:68
-}
-
-//line lib/promscrape/targetstatus.qtpl:70
-func StreamServiceDiscoveryResponse(qw422016 *qt422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
-//line lib/promscrape/targetstatus.qtpl:70
-	qw422016.N().S(`<!DOCTYPE html><html lang="en"><head>`)
-//line lib/promscrape/targetstatus.qtpl:74
-	htmlcomponents.StreamCommonHeader(qw422016)
-//line lib/promscrape/targetstatus.qtpl:74
-	qw422016.N().S(`<title>Discovered Targets</title></head><body>`)
-//line lib/promscrape/targetstatus.qtpl:78
 	htmlcomponents.StreamNavbar(qw422016)
-//line lib/promscrape/targetstatus.qtpl:78
+//line lib/promscrape/targetstatus.qtpl:53
 	qw422016.N().S(`<div class="container-fluid">`)
-//line lib/promscrape/targetstatus.qtpl:80
+//line lib/promscrape/targetstatus.qtpl:55
 	if tsr.err != nil {
-//line lib/promscrape/targetstatus.qtpl:81
+//line lib/promscrape/targetstatus.qtpl:56
 		htmlcomponents.StreamErrorNotification(qw422016, tsr.err)
-//line lib/promscrape/targetstatus.qtpl:82
+//line lib/promscrape/targetstatus.qtpl:57
 	}
-//line lib/promscrape/targetstatus.qtpl:82
-	qw422016.N().S(`<div class="row"><main class="col-12"><h1>Discovered Targets</h1><hr />`)
-//line lib/promscrape/targetstatus.qtpl:87
+//line lib/promscrape/targetstatus.qtpl:57
+	qw422016.N().S(`<div class="row"><main class="col-12"><h1>Active Targets</h1><hr />`)
+//line lib/promscrape/targetstatus.qtpl:62
 	streamfiltersForm(qw422016, filter)
-//line lib/promscrape/targetstatus.qtpl:87
+//line lib/promscrape/targetstatus.qtpl:62
 	qw422016.N().S(`<hr />`)
-//line lib/promscrape/targetstatus.qtpl:89
-	streamtargetsTabs(qw422016, tsr, filter, "discoveredTargets")
-//line lib/promscrape/targetstatus.qtpl:89
+//line lib/promscrape/targetstatus.qtpl:64
+	streamtargetsTabs(qw422016, tsr, filter, "scrapeTargets")
+//line lib/promscrape/targetstatus.qtpl:64
 	qw422016.N().S(`</main></div></div></body></html>`)
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
 }
 
-//line lib/promscrape/targetstatus.qtpl:95
-func WriteServiceDiscoveryResponse(qq422016 qtio422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
+func WriteTargetsResponseHTML(qq422016 qtio422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
+//line lib/promscrape/targetstatus.qtpl:70
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:95
-	StreamServiceDiscoveryResponse(qw422016, tsr, filter)
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
+	StreamTargetsResponseHTML(qw422016, tsr, filter)
+//line lib/promscrape/targetstatus.qtpl:70
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
 }
 
-//line lib/promscrape/targetstatus.qtpl:95
-func ServiceDiscoveryResponse(tsr *targetsStatusResult, filter *requestFilter) string {
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
+func TargetsResponseHTML(tsr *targetsStatusResult, filter *requestFilter) string {
+//line lib/promscrape/targetstatus.qtpl:70
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:95
-	WriteServiceDiscoveryResponse(qb422016, tsr, filter)
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
+	WriteTargetsResponseHTML(qb422016, tsr, filter)
+//line lib/promscrape/targetstatus.qtpl:70
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:95
+//line lib/promscrape/targetstatus.qtpl:70
 }
 
-//line lib/promscrape/targetstatus.qtpl:97
-func streamfiltersForm(qw422016 *qt422016.Writer, filter *requestFilter) {
-//line lib/promscrape/targetstatus.qtpl:97
-	qw422016.N().S(`<div class="row g-3 align-items-center mb-3"><div class="col-auto"><button id="all-btn" type="button" class="btn`)
-//line lib/promscrape/targetstatus.qtpl:100
-	qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:100
-	if !filter.showOnlyUnhealthy {
-//line lib/promscrape/targetstatus.qtpl:100
-		qw422016.N().S(`btn-secondary`)
-//line lib/promscrape/targetstatus.qtpl:100
-	} else {
-//line lib/promscrape/targetstatus.qtpl:100
-		qw422016.N().S(`btn-success`)
-//line lib/promscrape/targetstatus.qtpl:100
+//line lib/promscrape/targetstatus.qtpl:72
+func StreamServiceDiscoveryResponse(qw422016 *qt422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
+//line lib/promscrape/targetstatus.qtpl:72
+	qw422016.N().S(`<!DOCTYPE html><html lang="en"><head>`)
+//line lib/promscrape/targetstatus.qtpl:76
+	htmlcomponents.StreamCommonHeader(qw422016)
+//line lib/promscrape/targetstatus.qtpl:76
+	qw422016.N().S(`<title>Discovered Targets</title></head><body>`)
+//line lib/promscrape/targetstatus.qtpl:80
+	htmlcomponents.StreamNavbar(qw422016)
+//line lib/promscrape/targetstatus.qtpl:80
+	qw422016.N().S(`<div class="container-fluid">`)
+//line lib/promscrape/targetstatus.qtpl:82
+	if tsr.err != nil {
+//line lib/promscrape/targetstatus.qtpl:83
+		htmlcomponents.StreamErrorNotification(qw422016, tsr.err)
+//line lib/promscrape/targetstatus.qtpl:84
 	}
-//line lib/promscrape/targetstatus.qtpl:100
-	qw422016.N().S(`"onclick="location.href='?`)
-//line lib/promscrape/targetstatus.qtpl:101
-	streamqueryArgs(qw422016, filter, map[string]string{"show_only_unhealthy": "false"})
-//line lib/promscrape/targetstatus.qtpl:101
-	qw422016.N().S(`'">All</button></div><div class="col-auto"><button id="unhealthy-btn" type="button" class="btn`)
-//line lib/promscrape/targetstatus.qtpl:106
-	qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:106
-	if filter.showOnlyUnhealthy {
-//line lib/promscrape/targetstatus.qtpl:106
-		qw422016.N().S(`btn-secondary`)
-//line lib/promscrape/targetstatus.qtpl:106
-	} else {
-//line lib/promscrape/targetstatus.qtpl:106
-		qw422016.N().S(`btn-danger`)
-//line lib/promscrape/targetstatus.qtpl:106
-	}
-//line lib/promscrape/targetstatus.qtpl:106
-	qw422016.N().S(`"onclick="location.href='?`)
-//line lib/promscrape/targetstatus.qtpl:107
-	streamqueryArgs(qw422016, filter, map[string]string{"show_only_unhealthy": "true"})
-//line lib/promscrape/targetstatus.qtpl:107
-	qw422016.N().S(`'">Unhealthy</button></div><div class="col-auto"><button type="button" class="btn btn-primary" onclick="document.querySelectorAll('.scrape-job').forEach((el) => { el.style.display = 'none'; })">Collapse all</button></div><div class="col-auto"><button type="button" class="btn btn-secondary" onclick="document.querySelectorAll('.scrape-job').forEach((el) => { el.style.display = 'block'; })">Expand all</button></div><div class="col-auto"><button type="button" class="btn btn-success" onclick="document.getElementById('filters').style.display='block'">Filter targets</button></div></div><div id="filters"`)
-//line lib/promscrape/targetstatus.qtpl:127
-	if filter.endpointSearch == "" && filter.labelSearch == "" {
-//line lib/promscrape/targetstatus.qtpl:127
-		qw422016.N().S(`style="display:none"`)
-//line lib/promscrape/targetstatus.qtpl:127
-	}
-//line lib/promscrape/targetstatus.qtpl:127
-	qw422016.N().S(`><form class="form-horizontal"><div class="form-group mb-3"><label for="endpoint_search" class="col-sm-10 control-label">Endpoint filter (<a target="_blank" href="https://github.com/google/re2/wiki/Syntax">Regexp</a> is accepted)</label><div class="col-sm-10"><input type="text" id="endpoint_search" name="endpoint_search"placeholder="For example, 127.0.0.1" class="form-control" value="`)
-//line lib/promscrape/targetstatus.qtpl:133
-	qw422016.E().S(filter.endpointSearch)
-//line lib/promscrape/targetstatus.qtpl:133
-	qw422016.N().S(`"/></div></div><div class="form-group mb-3"><label for="label_search" class="col-sm-10 control-label">Labels filter (<a target="_blank" href="https://prometheus.io/docs/prometheus/latest/querying/basics/#time-series-selectors">Arbitrary time series selectors</a> are accepted)</label><div class="col-sm-10"><input type="text" id="label_search" name="label_search"placeholder="For example, {instance=~'.+:9100'}" class="form-control" value="`)
-//line lib/promscrape/targetstatus.qtpl:140
-	qw422016.E().S(filter.labelSearch)
-//line lib/promscrape/targetstatus.qtpl:140
-	qw422016.N().S(`"/></div></div><input type="hidden" name="show_only_unhealthy" value="`)
-//line lib/promscrape/targetstatus.qtpl:143
-	qw422016.E().V(filter.showOnlyUnhealthy)
-//line lib/promscrape/targetstatus.qtpl:143
-	qw422016.N().S(`"/><input type="hidden" name="show_original_labels" value="`)
-//line lib/promscrape/targetstatus.qtpl:144
-	qw422016.E().V(filter.showOriginalLabels)
-//line lib/promscrape/targetstatus.qtpl:144
-	qw422016.N().S(`"/><button type="submit" class="btn btn-success mb-3">Submit</button><button type="button" class="btn btn-danger mb-3" onclick="location.href='?'">Clear target filters</button></form></div>`)
-//line lib/promscrape/targetstatus.qtpl:149
-}
-
-//line lib/promscrape/targetstatus.qtpl:149
-func writefiltersForm(qq422016 qtio422016.Writer, filter *requestFilter) {
-//line lib/promscrape/targetstatus.qtpl:149
-	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:149
+//line lib/promscrape/targetstatus.qtpl:84
+	qw422016.N().S(`<div class="row"><main class="col-12"><h1>Discovered Targets</h1><hr />`)
+//line lib/promscrape/targetstatus.qtpl:89
 	streamfiltersForm(qw422016, filter)
-//line lib/promscrape/targetstatus.qtpl:149
-	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:149
+//line lib/promscrape/targetstatus.qtpl:89
+	qw422016.N().S(`<hr />`)
+//line lib/promscrape/targetstatus.qtpl:91
+	streamtargetsTabs(qw422016, tsr, filter, "discoveredTargets")
+//line lib/promscrape/targetstatus.qtpl:91
+	qw422016.N().S(`</main></div></div></body></html>`)
+//line lib/promscrape/targetstatus.qtpl:97
 }
 
-//line lib/promscrape/targetstatus.qtpl:149
-func filtersForm(filter *requestFilter) string {
-//line lib/promscrape/targetstatus.qtpl:149
-	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:149
-	writefiltersForm(qb422016, filter)
-//line lib/promscrape/targetstatus.qtpl:149
-	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:149
-	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:149
-	return qs422016
-//line lib/promscrape/targetstatus.qtpl:149
-}
-
-//line lib/promscrape/targetstatus.qtpl:151
-func streamtargetsTabs(qw422016 *qt422016.Writer, tsr *targetsStatusResult, filter *requestFilter, activeTab string) {
-//line lib/promscrape/targetstatus.qtpl:151
-	qw422016.N().S(`<ul class="nav nav-tabs" id="myTab" role="tablist"><li class="nav-item" role="presentation"><button class="nav-link`)
-//line lib/promscrape/targetstatus.qtpl:154
-	if activeTab == "scrapeTargets" {
-//line lib/promscrape/targetstatus.qtpl:154
-		qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:154
-		qw422016.N().S(`active`)
-//line lib/promscrape/targetstatus.qtpl:154
-	}
-//line lib/promscrape/targetstatus.qtpl:154
-	qw422016.N().S(`" type="button" role="tab"onclick="location.href='targets?`)
-//line lib/promscrape/targetstatus.qtpl:155
-	streamqueryArgs(qw422016, filter, nil)
-//line lib/promscrape/targetstatus.qtpl:155
-	qw422016.N().S(`'">Active targets</button></li><li class="nav-item" role="presentation"><button class="nav-link`)
-//line lib/promscrape/targetstatus.qtpl:160
-	if activeTab == "discoveredTargets" {
-//line lib/promscrape/targetstatus.qtpl:160
-		qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:160
-		qw422016.N().S(`active`)
-//line lib/promscrape/targetstatus.qtpl:160
-	}
-//line lib/promscrape/targetstatus.qtpl:160
-	qw422016.N().S(`" type="button" role="tab"onclick="location.href='service-discovery?`)
-//line lib/promscrape/targetstatus.qtpl:161
-	streamqueryArgs(qw422016, filter, nil)
-//line lib/promscrape/targetstatus.qtpl:161
-	qw422016.N().S(`'">Discovered targets</button></li></ul><div class="tab-content"><div class="tab-pane active" role="tabpanel">`)
-//line lib/promscrape/targetstatus.qtpl:168
-	switch activeTab {
-//line lib/promscrape/targetstatus.qtpl:169
-	case "scrapeTargets":
-//line lib/promscrape/targetstatus.qtpl:170
-		streamscrapeTargets(qw422016, tsr)
-//line lib/promscrape/targetstatus.qtpl:171
-	case "discoveredTargets":
-//line lib/promscrape/targetstatus.qtpl:172
-		streamdiscoveredTargets(qw422016, tsr)
-//line lib/promscrape/targetstatus.qtpl:173
-	}
-//line lib/promscrape/targetstatus.qtpl:173
-	qw422016.N().S(`</div></div>`)
-//line lib/promscrape/targetstatus.qtpl:176
-}
-
-//line lib/promscrape/targetstatus.qtpl:176
-func writetargetsTabs(qq422016 qtio422016.Writer, tsr *targetsStatusResult, filter *requestFilter, activeTab string) {
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
+func WriteServiceDiscoveryResponse(qq422016 qtio422016.Writer, tsr *targetsStatusResult, filter *requestFilter) {
+//line lib/promscrape/targetstatus.qtpl:97
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:176
-	streamtargetsTabs(qw422016, tsr, filter, activeTab)
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
+	StreamServiceDiscoveryResponse(qw422016, tsr, filter)
+//line lib/promscrape/targetstatus.qtpl:97
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
 }
 
-//line lib/promscrape/targetstatus.qtpl:176
-func targetsTabs(tsr *targetsStatusResult, filter *requestFilter, activeTab string) string {
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
+func ServiceDiscoveryResponse(tsr *targetsStatusResult, filter *requestFilter) string {
+//line lib/promscrape/targetstatus.qtpl:97
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:176
-	writetargetsTabs(qb422016, tsr, filter, activeTab)
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
+	WriteServiceDiscoveryResponse(qb422016, tsr, filter)
+//line lib/promscrape/targetstatus.qtpl:97
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:176
+//line lib/promscrape/targetstatus.qtpl:97
+}
+
+//line lib/promscrape/targetstatus.qtpl:99
+func streamfiltersForm(qw422016 *qt422016.Writer, filter *requestFilter) {
+//line lib/promscrape/targetstatus.qtpl:99
+	qw422016.N().S(`<div class="row g-3 align-items-center mb-3"><div class="col-auto"><button id="all-btn" type="button" class="btn`)
+//line lib/promscrape/targetstatus.qtpl:102
+	qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:102
+	if !filter.showOnlyUnhealthy {
+//line lib/promscrape/targetstatus.qtpl:102
+		qw422016.N().S(`btn-secondary`)
+//line lib/promscrape/targetstatus.qtpl:102
+	} else {
+//line lib/promscrape/targetstatus.qtpl:102
+		qw422016.N().S(`btn-success`)
+//line lib/promscrape/targetstatus.qtpl:102
+	}
+//line lib/promscrape/targetstatus.qtpl:102
+	qw422016.N().S(`"onclick="location.href='?`)
+//line lib/promscrape/targetstatus.qtpl:103
+	streamqueryArgs(qw422016, filter, map[string]string{"show_only_unhealthy": "false"})
+//line lib/promscrape/targetstatus.qtpl:103
+	qw422016.N().S(`'">All</button></div><div class="col-auto"><button id="unhealthy-btn" type="button" class="btn`)
+//line lib/promscrape/targetstatus.qtpl:108
+	qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:108
+	if filter.showOnlyUnhealthy {
+//line lib/promscrape/targetstatus.qtpl:108
+		qw422016.N().S(`btn-secondary`)
+//line lib/promscrape/targetstatus.qtpl:108
+	} else {
+//line lib/promscrape/targetstatus.qtpl:108
+		qw422016.N().S(`btn-danger`)
+//line lib/promscrape/targetstatus.qtpl:108
+	}
+//line lib/promscrape/targetstatus.qtpl:108
+	qw422016.N().S(`"onclick="location.href='?`)
+//line lib/promscrape/targetstatus.qtpl:109
+	streamqueryArgs(qw422016, filter, map[string]string{"show_only_unhealthy": "true"})
+//line lib/promscrape/targetstatus.qtpl:109
+	qw422016.N().S(`'">Unhealthy</button></div><div class="col-auto"><button type="button" class="btn btn-primary" onclick="document.querySelectorAll('.scrape-job').forEach((el) => { el.style.display = 'none'; })">Collapse all</button></div><div class="col-auto"><button type="button" class="btn btn-secondary" onclick="document.querySelectorAll('.scrape-job').forEach((el) => { el.style.display = 'block'; })">Expand all</button></div><div class="col-auto"><button type="button" class="btn btn-success" onclick="document.getElementById('filters').style.display='block'">Filter targets</button></div></div><div id="filters"`)
+//line lib/promscrape/targetstatus.qtpl:129
+	if filter.endpointSearch == "" && filter.labelSearch == "" {
+//line lib/promscrape/targetstatus.qtpl:129
+		qw422016.N().S(`style="display:none"`)
+//line lib/promscrape/targetstatus.qtpl:129
+	}
+//line lib/promscrape/targetstatus.qtpl:129
+	qw422016.N().S(`><form class="form-horizontal"><div class="form-group mb-3"><label for="endpoint_search" class="col-sm-10 control-label">Endpoint filter (<a target="_blank" href="https://github.com/google/re2/wiki/Syntax">Regexp</a> is accepted)</label><div class="col-sm-10"><input type="text" id="endpoint_search" name="endpoint_search"placeholder="For example, 127.0.0.1" class="form-control" value="`)
+//line lib/promscrape/targetstatus.qtpl:135
+	qw422016.E().S(filter.endpointSearch)
+//line lib/promscrape/targetstatus.qtpl:135
+	qw422016.N().S(`"/></div></div><div class="form-group mb-3"><label for="label_search" class="col-sm-10 control-label">Labels filter (<a target="_blank" href="https://prometheus.io/docs/prometheus/latest/querying/basics/#time-series-selectors">Arbitrary time series selectors</a> are accepted)</label><div class="col-sm-10"><input type="text" id="label_search" name="label_search"placeholder="For example, {instance=~'.+:9100'}" class="form-control" value="`)
+//line lib/promscrape/targetstatus.qtpl:142
+	qw422016.E().S(filter.labelSearch)
+//line lib/promscrape/targetstatus.qtpl:142
+	qw422016.N().S(`"/></div></div><input type="hidden" name="show_only_unhealthy" value="`)
+//line lib/promscrape/targetstatus.qtpl:145
+	qw422016.E().V(filter.showOnlyUnhealthy)
+//line lib/promscrape/targetstatus.qtpl:145
+	qw422016.N().S(`"/><input type="hidden" name="show_original_labels" value="`)
+//line lib/promscrape/targetstatus.qtpl:146
+	qw422016.E().V(filter.showOriginalLabels)
+//line lib/promscrape/targetstatus.qtpl:146
+	qw422016.N().S(`"/><button type="submit" class="btn btn-success mb-3">Submit</button><button type="button" class="btn btn-danger mb-3" onclick="location.href='?'">Clear target filters</button></form></div>`)
+//line lib/promscrape/targetstatus.qtpl:151
+}
+
+//line lib/promscrape/targetstatus.qtpl:151
+func writefiltersForm(qq422016 qtio422016.Writer, filter *requestFilter) {
+//line lib/promscrape/targetstatus.qtpl:151
+	qw422016 := qt422016.AcquireWriter(qq422016)
+//line lib/promscrape/targetstatus.qtpl:151
+	streamfiltersForm(qw422016, filter)
+//line lib/promscrape/targetstatus.qtpl:151
+	qt422016.ReleaseWriter(qw422016)
+//line lib/promscrape/targetstatus.qtpl:151
+}
+
+//line lib/promscrape/targetstatus.qtpl:151
+func filtersForm(filter *requestFilter) string {
+//line lib/promscrape/targetstatus.qtpl:151
+	qb422016 := qt422016.AcquireByteBuffer()
+//line lib/promscrape/targetstatus.qtpl:151
+	writefiltersForm(qb422016, filter)
+//line lib/promscrape/targetstatus.qtpl:151
+	qs422016 := string(qb422016.B)
+//line lib/promscrape/targetstatus.qtpl:151
+	qt422016.ReleaseByteBuffer(qb422016)
+//line lib/promscrape/targetstatus.qtpl:151
+	return qs422016
+//line lib/promscrape/targetstatus.qtpl:151
+}
+
+//line lib/promscrape/targetstatus.qtpl:153
+func streamtargetsTabs(qw422016 *qt422016.Writer, tsr *targetsStatusResult, filter *requestFilter, activeTab string) {
+//line lib/promscrape/targetstatus.qtpl:153
+	qw422016.N().S(`<ul class="nav nav-tabs" id="myTab" role="tablist"><li class="nav-item" role="presentation"><button class="nav-link`)
+//line lib/promscrape/targetstatus.qtpl:156
+	if activeTab == "scrapeTargets" {
+//line lib/promscrape/targetstatus.qtpl:156
+		qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:156
+		qw422016.N().S(`active`)
+//line lib/promscrape/targetstatus.qtpl:156
+	}
+//line lib/promscrape/targetstatus.qtpl:156
+	qw422016.N().S(`" type="button" role="tab"onclick="location.href='targets?`)
+//line lib/promscrape/targetstatus.qtpl:157
+	streamqueryArgs(qw422016, filter, nil)
+//line lib/promscrape/targetstatus.qtpl:157
+	qw422016.N().S(`'">Active targets</button></li><li class="nav-item" role="presentation"><button class="nav-link`)
+//line lib/promscrape/targetstatus.qtpl:162
+	if activeTab == "discoveredTargets" {
+//line lib/promscrape/targetstatus.qtpl:162
+		qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:162
+		qw422016.N().S(`active`)
+//line lib/promscrape/targetstatus.qtpl:162
+	}
+//line lib/promscrape/targetstatus.qtpl:162
+	qw422016.N().S(`" type="button" role="tab"onclick="location.href='service-discovery?`)
+//line lib/promscrape/targetstatus.qtpl:163
+	streamqueryArgs(qw422016, filter, nil)
+//line lib/promscrape/targetstatus.qtpl:163
+	qw422016.N().S(`'">Discovered targets</button></li></ul><div class="tab-content"><div class="tab-pane active" role="tabpanel">`)
+//line lib/promscrape/targetstatus.qtpl:170
+	switch activeTab {
+//line lib/promscrape/targetstatus.qtpl:171
+	case "scrapeTargets":
+//line lib/promscrape/targetstatus.qtpl:172
+		streamscrapeTargets(qw422016, tsr)
+//line lib/promscrape/targetstatus.qtpl:173
+	case "discoveredTargets":
+//line lib/promscrape/targetstatus.qtpl:174
+		streamdiscoveredTargets(qw422016, tsr)
+//line lib/promscrape/targetstatus.qtpl:175
+	}
+//line lib/promscrape/targetstatus.qtpl:175
+	qw422016.N().S(`</div></div>`)
+//line lib/promscrape/targetstatus.qtpl:178
 }
 
 //line lib/promscrape/targetstatus.qtpl:178
-func streamscrapeTargets(qw422016 *qt422016.Writer, tsr *targetsStatusResult) {
+func writetargetsTabs(qq422016 qtio422016.Writer, tsr *targetsStatusResult, filter *requestFilter, activeTab string) {
 //line lib/promscrape/targetstatus.qtpl:178
+	qw422016 := qt422016.AcquireWriter(qq422016)
+//line lib/promscrape/targetstatus.qtpl:178
+	streamtargetsTabs(qw422016, tsr, filter, activeTab)
+//line lib/promscrape/targetstatus.qtpl:178
+	qt422016.ReleaseWriter(qw422016)
+//line lib/promscrape/targetstatus.qtpl:178
+}
+
+//line lib/promscrape/targetstatus.qtpl:178
+func targetsTabs(tsr *targetsStatusResult, filter *requestFilter, activeTab string) string {
+//line lib/promscrape/targetstatus.qtpl:178
+	qb422016 := qt422016.AcquireByteBuffer()
+//line lib/promscrape/targetstatus.qtpl:178
+	writetargetsTabs(qb422016, tsr, filter, activeTab)
+//line lib/promscrape/targetstatus.qtpl:178
+	qs422016 := string(qb422016.B)
+//line lib/promscrape/targetstatus.qtpl:178
+	qt422016.ReleaseByteBuffer(qb422016)
+//line lib/promscrape/targetstatus.qtpl:178
+	return qs422016
+//line lib/promscrape/targetstatus.qtpl:178
+}
+
+//line lib/promscrape/targetstatus.qtpl:180
+func streamscrapeTargets(qw422016 *qt422016.Writer, tsr *targetsStatusResult) {
+//line lib/promscrape/targetstatus.qtpl:180
 	qw422016.N().S(`<div class="row mt-4"><div class="col-12">`)
-//line lib/promscrape/targetstatus.qtpl:181
-	for i, jts := range tsr.jobTargetsStatuses {
-//line lib/promscrape/targetstatus.qtpl:182
-		streamscrapeJobTargets(qw422016, i, jts, tsr.hasOriginalLabels)
 //line lib/promscrape/targetstatus.qtpl:183
-	}
+	for i, jts := range tsr.jobTargetsStatuses {
 //line lib/promscrape/targetstatus.qtpl:184
-	for i, jobName := range tsr.emptyJobs {
+		streamscrapeJobTargets(qw422016, i, jts, tsr.hasOriginalLabels)
+//line lib/promscrape/targetstatus.qtpl:185
+	}
 //line lib/promscrape/targetstatus.qtpl:186
+	for i, jobName := range tsr.emptyJobs {
+//line lib/promscrape/targetstatus.qtpl:188
 		num := i + len(tsr.jobTargetsStatuses)
 		jts := &jobTargetsStatuses{
 			jobName: jobName,
 		}
 
-//line lib/promscrape/targetstatus.qtpl:191
+//line lib/promscrape/targetstatus.qtpl:193
 		streamscrapeJobTargets(qw422016, num, jts, tsr.hasOriginalLabels)
-//line lib/promscrape/targetstatus.qtpl:192
+//line lib/promscrape/targetstatus.qtpl:194
 	}
-//line lib/promscrape/targetstatus.qtpl:192
+//line lib/promscrape/targetstatus.qtpl:194
 	qw422016.N().S(`</div></div>`)
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 }
 
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 func writescrapeTargets(qq422016 qtio422016.Writer, tsr *targetsStatusResult) {
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	streamscrapeTargets(qw422016, tsr)
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 }
 
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 func scrapeTargets(tsr *targetsStatusResult) string {
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	writescrapeTargets(qb422016, tsr)
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:195
+//line lib/promscrape/targetstatus.qtpl:197
 }
 
-//line lib/promscrape/targetstatus.qtpl:197
+//line lib/promscrape/targetstatus.qtpl:199
 func streamscrapeJobTargets(qw422016 *qt422016.Writer, num int, jts *jobTargetsStatuses, hasOriginalLabels bool) {
-//line lib/promscrape/targetstatus.qtpl:197
+//line lib/promscrape/targetstatus.qtpl:199
 	qw422016.N().S(`<div class="row mb-4"><div class="col-12"><h4><span class="me-2">`)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.E().S(jts.jobName)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.N().S(`(`)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.N().D(jts.upCount)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.N().S(`/`)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.N().D(jts.targetsTotal)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:201
+//line lib/promscrape/targetstatus.qtpl:203
 	qw422016.N().S(`up)</span>`)
-//line lib/promscrape/targetstatus.qtpl:202
+//line lib/promscrape/targetstatus.qtpl:204
 	streamshowHideScrapeJobButtons(qw422016, num)
-//line lib/promscrape/targetstatus.qtpl:202
+//line lib/promscrape/targetstatus.qtpl:204
 	qw422016.N().S(`</h4><div id="scrape-job-`)
-//line lib/promscrape/targetstatus.qtpl:204
+//line lib/promscrape/targetstatus.qtpl:206
 	qw422016.N().D(num)
-//line lib/promscrape/targetstatus.qtpl:204
+//line lib/promscrape/targetstatus.qtpl:206
 	qw422016.N().S(`" class="scrape-job table-responsive"><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" title="target labels">Labels</th>`)
-//line lib/promscrape/targetstatus.qtpl:211
+//line lib/promscrape/targetstatus.qtpl:213
 	if hasOriginalLabels {
-//line lib/promscrape/targetstatus.qtpl:211
+//line lib/promscrape/targetstatus.qtpl:213
 		qw422016.N().S(`<th scope="col" title="debug relabeling">Debug relabeling</th>`)
-//line lib/promscrape/targetstatus.qtpl:213
+//line lib/promscrape/targetstatus.qtpl:215
 	}
-//line lib/promscrape/targetstatus.qtpl:213
+//line lib/promscrape/targetstatus.qtpl:215
 	qw422016.N().S(`<th scope="col" title="total scrapes">Scrapes</th><th scope="col" title="total scrape errors">Errors</th><th scope="col" title="the time of the last scrape">Last Scrape</th><th scope="col" title="the duration of the last scrape">Duration</th><th scope="col" title="the number of metrics scraped during the last scrape">Samples</th><th scope="col" title="error from the last scrape (if any)">Last error</th></tr></thead><tbody>`)
-//line lib/promscrape/targetstatus.qtpl:223
-	for _, ts := range jts.targetsStatus {
 //line lib/promscrape/targetstatus.qtpl:225
+	for _, ts := range jts.targetsStatus {
+//line lib/promscrape/targetstatus.qtpl:227
 		endpoint := ts.sw.Config.ScrapeURL
 		originalLabels := ts.sw.Config.OriginalLabels
 
 		// The target is uniquely identified by a pointer to its original labels.
 		targetID := getLabelsID(originalLabels)
 
-//line lib/promscrape/targetstatus.qtpl:230
+//line lib/promscrape/targetstatus.qtpl:232
 		qw422016.N().S(`<tr`)
-//line lib/promscrape/targetstatus.qtpl:231
+//line lib/promscrape/targetstatus.qtpl:233
 		if !ts.up {
-//line lib/promscrape/targetstatus.qtpl:231
+//line lib/promscrape/targetstatus.qtpl:233
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:231
+//line lib/promscrape/targetstatus.qtpl:233
 			qw422016.N().S(`class="alert alert-danger" role="alert"`)
-//line lib/promscrape/targetstatus.qtpl:231
+//line lib/promscrape/targetstatus.qtpl:233
 		}
-//line lib/promscrape/targetstatus.qtpl:231
+//line lib/promscrape/targetstatus.qtpl:233
 		qw422016.N().S(`><td class="endpoint"><a href="`)
-//line lib/promscrape/targetstatus.qtpl:233
+//line lib/promscrape/targetstatus.qtpl:235
 		qw422016.E().S(endpoint)
-//line lib/promscrape/targetstatus.qtpl:233
+//line lib/promscrape/targetstatus.qtpl:235
 		qw422016.N().S(`" target="_blank">`)
-//line lib/promscrape/targetstatus.qtpl:233
+//line lib/promscrape/targetstatus.qtpl:235
 		qw422016.E().S(endpoint)
-//line lib/promscrape/targetstatus.qtpl:233
+//line lib/promscrape/targetstatus.qtpl:235
 		qw422016.N().S(`</a>`)
-//line lib/promscrape/targetstatus.qtpl:234
+//line lib/promscrape/targetstatus.qtpl:236
 		if hasOriginalLabels {
-//line lib/promscrape/targetstatus.qtpl:235
+//line lib/promscrape/targetstatus.qtpl:237
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:235
+//line lib/promscrape/targetstatus.qtpl:237
 			qw422016.N().S(`(<a href="target_response?id=`)
-//line lib/promscrape/targetstatus.qtpl:236
+//line lib/promscrape/targetstatus.qtpl:238
 			qw422016.E().S(targetID)
-//line lib/promscrape/targetstatus.qtpl:236
+//line lib/promscrape/targetstatus.qtpl:238
 			qw422016.N().S(`" target="_blank"title="click to fetch target response on behalf of the scraper">response</a>)`)
-//line lib/promscrape/targetstatus.qtpl:238
+//line lib/promscrape/targetstatus.qtpl:240
 		}
-//line lib/promscrape/targetstatus.qtpl:238
+//line lib/promscrape/targetstatus.qtpl:240
 		qw422016.N().S(`</td><td>`)
-//line lib/promscrape/targetstatus.qtpl:241
+//line lib/promscrape/targetstatus.qtpl:243
 		if ts.up {
-//line lib/promscrape/targetstatus.qtpl:241
+//line lib/promscrape/targetstatus.qtpl:243
 			qw422016.N().S(`<span class="badge bg-success">UP</span>`)
-//line lib/promscrape/targetstatus.qtpl:243
+//line lib/promscrape/targetstatus.qtpl:245
 		} else {
-//line lib/promscrape/targetstatus.qtpl:243
+//line lib/promscrape/targetstatus.qtpl:245
 			qw422016.N().S(`<span class="badge bg-danger">DOWN</span>`)
-//line lib/promscrape/targetstatus.qtpl:245
+//line lib/promscrape/targetstatus.qtpl:247
 		}
-//line lib/promscrape/targetstatus.qtpl:245
+//line lib/promscrape/targetstatus.qtpl:247
 		qw422016.N().S(`</td><td class="labels"><div`)
-//line lib/promscrape/targetstatus.qtpl:249
+//line lib/promscrape/targetstatus.qtpl:251
 		if hasOriginalLabels {
-//line lib/promscrape/targetstatus.qtpl:250
+//line lib/promscrape/targetstatus.qtpl:252
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:250
+//line lib/promscrape/targetstatus.qtpl:252
 			qw422016.N().S(`title="click to show original labels"onclick="document.getElementById('original-labels-`)
-//line lib/promscrape/targetstatus.qtpl:251
+//line lib/promscrape/targetstatus.qtpl:253
 			qw422016.E().S(targetID)
-//line lib/promscrape/targetstatus.qtpl:251
+//line lib/promscrape/targetstatus.qtpl:253
 			qw422016.N().S(`').style.display='block'"`)
-//line lib/promscrape/targetstatus.qtpl:252
+//line lib/promscrape/targetstatus.qtpl:254
 		}
-//line lib/promscrape/targetstatus.qtpl:252
+//line lib/promscrape/targetstatus.qtpl:254
 		qw422016.N().S(`>`)
-//line lib/promscrape/targetstatus.qtpl:254
+//line lib/promscrape/targetstatus.qtpl:256
 		streamformatLabels(qw422016, ts.sw.Config.Labels)
-//line lib/promscrape/targetstatus.qtpl:254
+//line lib/promscrape/targetstatus.qtpl:256
 		qw422016.N().S(`</div>`)
-//line lib/promscrape/targetstatus.qtpl:256
+//line lib/promscrape/targetstatus.qtpl:258
 		if hasOriginalLabels {
-//line lib/promscrape/targetstatus.qtpl:256
+//line lib/promscrape/targetstatus.qtpl:258
 			qw422016.N().S(`<div style="display:none" id="original-labels-`)
-//line lib/promscrape/targetstatus.qtpl:257
+//line lib/promscrape/targetstatus.qtpl:259
 			qw422016.E().S(targetID)
-//line lib/promscrape/targetstatus.qtpl:257
+//line lib/promscrape/targetstatus.qtpl:259
 			qw422016.N().S(`">`)
-//line lib/promscrape/targetstatus.qtpl:258
+//line lib/promscrape/targetstatus.qtpl:260
 			streamformatLabels(qw422016, originalLabels)
-//line lib/promscrape/targetstatus.qtpl:258
+//line lib/promscrape/targetstatus.qtpl:260
 			qw422016.N().S(`</div>`)
-//line lib/promscrape/targetstatus.qtpl:260
+//line lib/promscrape/targetstatus.qtpl:262
 		}
-//line lib/promscrape/targetstatus.qtpl:260
+//line lib/promscrape/targetstatus.qtpl:262
 		qw422016.N().S(`</td>`)
-//line lib/promscrape/targetstatus.qtpl:262
+//line lib/promscrape/targetstatus.qtpl:264
 		if hasOriginalLabels {
-//line lib/promscrape/targetstatus.qtpl:262
+//line lib/promscrape/targetstatus.qtpl:264
 			qw422016.N().S(`<td><a href="target-relabel-debug?id=`)
-//line lib/promscrape/targetstatus.qtpl:264
+//line lib/promscrape/targetstatus.qtpl:266
 			qw422016.E().S(targetID)
-//line lib/promscrape/targetstatus.qtpl:264
+//line lib/promscrape/targetstatus.qtpl:266
 			qw422016.N().S(`" target="_blank">target</a>`)
-//line lib/promscrape/targetstatus.qtpl:264
+//line lib/promscrape/targetstatus.qtpl:266
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:264
+//line lib/promscrape/targetstatus.qtpl:266
 			qw422016.N().S(`<a href="metric-relabel-debug?id=`)
-//line lib/promscrape/targetstatus.qtpl:265
+//line lib/promscrape/targetstatus.qtpl:267
 			qw422016.E().S(targetID)
-//line lib/promscrape/targetstatus.qtpl:265
+//line lib/promscrape/targetstatus.qtpl:267
 			qw422016.N().S(`" target="_blank">metrics</a></td>`)
-//line lib/promscrape/targetstatus.qtpl:267
+//line lib/promscrape/targetstatus.qtpl:269
 		}
-//line lib/promscrape/targetstatus.qtpl:267
+//line lib/promscrape/targetstatus.qtpl:269
 		qw422016.N().S(`<td>`)
-//line lib/promscrape/targetstatus.qtpl:268
+//line lib/promscrape/targetstatus.qtpl:270
 		qw422016.N().D(ts.scrapesTotal)
-//line lib/promscrape/targetstatus.qtpl:268
+//line lib/promscrape/targetstatus.qtpl:270
 		qw422016.N().S(`</td><td>`)
-//line lib/promscrape/targetstatus.qtpl:269
+//line lib/promscrape/targetstatus.qtpl:271
 		qw422016.N().D(ts.scrapesFailed)
-//line lib/promscrape/targetstatus.qtpl:269
+//line lib/promscrape/targetstatus.qtpl:271
 		qw422016.N().S(`</td><td>`)
-//line lib/promscrape/targetstatus.qtpl:270
+//line lib/promscrape/targetstatus.qtpl:272
 		qw422016.E().S(ts.getDurationFromLastScrape())
-//line lib/promscrape/targetstatus.qtpl:270
+//line lib/promscrape/targetstatus.qtpl:272
 		qw422016.N().S(`<td>`)
-//line lib/promscrape/targetstatus.qtpl:271
+//line lib/promscrape/targetstatus.qtpl:273
 		qw422016.N().D(int(ts.scrapeDuration))
-//line lib/promscrape/targetstatus.qtpl:271
+//line lib/promscrape/targetstatus.qtpl:273
 		qw422016.N().S(`ms</td><td>`)
-//line lib/promscrape/targetstatus.qtpl:272
+//line lib/promscrape/targetstatus.qtpl:274
 		qw422016.N().D(ts.samplesScraped)
-//line lib/promscrape/targetstatus.qtpl:272
+//line lib/promscrape/targetstatus.qtpl:274
 		qw422016.N().S(`</td><td>`)
-//line lib/promscrape/targetstatus.qtpl:273
+//line lib/promscrape/targetstatus.qtpl:275
 		if ts.err != nil {
-//line lib/promscrape/targetstatus.qtpl:273
+//line lib/promscrape/targetstatus.qtpl:275
 			qw422016.E().S(ts.err.Error())
-//line lib/promscrape/targetstatus.qtpl:273
+//line lib/promscrape/targetstatus.qtpl:275
 		}
-//line lib/promscrape/targetstatus.qtpl:273
+//line lib/promscrape/targetstatus.qtpl:275
 		qw422016.N().S(`</td></tr>`)
-//line lib/promscrape/targetstatus.qtpl:275
+//line lib/promscrape/targetstatus.qtpl:277
 	}
-//line lib/promscrape/targetstatus.qtpl:275
+//line lib/promscrape/targetstatus.qtpl:277
 	qw422016.N().S(`</tbody></table></div></div></div>`)
-//line lib/promscrape/targetstatus.qtpl:281
-}
-
-//line lib/promscrape/targetstatus.qtpl:281
-func writescrapeJobTargets(qq422016 qtio422016.Writer, num int, jts *jobTargetsStatuses, hasOriginalLabels bool) {
-//line lib/promscrape/targetstatus.qtpl:281
-	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:281
-	streamscrapeJobTargets(qw422016, num, jts, hasOriginalLabels)
-//line lib/promscrape/targetstatus.qtpl:281
-	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:281
-}
-
-//line lib/promscrape/targetstatus.qtpl:281
-func scrapeJobTargets(num int, jts *jobTargetsStatuses, hasOriginalLabels bool) string {
-//line lib/promscrape/targetstatus.qtpl:281
-	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:281
-	writescrapeJobTargets(qb422016, num, jts, hasOriginalLabels)
-//line lib/promscrape/targetstatus.qtpl:281
-	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:281
-	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:281
-	return qs422016
-//line lib/promscrape/targetstatus.qtpl:281
+//line lib/promscrape/targetstatus.qtpl:283
 }
 
 //line lib/promscrape/targetstatus.qtpl:283
+func writescrapeJobTargets(qq422016 qtio422016.Writer, num int, jts *jobTargetsStatuses, hasOriginalLabels bool) {
+//line lib/promscrape/targetstatus.qtpl:283
+	qw422016 := qt422016.AcquireWriter(qq422016)
+//line lib/promscrape/targetstatus.qtpl:283
+	streamscrapeJobTargets(qw422016, num, jts, hasOriginalLabels)
+//line lib/promscrape/targetstatus.qtpl:283
+	qt422016.ReleaseWriter(qw422016)
+//line lib/promscrape/targetstatus.qtpl:283
+}
+
+//line lib/promscrape/targetstatus.qtpl:283
+func scrapeJobTargets(num int, jts *jobTargetsStatuses, hasOriginalLabels bool) string {
+//line lib/promscrape/targetstatus.qtpl:283
+	qb422016 := qt422016.AcquireByteBuffer()
+//line lib/promscrape/targetstatus.qtpl:283
+	writescrapeJobTargets(qb422016, num, jts, hasOriginalLabels)
+//line lib/promscrape/targetstatus.qtpl:283
+	qs422016 := string(qb422016.B)
+//line lib/promscrape/targetstatus.qtpl:283
+	qt422016.ReleaseByteBuffer(qb422016)
+//line lib/promscrape/targetstatus.qtpl:283
+	return qs422016
+//line lib/promscrape/targetstatus.qtpl:283
+}
+
+//line lib/promscrape/targetstatus.qtpl:285
 func streamdiscoveredTargets(qw422016 *qt422016.Writer, tsr *targetsStatusResult) {
-//line lib/promscrape/targetstatus.qtpl:284
-	if !tsr.hasOriginalLabels {
-//line lib/promscrape/targetstatus.qtpl:284
-		qw422016.N().S(`Discovered targets are unavailable when -promscrape.dropOriginalLabels command-line flag is set`)
 //line lib/promscrape/targetstatus.qtpl:286
+	if !tsr.hasOriginalLabels {
+//line lib/promscrape/targetstatus.qtpl:286
+		qw422016.N().S(`Discovered targets are unavailable when -promscrape.dropOriginalLabels command-line flag is set`)
+//line lib/promscrape/targetstatus.qtpl:288
 		return
-//line lib/promscrape/targetstatus.qtpl:287
-	}
 //line lib/promscrape/targetstatus.qtpl:289
+	}
+//line lib/promscrape/targetstatus.qtpl:291
 	tljs := tsr.getTargetLabelsByJob()
 
-//line lib/promscrape/targetstatus.qtpl:289
+//line lib/promscrape/targetstatus.qtpl:291
 	qw422016.N().S(`<div class="row mt-4"><div class="col-12">`)
-//line lib/promscrape/targetstatus.qtpl:292
+//line lib/promscrape/targetstatus.qtpl:294
 	for i, tlj := range tljs {
-//line lib/promscrape/targetstatus.qtpl:293
+//line lib/promscrape/targetstatus.qtpl:295
 		streamdiscoveredJobTargets(qw422016, i, tlj)
-//line lib/promscrape/targetstatus.qtpl:294
+//line lib/promscrape/targetstatus.qtpl:296
 	}
-//line lib/promscrape/targetstatus.qtpl:294
+//line lib/promscrape/targetstatus.qtpl:296
 	qw422016.N().S(`</div></div>`)
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 }
 
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 func writediscoveredTargets(qq422016 qtio422016.Writer, tsr *targetsStatusResult) {
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	streamdiscoveredTargets(qw422016, tsr)
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 }
 
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 func discoveredTargets(tsr *targetsStatusResult) string {
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	writediscoveredTargets(qb422016, tsr)
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:297
+//line lib/promscrape/targetstatus.qtpl:299
 }
 
-//line lib/promscrape/targetstatus.qtpl:299
+//line lib/promscrape/targetstatus.qtpl:301
 func streamdiscoveredJobTargets(qw422016 *qt422016.Writer, num int, tlj *targetLabelsByJob) {
-//line lib/promscrape/targetstatus.qtpl:299
+//line lib/promscrape/targetstatus.qtpl:301
 	qw422016.N().S(`<h4><span class="me-2">`)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.E().S(tlj.jobName)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.N().S(`(`)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.N().D(tlj.activeTargets)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.N().S(`/`)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.N().D(tlj.activeTargets + tlj.droppedTargets)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:301
+//line lib/promscrape/targetstatus.qtpl:303
 	qw422016.N().S(`active)</span>`)
-//line lib/promscrape/targetstatus.qtpl:302
+//line lib/promscrape/targetstatus.qtpl:304
 	streamshowHideScrapeJobButtons(qw422016, num)
-//line lib/promscrape/targetstatus.qtpl:302
+//line lib/promscrape/targetstatus.qtpl:304
 	qw422016.N().S(`</h4><div id="scrape-job-`)
-//line lib/promscrape/targetstatus.qtpl:304
+//line lib/promscrape/targetstatus.qtpl:306
 	qw422016.N().D(num)
-//line lib/promscrape/targetstatus.qtpl:304
+//line lib/promscrape/targetstatus.qtpl:306
 	qw422016.N().S(`" class="scrape-job table-responsive"><table class="table table-striped table-hover table-bordered table-sm"><thead><tr><th scope="col" style="width: 5%">Status</th><th scope="col" style="width: 60%">Discovered Labels</th><th scope="col" style="width: 30%">Target Labels</th><th scope="col" stile="width: 5%">Debug relabeling</a></tr></thead><tbody>`)
-//line lib/promscrape/targetstatus.qtpl:315
-	for _, t := range tlj.targets {
-//line lib/promscrape/targetstatus.qtpl:315
-		qw422016.N().S(`<tr`)
 //line lib/promscrape/targetstatus.qtpl:317
+	for _, t := range tlj.targets {
+//line lib/promscrape/targetstatus.qtpl:317
+		qw422016.N().S(`<tr`)
+//line lib/promscrape/targetstatus.qtpl:319
 		if !t.up {
-//line lib/promscrape/targetstatus.qtpl:318
+//line lib/promscrape/targetstatus.qtpl:320
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:318
+//line lib/promscrape/targetstatus.qtpl:320
 			qw422016.N().S(`role="alert"`)
-//line lib/promscrape/targetstatus.qtpl:318
+//line lib/promscrape/targetstatus.qtpl:320
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:319
+//line lib/promscrape/targetstatus.qtpl:321
 			if t.labels.Len() > 0 {
-//line lib/promscrape/targetstatus.qtpl:319
+//line lib/promscrape/targetstatus.qtpl:321
 				qw422016.N().S(`class="alert alert-danger"`)
-//line lib/promscrape/targetstatus.qtpl:321
-			} else {
-//line lib/promscrape/targetstatus.qtpl:321
-				qw422016.N().S(`class="alert alert-warning"`)
 //line lib/promscrape/targetstatus.qtpl:323
+			} else {
+//line lib/promscrape/targetstatus.qtpl:323
+				qw422016.N().S(`class="alert alert-warning"`)
+//line lib/promscrape/targetstatus.qtpl:325
 			}
-//line lib/promscrape/targetstatus.qtpl:324
+//line lib/promscrape/targetstatus.qtpl:326
 		}
-//line lib/promscrape/targetstatus.qtpl:324
+//line lib/promscrape/targetstatus.qtpl:326
 		qw422016.N().S(`><td>`)
-//line lib/promscrape/targetstatus.qtpl:327
+//line lib/promscrape/targetstatus.qtpl:329
 		if t.up {
-//line lib/promscrape/targetstatus.qtpl:327
+//line lib/promscrape/targetstatus.qtpl:329
 			qw422016.N().S(`<span class="badge bg-success">UP</span>`)
-//line lib/promscrape/targetstatus.qtpl:329
+//line lib/promscrape/targetstatus.qtpl:331
 		} else if t.labels.Len() > 0 {
-//line lib/promscrape/targetstatus.qtpl:329
+//line lib/promscrape/targetstatus.qtpl:331
 			qw422016.N().S(`<span class="badge bg-danger">DOWN</span>`)
-//line lib/promscrape/targetstatus.qtpl:331
+//line lib/promscrape/targetstatus.qtpl:333
 		} else {
-//line lib/promscrape/targetstatus.qtpl:331
+//line lib/promscrape/targetstatus.qtpl:333
 			qw422016.N().S(`<span class="badge bg-warning">DROPPED (`)
-//line lib/promscrape/targetstatus.qtpl:332
+//line lib/promscrape/targetstatus.qtpl:334
 			qw422016.E().S(string(t.dropReason))
-//line lib/promscrape/targetstatus.qtpl:332
+//line lib/promscrape/targetstatus.qtpl:334
 			qw422016.N().S(`)</span>`)
-//line lib/promscrape/targetstatus.qtpl:333
+//line lib/promscrape/targetstatus.qtpl:335
 			if len(t.clusterMemberNums) > 0 {
-//line lib/promscrape/targetstatus.qtpl:333
+//line lib/promscrape/targetstatus.qtpl:335
 				qw422016.N().S(`<br/><span title="The target exists at vmagent instances with the given -promscrape.cluster.memberNum values">exists at`)
-//line lib/promscrape/targetstatus.qtpl:336
-				qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:337
-				for i, memberNum := range t.clusterMemberNums {
 //line lib/promscrape/targetstatus.qtpl:338
-					qw422016.N().D(memberNum)
+				qw422016.N().S(` `)
 //line lib/promscrape/targetstatus.qtpl:339
-					if i+1 < len(t.clusterMemberNums) {
-//line lib/promscrape/targetstatus.qtpl:339
-						qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:339
-						qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:339
-					}
+				for i, memberNum := range t.clusterMemberNums {
 //line lib/promscrape/targetstatus.qtpl:340
-				}
+					if *clusterMemberURLTemplate == "" {
 //line lib/promscrape/targetstatus.qtpl:341
+						qw422016.N().D(memberNum)
+//line lib/promscrape/targetstatus.qtpl:342
+					} else {
+//line lib/promscrape/targetstatus.qtpl:342
+						qw422016.N().S(`<a href="`)
+//line lib/promscrape/targetstatus.qtpl:343
+						qw422016.E().S(strings.ReplaceAll(*clusterMemberURLTemplate, "%d", strconv.Itoa(memberNum)))
+//line lib/promscrape/targetstatus.qtpl:343
+						qw422016.N().S(`">`)
+//line lib/promscrape/targetstatus.qtpl:343
+						qw422016.N().D(memberNum)
+//line lib/promscrape/targetstatus.qtpl:343
+						qw422016.N().S(`</a>`)
+//line lib/promscrape/targetstatus.qtpl:344
+					}
+//line lib/promscrape/targetstatus.qtpl:345
+					if i+1 < len(t.clusterMemberNums) {
+//line lib/promscrape/targetstatus.qtpl:345
+						qw422016.N().S(`,`)
+//line lib/promscrape/targetstatus.qtpl:345
+						qw422016.N().S(` `)
+//line lib/promscrape/targetstatus.qtpl:345
+					}
+//line lib/promscrape/targetstatus.qtpl:346
+				}
+//line lib/promscrape/targetstatus.qtpl:347
 			}
-//line lib/promscrape/targetstatus.qtpl:342
+//line lib/promscrape/targetstatus.qtpl:348
 		}
-//line lib/promscrape/targetstatus.qtpl:342
-		qw422016.N().S(`</td><td class="labels">`)
-//line lib/promscrape/targetstatus.qtpl:345
-		streamformatLabels(qw422016, t.originalLabels)
-//line lib/promscrape/targetstatus.qtpl:345
-		qw422016.N().S(`</td><td class="labels">`)
 //line lib/promscrape/targetstatus.qtpl:348
-		streamformatLabels(qw422016, t.labels)
-//line lib/promscrape/targetstatus.qtpl:348
-		qw422016.N().S(`</td><td>`)
+		qw422016.N().S(`</td><td class="labels">`)
 //line lib/promscrape/targetstatus.qtpl:351
+		streamformatLabels(qw422016, t.originalLabels)
+//line lib/promscrape/targetstatus.qtpl:351
+		qw422016.N().S(`</td><td class="labels">`)
+//line lib/promscrape/targetstatus.qtpl:354
+		streamformatLabels(qw422016, t.labels)
+//line lib/promscrape/targetstatus.qtpl:354
+		qw422016.N().S(`</td><td>`)
+//line lib/promscrape/targetstatus.qtpl:357
 		targetID := getLabelsID(t.originalLabels)
 
-//line lib/promscrape/targetstatus.qtpl:351
+//line lib/promscrape/targetstatus.qtpl:357
 		qw422016.N().S(`<a href="target-relabel-debug?id=`)
-//line lib/promscrape/targetstatus.qtpl:352
+//line lib/promscrape/targetstatus.qtpl:358
 		qw422016.E().S(targetID)
-//line lib/promscrape/targetstatus.qtpl:352
+//line lib/promscrape/targetstatus.qtpl:358
 		qw422016.N().S(`" target="_blank">debug</a></td></tr>`)
-//line lib/promscrape/targetstatus.qtpl:355
+//line lib/promscrape/targetstatus.qtpl:361
 	}
-//line lib/promscrape/targetstatus.qtpl:355
+//line lib/promscrape/targetstatus.qtpl:361
 	qw422016.N().S(`</tbody></table></div>`)
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 }
 
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 func writediscoveredJobTargets(qq422016 qtio422016.Writer, num int, tlj *targetLabelsByJob) {
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	streamdiscoveredJobTargets(qw422016, num, tlj)
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 }
 
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 func discoveredJobTargets(num int, tlj *targetLabelsByJob) string {
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	writediscoveredJobTargets(qb422016, num, tlj)
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:359
+//line lib/promscrape/targetstatus.qtpl:365
 }
 
-//line lib/promscrape/targetstatus.qtpl:361
+//line lib/promscrape/targetstatus.qtpl:367
 func streamshowHideScrapeJobButtons(qw422016 *qt422016.Writer, num int) {
-//line lib/promscrape/targetstatus.qtpl:361
+//line lib/promscrape/targetstatus.qtpl:367
 	qw422016.N().S(`<button type="button" class="btn btn-primary btn-sm me-1"onclick="document.getElementById('scrape-job-`)
-//line lib/promscrape/targetstatus.qtpl:363
+//line lib/promscrape/targetstatus.qtpl:369
 	qw422016.N().D(num)
-//line lib/promscrape/targetstatus.qtpl:363
+//line lib/promscrape/targetstatus.qtpl:369
 	qw422016.N().S(`').style.display='none'">collapse</button><button type="button" class="btn btn-secondary btn-sm me-1"onclick="document.getElementById('scrape-job-`)
-//line lib/promscrape/targetstatus.qtpl:367
+//line lib/promscrape/targetstatus.qtpl:373
 	qw422016.N().D(num)
-//line lib/promscrape/targetstatus.qtpl:367
+//line lib/promscrape/targetstatus.qtpl:373
 	qw422016.N().S(`').style.display='block'">expand</button>`)
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 }
 
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 func writeshowHideScrapeJobButtons(qq422016 qtio422016.Writer, num int) {
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	streamshowHideScrapeJobButtons(qw422016, num)
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 }
 
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 func showHideScrapeJobButtons(num int) string {
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	writeshowHideScrapeJobButtons(qb422016, num)
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:370
+//line lib/promscrape/targetstatus.qtpl:376
 }
 
-//line lib/promscrape/targetstatus.qtpl:372
+//line lib/promscrape/targetstatus.qtpl:378
 func streamqueryArgs(qw422016 *qt422016.Writer, filter *requestFilter, override map[string]string) {
-//line lib/promscrape/targetstatus.qtpl:374
+//line lib/promscrape/targetstatus.qtpl:380
 	showOnlyUnhealthy := "false"
 	if filter.showOnlyUnhealthy {
 		showOnlyUnhealthy = "true"
@@ -1005,89 +1023,89 @@ func streamqueryArgs(qw422016 *qt422016.Writer, filter *requestFilter, override
 		qa[k] = []string{v}
 	}
 
-//line lib/promscrape/targetstatus.qtpl:391
+//line lib/promscrape/targetstatus.qtpl:397
 	qw422016.E().S(qa.Encode())
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 }
 
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 func writequeryArgs(qq422016 qtio422016.Writer, filter *requestFilter, override map[string]string) {
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	streamqueryArgs(qw422016, filter, override)
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 }
 
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 func queryArgs(filter *requestFilter, override map[string]string) string {
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	writequeryArgs(qb422016, filter, override)
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:392
+//line lib/promscrape/targetstatus.qtpl:398
 }
 
-//line lib/promscrape/targetstatus.qtpl:394
+//line lib/promscrape/targetstatus.qtpl:400
 func streamformatLabels(qw422016 *qt422016.Writer, labels *promutils.Labels) {
-//line lib/promscrape/targetstatus.qtpl:395
+//line lib/promscrape/targetstatus.qtpl:401
 	labelsList := labels.GetLabels()
 
-//line lib/promscrape/targetstatus.qtpl:395
+//line lib/promscrape/targetstatus.qtpl:401
 	qw422016.N().S(`{`)
-//line lib/promscrape/targetstatus.qtpl:397
+//line lib/promscrape/targetstatus.qtpl:403
 	for i, label := range labelsList {
-//line lib/promscrape/targetstatus.qtpl:398
+//line lib/promscrape/targetstatus.qtpl:404
 		qw422016.E().S(label.Name)
-//line lib/promscrape/targetstatus.qtpl:398
+//line lib/promscrape/targetstatus.qtpl:404
 		qw422016.N().S(`=`)
-//line lib/promscrape/targetstatus.qtpl:398
+//line lib/promscrape/targetstatus.qtpl:404
 		qw422016.E().Q(label.Value)
-//line lib/promscrape/targetstatus.qtpl:399
+//line lib/promscrape/targetstatus.qtpl:405
 		if i+1 < len(labelsList) {
-//line lib/promscrape/targetstatus.qtpl:399
+//line lib/promscrape/targetstatus.qtpl:405
 			qw422016.N().S(`,`)
-//line lib/promscrape/targetstatus.qtpl:399
+//line lib/promscrape/targetstatus.qtpl:405
 			qw422016.N().S(` `)
-//line lib/promscrape/targetstatus.qtpl:399
+//line lib/promscrape/targetstatus.qtpl:405
 		}
-//line lib/promscrape/targetstatus.qtpl:400
+//line lib/promscrape/targetstatus.qtpl:406
 	}
-//line lib/promscrape/targetstatus.qtpl:400
+//line lib/promscrape/targetstatus.qtpl:406
 	qw422016.N().S(`}`)
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 }
 
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 func writeformatLabels(qq422016 qtio422016.Writer, labels *promutils.Labels) {
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	qw422016 := qt422016.AcquireWriter(qq422016)
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	streamformatLabels(qw422016, labels)
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	qt422016.ReleaseWriter(qw422016)
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 }
 
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 func formatLabels(labels *promutils.Labels) string {
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	qb422016 := qt422016.AcquireByteBuffer()
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	writeformatLabels(qb422016, labels)
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	qs422016 := string(qb422016.B)
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	qt422016.ReleaseByteBuffer(qb422016)
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 	return qs422016
-//line lib/promscrape/targetstatus.qtpl:402
+//line lib/promscrape/targetstatus.qtpl:408
 }