package plugins import ( "fmt" "os" "time" "git.maximhutz.com/max/lambda/internal/statistics" "git.maximhutz.com/max/lambda/pkg/reducer" ) // An observer, to track reduction performance. type Statistics struct { start time.Time steps uint64 } // Create a new reduction performance Statistics. func NewStatistics(r reducer.Reducer) *Statistics { plugin := &Statistics{} r.On(reducer.StartEvent, plugin.Start) r.On(reducer.StepEvent, plugin.Step) r.On(reducer.StopEvent, plugin.Stop) return plugin } func (t *Statistics) Start() { t.start = time.Now() t.steps = 0 } func (t *Statistics) Step() { t.steps++ } func (t *Statistics) Stop() { results := statistics.Results{ StepsTaken: t.steps, TimeElapsed: uint64(time.Since(t.start).Milliseconds()), } fmt.Fprint(os.Stderr, results.String()) }