package main import ( "flag" "fmt" "gopkg.in/yaml.v3" "os" "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"` Workers int `yaml:"Workers"` } 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 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) } if conf.Workers == 0 { conf.Workers = 1 } checkCerts(conf) checkStatus(conf) }