Monitor logs and panics, doesn't block on start
parent
682f69746e
commit
bc794892a3
|
|
@ -2,7 +2,7 @@ package monitor
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"local1/logger"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/golang-collections/go-datastructures/queue"
|
"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 {
|
func (monitor *Monitor) Start() error {
|
||||||
errs := make(chan error)
|
|
||||||
go func() {
|
go func() {
|
||||||
if err := monitor.loop(); err != nil {
|
if err := monitor.loop(); err != nil {
|
||||||
select {
|
panic(err)
|
||||||
case errs <- err:
|
|
||||||
case <-time.After(time.Second * 5):
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
select {
|
|
||||||
case err := <-errs:
|
|
||||||
return fmt.Errorf("%s: %v", "monitor loop quit early", err)
|
|
||||||
case <-time.After(time.Second * 2):
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,29 +59,35 @@ func (monitor *Monitor) loop() error {
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
if nextEvent, err = nextEventTime(queue); err != nil {
|
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())):
|
case <-time.After(nextEvent.Sub(time.Now())):
|
||||||
items, err := queue.Get(1)
|
items, err := queue.Get(1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
logger.Fatal("can't get item")
|
||||||
}
|
}
|
||||||
if len(items) == 0 {
|
if len(items) == 0 {
|
||||||
|
logger.Log("no items in queue")
|
||||||
|
nextEvent = time.Now().Add(time.Minute * 60)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
item, ok := items[0].(*Item)
|
item, ok := items[0].(*Item)
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.New("queue contains illegal item")
|
logger.Fatal("queue contains illegal item")
|
||||||
}
|
}
|
||||||
monitor.trigger(item.URL)
|
monitor.trigger(item.URL)
|
||||||
item.increment()
|
item.increment()
|
||||||
queue.Put(item)
|
queue.Put(item)
|
||||||
if nextEvent, err = nextEventTime(queue); err != nil {
|
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) {
|
func nextEventTime(q *queue.PriorityQueue) (time.Time, error) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue