Skip to content

Instantly share code, notes, and snippets.

@blockpane
Last active September 16, 2021 18:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blockpane/764ceaaaca0fe351bfb4f45a398fb126 to your computer and use it in GitHub Desktop.
Save blockpane/764ceaaaca0fe351bfb4f45a398fb126 to your computer and use it in GitHub Desktop.
simple pagerduty client for m/monit
package main
import (
"flag"
"github.com/PagerDuty/go-pagerduty"
"log"
"os"
"strings"
)
func main() {
var pagerDuty string
flag.StringVar(&pagerDuty, "p", "", "Required: pagerduty api key")
flag.Parse()
if pagerDuty == "" {
flag.PrintDefaults()
log.Fatal("No pagerduty key provided!")
}
service := os.Getenv("MONIT_SERVICE")
event := os.Getenv("MONIT_EVENT")
host := os.Getenv("MONIT_HOST")
if service == "" || event == "" {
log.Fatal("either MONIT_SERVICE or MONIT_EVENT was empty")
}
var resolved bool
switch true {
case strings.Contains(event, "succe"), strings.Contains(event, "is running"):
resolved = true
}
err := notifyPagerduty(resolved, event, host + ": " + service, pagerDuty)
if err != nil {
log.Fatal(err)
}
}
func notifyPagerduty(resolved bool, message, service, key string) (err error) {
if key == "" {
return nil
}
action := "trigger"
sev := "error"
if resolved {
action = "resolve"
sev = "info"
}
_, err = pagerduty.ManageEvent(pagerduty.V2Event{
RoutingKey: key,
Action: action,
DedupKey: service,
Payload: &pagerduty.V2Payload{
Summary: service + ": " + message,
Source: "m/monit",
Severity: sev,
},
})
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment