48 lines
801 B
Go
48 lines
801 B
Go
|
package server
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"git.binarythought.com/cdramey/alrm/config"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type Server struct {
|
||
|
workers []*worker
|
||
|
cfg *config.Config
|
||
|
debuglvl int
|
||
|
httpsrv http.Server
|
||
|
}
|
||
|
|
||
|
func (srv *Server) Start() {
|
||
|
for _, w := range srv.workers {
|
||
|
go w.start(srv.debuglvl)
|
||
|
}
|
||
|
|
||
|
t := time.NewTicker(srv.cfg.Interval)
|
||
|
defer t.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case r := <-t.C:
|
||
|
if srv.debuglvl > 0 {
|
||
|
fmt.Printf("interval check at %s\n", r)
|
||
|
}
|
||
|
|
||
|
for _, w := range srv.workers {
|
||
|
select {
|
||
|
case w.wake <- true:
|
||
|
default:
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewServer(cfg *config.Config, debuglvl int) *Server {
|
||
|
srv := &Server{cfg: cfg, debuglvl: debuglvl}
|
||
|
for _, g := range cfg.Groups {
|
||
|
w := &worker{group: g, wake: make(chan bool)}
|
||
|
srv.workers = append(srv.workers, w)
|
||
|
}
|
||
|
return srv
|
||
|
}
|