Monitor logs and panics, doesn't block on start

master
Bel LaPointe 2018-10-09 18:32:25 -06:00
parent 682f69746e
commit bc794892a3
1 changed files with 13 additions and 17 deletions

View File

@ -2,7 +2,7 @@ package monitor
import (
"errors"
"fmt"
"local1/logger"
"time"
"github.com/golang-collections/go-datastructures/queue"
@ -34,21 +34,11 @@ func (monitor *Monitor) Submit(url string, interval time.Duration) error {
}
func (monitor *Monitor) Start() error {
errs := make(chan error)
go func() {
if err := monitor.loop(); err != nil {
select {
case errs <- err:
case <-time.After(time.Second * 5):
panic(err)
}
panic(err)
}
}()
select {
case err := <-errs:
return fmt.Errorf("%s: %v", "monitor loop quit early", err)
case <-time.After(time.Second * 2):
}
return nil
}
@ -69,29 +59,35 @@ func (monitor *Monitor) loop() error {
}
var err error
if nextEvent, err = nextEventTime(queue); err != nil {
return err
logger.Log("no next event time", err)
nextEvent = time.Now().Add(time.Minute * 60)
continue
}
case <-time.After(nextEvent.Sub(time.Now())):
items, err := queue.Get(1)
if err != nil {
return err
logger.Fatal("can't get item")
}
if len(items) == 0 {
logger.Log("no items in queue")
nextEvent = time.Now().Add(time.Minute * 60)
continue
}
item, ok := items[0].(*Item)
if !ok {
return errors.New("queue contains illegal item")
logger.Fatal("queue contains illegal item")
}
monitor.trigger(item.URL)
item.increment()
queue.Put(item)
if nextEvent, err = nextEventTime(queue); err != nil {
return err
logger.Log("no next event time", err)
nextEvent = time.Now().Add(time.Minute * 60)
continue
}
}
}
return nil
return errors.New("monitor loop exited")
}
func nextEventTime(q *queue.PriorityQueue) (time.Time, error) {