Monitor logs and panics, doesn't block on start
parent
682f69746e
commit
bc794892a3
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue