45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
config := LoadConfig("config.yml")
|
|
|
|
for {
|
|
for _, monitor := range config.Monitors {
|
|
if monitor.ShouldCheck() {
|
|
_, alertNotice := monitor.Check()
|
|
|
|
// Should probably consider refactoring everything below here
|
|
if alertNotice != nil {
|
|
//log.Printf("Recieved an alert notice: %v", alertNotice)
|
|
var alerts []string
|
|
if alertNotice.IsUp {
|
|
alerts = monitor.AlertUp
|
|
log.Printf("Alert up: %v", monitor.AlertUp)
|
|
} else {
|
|
alerts = monitor.AlertDown
|
|
log.Printf("Alert down: %v", monitor.AlertDown)
|
|
}
|
|
if alerts == nil {
|
|
log.Printf("WARNING: Found alert, but no alert mechanism: %v", alertNotice)
|
|
}
|
|
for _, alertName := range alerts {
|
|
if alert, ok := config.Alerts[alertName]; ok {
|
|
alert.Send(*alertNotice)
|
|
} else {
|
|
log.Printf("WARNING: Could not find alert for %s", alertName)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
sleepTime := time.Duration(config.CheckInterval) * time.Second
|
|
time.Sleep(sleepTime)
|
|
}
|
|
}
|