From 057294830e8e1915ee804d980d2b954ffbdff60a Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Thu, 21 Nov 2019 16:12:04 +0100 Subject: frontend: show submittable status and URL, add runner, revamp logging --- submitqueue/runner.go | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 submitqueue/runner.go (limited to 'submitqueue/runner.go') diff --git a/submitqueue/runner.go b/submitqueue/runner.go new file mode 100644 index 0000000000..2c84a7d69b --- /dev/null +++ b/submitqueue/runner.go @@ -0,0 +1,60 @@ +package submitqueue + +import ( + "sync" + "time" +) + +// Runner supervises the submit queue and records historical data about it +type Runner struct { + mut sync.Mutex + submitQueue *SubmitQueue + currentlyRunning *time.Time + results []*Result +} + +func NewRunner(sq *SubmitQueue) *Runner { + return &Runner{ + submitQueue: sq, + results: []*Result{}, + } +} + +// For the frontend to consume the data +// TODO: extend to return all the submitQueue results +func (r *Runner) GetResults() (*time.Time, []*Result) { + r.mut.Lock() + defer r.mut.Unlock() + return r.currentlyRunning, r.results +} + +// Trigger starts a new batch job +// TODO: make sure only one batch job is started at the same time +// if a batch job is already started, ignore the newest request +// TODO: be more granular in dry-run mode +func (r *Runner) Trigger(fetchOnly bool) { + r.mut.Lock() + if r.currentlyRunning != nil { + return + } + now := time.Now() + r.currentlyRunning = &now + r.mut.Unlock() + + defer func() { + r.mut.Lock() + r.currentlyRunning = nil + r.mut.Unlock() + }() + + result := r.submitQueue.Run(fetchOnly) + + r.mut.Lock() + // drop tail if size > 10 + if len(r.results) > 10 { + r.results = append([]*Result{result}, r.results[:9]...) + } else { + r.results = append([]*Result{result}, r.results...) + } + r.mut.Unlock() +} -- cgit 1.4.1