http report wip

This commit is contained in:
nils måsén 2021-06-27 15:30:23 +02:00
parent e3dd8d688a
commit efaf7190ee
25 changed files with 350 additions and 284 deletions

View file

@ -1,90 +1,78 @@
package session
import (
"github.com/containrrr/watchtower/pkg/types"
"sort"
"time"
)
type report struct {
scanned []types.ContainerReport
updated []types.ContainerReport
failed []types.ContainerReport
skipped []types.ContainerReport
stale []types.ContainerReport
fresh []types.ContainerReport
}
func (r *report) Scanned() []types.ContainerReport {
return r.scanned
}
func (r *report) Updated() []types.ContainerReport {
return r.updated
}
func (r *report) Failed() []types.ContainerReport {
return r.failed
}
func (r *report) Skipped() []types.ContainerReport {
return r.skipped
}
func (r *report) Stale() []types.ContainerReport {
return r.stale
}
func (r *report) Fresh() []types.ContainerReport {
return r.fresh
type Report struct {
Started time.Time
Ended time.Time
Trigger Trigger
Scanned []*ContainerStatus
Updated []*ContainerStatus
Failed []*ContainerStatus
Skipped []*ContainerStatus
Stale []*ContainerStatus
Fresh []*ContainerStatus
}
// NewReport creates a types.Report from the supplied Progress
func NewReport(progress Progress) types.Report {
report := &report{
scanned: []types.ContainerReport{},
updated: []types.ContainerReport{},
failed: []types.ContainerReport{},
skipped: []types.ContainerReport{},
stale: []types.ContainerReport{},
fresh: []types.ContainerReport{},
// s.Started, time.Now().UTC(), s.Trigger, s.Progress
func NewReport(started, ended time.Time, trigger Trigger, progress Progress) *Report {
report := &Report{
Started: started,
Ended: ended,
Trigger: trigger,
Scanned: []*ContainerStatus{},
Updated: []*ContainerStatus{},
Failed: []*ContainerStatus{},
Skipped: []*ContainerStatus{},
Stale: []*ContainerStatus{},
Fresh: []*ContainerStatus{},
}
for _, update := range progress {
if update.state == SkippedState {
report.skipped = append(report.skipped, update)
if update.State == SkippedState {
report.Skipped = append(report.Skipped, update)
continue
}
report.scanned = append(report.scanned, update)
if update.newImage == update.oldImage {
update.state = FreshState
report.fresh = append(report.fresh, update)
report.Scanned = append(report.Scanned, update)
if update.NewImageID == update.OldImageID {
update.State = FreshState
report.Fresh = append(report.Fresh, update)
continue
}
switch update.state {
switch update.State {
case UpdatedState:
report.updated = append(report.updated, update)
report.Updated = append(report.Updated, update)
case FailedState:
report.failed = append(report.failed, update)
report.Failed = append(report.Failed, update)
default:
update.state = StaleState
report.stale = append(report.stale, update)
update.State = StaleState
report.Stale = append(report.Stale, update)
}
}
sort.Sort(sortableContainers(report.scanned))
sort.Sort(sortableContainers(report.updated))
sort.Sort(sortableContainers(report.failed))
sort.Sort(sortableContainers(report.skipped))
sort.Sort(sortableContainers(report.stale))
sort.Sort(sortableContainers(report.fresh))
sort.Sort(sortableContainers(report.Scanned))
sort.Sort(sortableContainers(report.Updated))
sort.Sort(sortableContainers(report.Failed))
sort.Sort(sortableContainers(report.Skipped))
sort.Sort(sortableContainers(report.Stale))
sort.Sort(sortableContainers(report.Fresh))
return report
}
type sortableContainers []types.ContainerReport
type sortableContainers []*ContainerStatus
// Len implements sort.Interface.Len
func (s sortableContainers) Len() int { return len(s) }
// Less implements sort.Interface.Less
func (s sortableContainers) Less(i, j int) bool { return s[i].ID() < s[j].ID() }
func (s sortableContainers) Less(i, j int) bool { return s[i].ID < s[j].ID }
// Swap implements sort.Interface.Swap
func (s sortableContainers) Swap(i, j int) { s[i], s[j] = s[j], s[i] }