A simple monitoring solution written in Go (work in progress)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
801 B

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
}