diff --git a/monitor/monitor.go b/monitor/monitor.go index 1f8f383..9cd7386 100644 --- a/monitor/monitor.go +++ b/monitor/monitor.go @@ -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) {