Add command to query monitors status
This commit is contained in:
parent
cd927c6665
commit
3dfc38b0f5
|
@ -3,9 +3,12 @@ package uptimerobot
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
"strings"
|
||||||
|
|
||||||
ur "git.uwaterloo.ca/csc/cscsysbot/utils/uptimerobot"
|
ur "git.uwaterloo.ca/csc/cscsysbot/utils/uptimerobot"
|
||||||
"git.uwaterloo.ca/csc/cscsysbot/plugins/background"
|
"git.uwaterloo.ca/csc/cscsysbot/plugins/background"
|
||||||
|
|
||||||
|
"github.com/go-chat-bot/bot"
|
||||||
)
|
)
|
||||||
|
|
||||||
func uptimeRobot() {
|
func uptimeRobot() {
|
||||||
|
@ -28,7 +31,7 @@ func uptimeRobot() {
|
||||||
|
|
||||||
if lastStatus != mon.Status {
|
if lastStatus != mon.Status {
|
||||||
if (mon.Type == ur.MonitorTypePort) {
|
if (mon.Type == ur.MonitorTypePort) {
|
||||||
background.Messages <- fmt.Sprintf("Uptime Robot: %s -> %s, %s:%d (%s)\n", lastStatus, mon.Status, mon.URL, mon.Type, int(mon.Port.(float64)))
|
background.Messages <- fmt.Sprintf("Uptime Robot: %s -> %s, %s:%d (%s)\n", lastStatus, mon.Status, mon.URL, int(mon.Port.(float64)), mon.Type)
|
||||||
} else {
|
} else {
|
||||||
background.Messages <- fmt.Sprintf("Uptime Robot: %s -> %s, %s (%s)\n", lastStatus, mon.Status, mon.URL, mon.Type)
|
background.Messages <- fmt.Sprintf("Uptime Robot: %s -> %s, %s (%s)\n", lastStatus, mon.Status, mon.URL, mon.Type)
|
||||||
}
|
}
|
||||||
|
@ -40,6 +43,81 @@ func uptimeRobot() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func inList(l []ur.MonitorStatus, s ur.MonitorStatus) bool {
|
||||||
|
for _, i := range l {
|
||||||
|
if i == s {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func monitorQuery(command *bot.Cmd) (string, error) {
|
||||||
|
var lines []string
|
||||||
|
var statuses []ur.MonitorStatus
|
||||||
|
|
||||||
|
for _, arg := range command.Args {
|
||||||
|
switch strings.ToLower(arg) {
|
||||||
|
case "up":
|
||||||
|
statuses = append(statuses, ur.MonitorStatusUp)
|
||||||
|
case "down":
|
||||||
|
statuses = append(statuses, ur.MonitorStatusDown)
|
||||||
|
case "paused":
|
||||||
|
statuses = append(statuses, ur.MonitorStatusPaused)
|
||||||
|
case "seemsdown":
|
||||||
|
fallthrough
|
||||||
|
case "seems_down":
|
||||||
|
statuses = append(statuses, ur.MonitorStatusSeemsDown)
|
||||||
|
case "notchecked":
|
||||||
|
fallthrough
|
||||||
|
case "not_checked":
|
||||||
|
statuses = append(statuses, ur.MonitorStatusNotCheckedYet)
|
||||||
|
default:
|
||||||
|
lines = append(lines, fmt.Sprintf("Unknown monitor status: %q", strings.ToLower(arg)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(statuses) == 0 {
|
||||||
|
lines = append(lines, fmt.Sprintf("Please provided at least on status to filter with."))
|
||||||
|
return strings.Join(lines, "\n"), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
monitors, err := ur.GetMonitors()
|
||||||
|
if err != nil {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
match := 0
|
||||||
|
for _, mon := range monitors.Monitors {
|
||||||
|
if !inList(statuses, mon.Status) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
match++
|
||||||
|
var status string
|
||||||
|
|
||||||
|
if (mon.Type == ur.MonitorTypePort) {
|
||||||
|
status = fmt.Sprintf("Uptime Robot: %s, %s:%d (%s)\n", mon.Status, mon.URL, int(mon.Port.(float64)), mon.Type)
|
||||||
|
} else {
|
||||||
|
status = fmt.Sprintf("Uptime Robot: %s, %s (%s)\n", mon.Status, mon.URL, mon.Type)
|
||||||
|
}
|
||||||
|
lines = append(lines, status)
|
||||||
|
}
|
||||||
|
|
||||||
|
if match == 0 {
|
||||||
|
lines = append(lines, "No monitors matched the requested statuses")
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(lines, "\n"), nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
go uptimeRobot()
|
go uptimeRobot()
|
||||||
|
|
||||||
|
bot.RegisterCommand(
|
||||||
|
"monitors",
|
||||||
|
"Query Uptime Robot Monitors status",
|
||||||
|
"Retricts monitors to those matching the list of provided statuses (ex: !monitors paused down to show up and down monitors)",
|
||||||
|
monitorQuery)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue