From a507110787fd5d595586f0428d50a1e522e49a65 Mon Sep 17 00:00:00 2001 From: Richard Patel Date: Sun, 28 Oct 2018 02:47:20 +0200 Subject: [PATCH] Add stats interval parameter --- config.go | 6 ++++++ config.yml | 3 ++- scheduler.go | 25 ------------------------- stats.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ worker.go | 5 ----- 5 files changed, 53 insertions(+), 31 deletions(-) create mode 100644 stats.go diff --git a/config.go b/config.go index 9cc2a8b..64a7856 100644 --- a/config.go +++ b/config.go @@ -3,6 +3,7 @@ package main import ( "github.com/sirupsen/logrus" "github.com/spf13/viper" + "time" ) var config struct { @@ -10,6 +11,7 @@ var config struct { Token string Retries int Workers int + StatsInterval time.Duration } const ( @@ -17,11 +19,13 @@ const ( ConfToken = "token" ConfRetries = "retries" ConfWorkers = "workers" + ConfStatsInterval = "stats_interval" ) func prepareConfig() { viper.SetDefault(ConfRetries, 3) viper.SetDefault(ConfWorkers, 50) + viper.SetDefault(ConfStatsInterval, 3 * time.Second) } func readConfig() { @@ -51,4 +55,6 @@ func readConfig() { if config.Workers <= 0 { logrus.Fatal("config: illegal value %d for workers!", config.Workers) } + + config.StatsInterval = viper.GetDuration(ConfStatsInterval) } diff --git a/config.yml b/config.yml index c66122c..d31471c 100644 --- a/config.yml +++ b/config.yml @@ -1,2 +1,3 @@ server_url: localhost:6969 -token: abc \ No newline at end of file +token: abc +stats: 5s \ No newline at end of file diff --git a/scheduler.go b/scheduler.go index 853f64b..87ec34f 100644 --- a/scheduler.go +++ b/scheduler.go @@ -2,10 +2,7 @@ package main import ( "context" - "github.com/sirupsen/logrus" "net/url" - "sync/atomic" - "time" ) type Job struct { @@ -49,28 +46,6 @@ func (r *RemoteDir) Watch() { r.Wait.Wait() } -func Stats(c context.Context) { - var startedLast uint64 = 0 - ticker := time.NewTicker(time.Second).C - for { - select { - case <-ticker: - startedNow := atomic.LoadUint64(&totalStarted) - logrus.WithFields(logrus.Fields{ - "per_second": startedNow - startedLast, - "done": atomic.LoadUint64(&totalDone), - "retries": atomic.LoadUint64(&totalRetries), - "aborted": atomic.LoadUint64(&totalAborted), - }).Info("Stats") - - startedLast = startedNow - - case <-c.Done(): - return - } - } -} - func makeJobBuffer() (chan<- Job, <-chan Job) { in := make(chan Job) out := make(chan Job) diff --git a/stats.go b/stats.go new file mode 100644 index 0000000..f78e557 --- /dev/null +++ b/stats.go @@ -0,0 +1,45 @@ +package main + +import ( + "context" + "github.com/sirupsen/logrus" + "math" + "sync/atomic" + "time" +) + +var totalStarted uint64 +var totalDone uint64 +var totalRetries uint64 +var totalAborted uint64 + +func Stats(c context.Context) { + var startedLast uint64 = 0 + ticker := time.NewTicker(config.StatsInterval).C + for { + select { + case <-ticker: + startedNow := atomic.LoadUint64(&totalStarted) + + perSecond := float64(startedNow - startedLast) / + config.StatsInterval.Seconds() + + // Round to .5 + perSecond *= 2 + perSecond = math.Round(perSecond) + perSecond /= 2 + + logrus.WithFields(logrus.Fields{ + "per_second": perSecond, + "done": atomic.LoadUint64(&totalDone), + "retries": atomic.LoadUint64(&totalRetries), + "aborted": atomic.LoadUint64(&totalAborted), + }).Info("Stats") + + startedLast = startedNow + + case <-c.Done(): + return + } + } +} diff --git a/worker.go b/worker.go index 002182c..76d27ed 100644 --- a/worker.go +++ b/worker.go @@ -7,11 +7,6 @@ import ( "sync/atomic" ) -var totalStarted uint64 -var totalDone uint64 -var totalRetries uint64 -var totalAborted uint64 - var globalWait sync.WaitGroup type WorkerContext struct {