Represent targets in a tabular interface.
This commit represents a target group's endpoints in a tabular fashion for better differentiation of their state in a concise manner.
This commit is contained in:
parent
4d15f8fefe
commit
06b4a40661
|
@ -25,7 +25,7 @@ const (
|
||||||
// The base units for the exponential backoff.
|
// The base units for the exponential backoff.
|
||||||
DEFAULT_BACKOFF_VALUE_UNIT = time.Second
|
DEFAULT_BACKOFF_VALUE_UNIT = time.Second
|
||||||
// The maximum allowed backoff time.
|
// The maximum allowed backoff time.
|
||||||
MAXIMUM_BACKOFF_VALUE = 30 * time.Minute
|
MAXIMUM_BACKOFF_VALUE = 2 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
// scheduler is an interface that various scheduling strategies must fulfill
|
// scheduler is an interface that various scheduling strategies must fulfill
|
||||||
|
|
|
@ -97,7 +97,7 @@ type Target interface {
|
||||||
// time, but it should occur no sooner than it.
|
// time, but it should occur no sooner than it.
|
||||||
//
|
//
|
||||||
// Right now, this is used as the sorting key in TargetPool.
|
// Right now, this is used as the sorting key in TargetPool.
|
||||||
scheduledFor() time.Time
|
ScheduledFor() time.Time
|
||||||
// Return the last encountered scrape error, if any.
|
// Return the last encountered scrape error, if any.
|
||||||
LastError() error
|
LastError() error
|
||||||
// The address to which the Target corresponds. Out of all of the available
|
// The address to which the Target corresponds. Out of all of the available
|
||||||
|
@ -176,11 +176,11 @@ func (t *target) recordScrapeHealth(results chan<- *extraction.Result, timestamp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *target) Scrape(earliest time.Time, results chan<- *extraction.Result) (err error) {
|
func (t *target) Scrape(earliest time.Time, results chan<- *extraction.Result) error {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
futureState := t.state
|
futureState := t.state
|
||||||
|
err := t.scrape(now, results)
|
||||||
if err = t.scrape(now, results); err != nil {
|
if err != nil {
|
||||||
t.recordScrapeHealth(results, now, false)
|
t.recordScrapeHealth(results, now, false)
|
||||||
futureState = UNREACHABLE
|
futureState = UNREACHABLE
|
||||||
} else {
|
} else {
|
||||||
|
@ -249,23 +249,23 @@ func (t *target) scrape(timestamp time.Time, results chan<- *extraction.Result)
|
||||||
return processor.ProcessSingle(buf, results, processOptions)
|
return processor.ProcessSingle(buf, results, processOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t target) State() TargetState {
|
func (t *target) State() TargetState {
|
||||||
return t.state
|
return t.state
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t target) scheduledFor() time.Time {
|
func (t *target) ScheduledFor() time.Time {
|
||||||
return t.scheduler.ScheduledFor()
|
return t.scheduler.ScheduledFor()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t target) LastError() error {
|
func (t *target) LastError() error {
|
||||||
return t.lastError
|
return t.lastError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t target) Address() string {
|
func (t *target) Address() string {
|
||||||
return t.address
|
return t.address
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t target) GlobalAddress() string {
|
func (t *target) GlobalAddress() string {
|
||||||
address := t.address
|
address := t.address
|
||||||
hostname, err := os.Hostname()
|
hostname, err := os.Hostname()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -278,7 +278,7 @@ func (t target) GlobalAddress() string {
|
||||||
return address
|
return address
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t target) BaseLabels() clientmodel.LabelSet {
|
func (t *target) BaseLabels() clientmodel.LabelSet {
|
||||||
return t.baseLabels
|
return t.baseLabels
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,7 +299,7 @@ func (t targets) Len() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t targets) Less(i, j int) bool {
|
func (t targets) Less(i, j int) bool {
|
||||||
return t[i].scheduledFor().Before(t[j].scheduledFor())
|
return t[i].ScheduledFor().Before(t[j].ScheduledFor())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t targets) Swap(i, j int) {
|
func (t targets) Swap(i, j int) {
|
||||||
|
|
|
@ -66,7 +66,7 @@ func (t fakeTarget) State() TargetState {
|
||||||
return ALIVE
|
return ALIVE
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *fakeTarget) scheduledFor() (time time.Time) {
|
func (t *fakeTarget) ScheduledFor() (time time.Time) {
|
||||||
time = t.schedules[t.scheduleIndex]
|
time = t.schedules[t.scheduleIndex]
|
||||||
t.scheduleIndex++
|
t.scheduleIndex++
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ func (p *TargetPool) runIteration(results chan<- *extraction.Result, interval ti
|
||||||
for _, target := range p.targets {
|
for _, target := range p.targets {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
|
||||||
if target.scheduledFor().After(now) {
|
if target.ScheduledFor().After(now) {
|
||||||
// None of the remaining targets are ready to be scheduled. Signal that
|
// None of the remaining targets are ready to be scheduled. Signal that
|
||||||
// we're done processing them in this scrape iteration.
|
// we're done processing them in this scrape iteration.
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -42,19 +42,42 @@
|
||||||
<div class="grouping_box">
|
<div class="grouping_box">
|
||||||
<ul>
|
<ul>
|
||||||
{{range $job, $pool := .TargetPools}}
|
{{range $job, $pool := .TargetPools}}
|
||||||
<li>{{$job}}
|
<li>{{$job}}
|
||||||
<ul>
|
<table>
|
||||||
{{range $pool.Targets}}
|
<thead>
|
||||||
<li>
|
<tr>
|
||||||
<a href="{{.GlobalAddress}}">{{.Address}}</a> (State: {{.State}}, Base Labels: {{.BaseLabels}})
|
<th>Endpoint</th>
|
||||||
{{if .LastError}}
|
<th>State</th>
|
||||||
<br/>
|
<th>Base Labels</th>
|
||||||
<span class="error_text"><b>Scrape error:</b> "{{.LastError}}"</span>
|
<th>Earliest Retrieval</th>
|
||||||
{{end}}
|
<th>Error</th>
|
||||||
</li>
|
</tr>
|
||||||
{{end}}
|
</thead>
|
||||||
</ul>
|
<tbody>
|
||||||
</li>
|
{{range $pool.Targets}}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="{{.GlobalAddress}}">{{.Address}}</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{.State}}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{.BaseLabels}}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{.ScheduledFor}}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{if .LastError}}
|
||||||
|
<span class="error_text">{{.LastError}}</span>
|
||||||
|
{{end}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{end}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
{{end}}
|
{{end}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue