diff options
| author | Mitch Riedstra <mitch@riedstra.us> | 2021-01-24 10:31:53 -0500 |
|---|---|---|
| committer | Mitch Riedstra <mitch@riedstra.us> | 2021-01-24 10:31:53 -0500 |
| commit | a4554be33914fd7cd77eea3326a747078bbe4c50 (patch) | |
| tree | 5e97506f384344662f9d3e55a6f83f88c76d6217 /cmd/main/main.go | |
| download | checkup-a4554be33914fd7cd77eea3326a747078bbe4c50.tar.gz checkup-a4554be33914fd7cd77eea3326a747078bbe4c50.tar.xz | |
initial
Diffstat (limited to 'cmd/main/main.go')
| -rw-r--r-- | cmd/main/main.go | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/cmd/main/main.go b/cmd/main/main.go new file mode 100644 index 0000000..aa37a7f --- /dev/null +++ b/cmd/main/main.go @@ -0,0 +1,113 @@ +package main + +import ( + "bytes" + "flag" + "fmt" + "gopkg.in/yaml.v3" + "os" + "time" + + "riedstra.dev/go/checkup" +) + +type Config struct { + RocketChatURL string `yaml:"RocketChatURL"` + DiscordURL string `yaml:"DiscordURL"` + DefaultCertPort string `yaml:"DefaultCertPort"` + CertWindow int `yaml:"CertWindow"` + CheckCerts map[string]*string `yaml:"CheckCerts"` + ExpectedStatusCode int `yaml:"ExpectedStatusCode"` + StatusChecks map[string]*int `yaml:"StatusChecks"` +} + +func ReadConfig(fn string) (*Config, error) { + fh, err := os.Open(fn) + if err != nil { + return nil, err + } + + dec := yaml.NewDecoder(fh) + conf := &Config{} + err = dec.Decode(conf) + return conf, err +} + +func notify(conf *Config, b []byte) { + if len(b) >= 1 { + + if conf.RocketChatURL != "" { + err := checkup.SendRocketChatAlert(conf.RocketChatURL, string(b)) + if err != nil { + fmt.Fprintln(os.Stderr, string(b)) + fmt.Fprintf(os.Stderr, + "When sending webhook for rocketchat: %s\n", err) + } + + } + if conf.DiscordURL != "" { + err := checkup.SendDiscordAlert(conf.DiscordURL, string(b)) + if err != nil { + fmt.Fprintln(os.Stderr, string(b)) + fmt.Fprintf(os.Stderr, + "When sending webhook for discord: %s\n", err) + } + } + } +} + +func checkCerts(conf *Config) { + msg := &bytes.Buffer{} + for host, port := range conf.CheckCerts { + if port == nil { + port = &conf.DefaultCertPort + } + + conn, err := checkup.CertExpiresSoon( + host, + *port, + time.Duration(conf.CertWindow)*time.Hour*24) + if err != nil { + fmt.Fprintf(msg, "%s:%s --> %s\n", host, *port, err) + continue + } + conn.Close() + } + + notify(conf, msg.Bytes()) +} + +func checkStatus(conf *Config) { + msg := &bytes.Buffer{} + + for url, code := range conf.StatusChecks { + if code == nil { + code = &conf.ExpectedStatusCode + } + err := checkup.HttpStatusOK(url, *code) + if err != nil { + fmt.Fprintf(msg, "Checking: %s, %v\n", + url, err) + } + } + + notify(conf, msg.Bytes()) +} + +func main() { + fl := flag.NewFlagSet("checkup", flag.ExitOnError) + + confFn := fl.String("c", "config.yml", "Configuration file path") + + _ = fl.Parse(os.Args[1:]) + + conf, err := ReadConfig(*confFn) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + checkCerts(conf) + checkStatus(conf) + +} |
