mirror of https://gerrit.hackerspace.pl/hscloud
95 lines
1.8 KiB
Go
95 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sort"
|
|
|
|
humanize "github.com/dustin/go-humanize"
|
|
)
|
|
|
|
const processorsFragment = `
|
|
<style type="text/css">
|
|
.table td,th {
|
|
background-color: #eee;
|
|
padding: 0.2em 0.4em 0.2em 0.4em;
|
|
}
|
|
.table th {
|
|
background-color: #c0c0c0;
|
|
}
|
|
.table {
|
|
background-color: #fff;
|
|
border-spacing: 0.2em;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
}
|
|
</style>
|
|
<div>
|
|
<table class="table">
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Status</th>
|
|
<th>Last Run</th>
|
|
<th>Next Run</th>
|
|
</tr>
|
|
{{range .Processors }}
|
|
<tr>
|
|
<td>{{ .Name }}</td>
|
|
{{ if ne .Status "OK" }}
|
|
<td style="background-color: #ff3030;">{{ .Status }}</td>
|
|
{{ else }}
|
|
<td>{{ .Status }}</td>
|
|
{{ end }}
|
|
<td>{{ .LastRun }}</td>
|
|
<td>{{ .NextRun }}</td>
|
|
</tr>
|
|
{{end}}
|
|
</table>
|
|
</div>
|
|
`
|
|
|
|
type processorsFragmentEntry struct {
|
|
Name string
|
|
Status string
|
|
LastRun string
|
|
NextRun string
|
|
}
|
|
|
|
func (s *service) statuszProcessors(ctx context.Context) interface{} {
|
|
s.processorsMu.RLock()
|
|
defer s.processorsMu.RUnlock()
|
|
|
|
res := struct {
|
|
Processors []*processorsFragmentEntry
|
|
}{
|
|
Processors: make([]*processorsFragmentEntry, len(s.processors)),
|
|
}
|
|
|
|
i := 0
|
|
for _, processor := range s.processors {
|
|
lastRun := "never"
|
|
if processor.lastRun != nil {
|
|
lastRun = humanize.Time(*processor.lastRun)
|
|
}
|
|
nextRun := "any second now"
|
|
if nr := processor.nextRun(); nr != nil {
|
|
nextRun = humanize.Time(*nr)
|
|
}
|
|
status := "OK"
|
|
if processor.lastErr != nil {
|
|
status = fmt.Sprintf("%v", processor.lastErr)
|
|
}
|
|
res.Processors[i] = &processorsFragmentEntry{
|
|
Name: processor.name,
|
|
Status: status,
|
|
LastRun: lastRun,
|
|
NextRun: nextRun,
|
|
}
|
|
i += 1
|
|
}
|
|
|
|
sort.Slice(res.Processors, func(i, j int) bool { return res.Processors[i].Name < res.Processors[j].Name })
|
|
|
|
return res
|
|
}
|