Add job monitor interface to allow for collecting job metrics (#659)
* Add metrics each run of job * Fix lint * Fix test lint * Fix backwards job status * Add tags * Comment example * Rename it * Fix some names * Fix readme * update readme, examples, naming * fix unrelated test that was leaking scheduler * remove overzealous leak detection * rename interface methods --------- Co-authored-by: gorodet-sky <gorodetsky.dev@gmail.com>
This commit is contained in:
@@ -684,6 +684,69 @@ func ExampleWithLogger() {
|
||||
)
|
||||
}
|
||||
|
||||
func ExampleWithMonitor() {
|
||||
//type exampleMonitor struct {
|
||||
// mu sync.Mutex
|
||||
// counter map[string]int
|
||||
// time map[string][]time.Duration
|
||||
//}
|
||||
//
|
||||
//func newExampleMonitor() *exampleMonitor {
|
||||
// return &exampleMonitor{
|
||||
// counter: make(map[string]int),
|
||||
// time: make(map[string][]time.Duration),
|
||||
//}
|
||||
//}
|
||||
//
|
||||
//func (t *exampleMonitor) IncrementJob(_ uuid.UUID, name string, _ []string, _ JobStatus) {
|
||||
// t.mu.Lock()
|
||||
// defer t.mu.Unlock()
|
||||
// _, ok := t.counter[name]
|
||||
// if !ok {
|
||||
// t.counter[name] = 0
|
||||
// }
|
||||
// t.counter[name]++
|
||||
//}
|
||||
//
|
||||
//func (t *exampleMonitor) RecordJobTiming(startTime, endTime time.Time, _ uuid.UUID, name string, _ []string) {
|
||||
// t.mu.Lock()
|
||||
// defer t.mu.Unlock()
|
||||
// _, ok := t.time[name]
|
||||
// if !ok {
|
||||
// t.time[name] = make([]time.Duration, 0)
|
||||
// }
|
||||
// t.time[name] = append(t.time[name], endTime.Sub(startTime))
|
||||
//}
|
||||
//
|
||||
//monitor := newExampleMonitor()
|
||||
//s, _ := NewScheduler(
|
||||
// WithMonitor(monitor),
|
||||
//)
|
||||
//name := "example"
|
||||
//_, _ = s.NewJob(
|
||||
// DurationJob(
|
||||
// time.Second,
|
||||
// ),
|
||||
// NewTask(
|
||||
// func() {
|
||||
// time.Sleep(1 * time.Second)
|
||||
// },
|
||||
// ),
|
||||
// WithName(name),
|
||||
// WithStartAt(
|
||||
// WithStartImmediately(),
|
||||
// ),
|
||||
//)
|
||||
//s.Start()
|
||||
//time.Sleep(5 * time.Second)
|
||||
//_ = s.Shutdown()
|
||||
//
|
||||
//fmt.Printf("Job %q total execute count: %d\n", name, monitor.counter[name])
|
||||
//for i, val := range monitor.time[name] {
|
||||
// fmt.Printf("Job %q execute #%d elapsed %.4f seconds\n", name, i+1, val.Seconds())
|
||||
//}
|
||||
}
|
||||
|
||||
func ExampleWithName() {
|
||||
s, _ := NewScheduler()
|
||||
defer func() { _ = s.Shutdown() }()
|
||||
|
||||
Reference in New Issue
Block a user