feat: add check_systemd_service

This commit is contained in:
Adrien Waksberg 2019-11-03 11:46:50 +01:00
parent 2a5d1eedc7
commit 697e5b4dce

View file

@ -0,0 +1,81 @@
package main
import (
"fmt"
"flag"
"os"
"os/exec"
"strings"
"time"
)
// Option to parse
var (
HELP = flag.Bool("help", false, "print the help message")
SERVICE = flag.String("service", "", "service name")
LIFETIME = flag.Int("lifetime", 60, "minimum life time in second")
)
func init() {
flag.Parse()
if *HELP {
flag.PrintDefaults()
os.Exit(3)
}
if *SERVICE == "" {
Critical("Please set service name")
}
}
// Critical print a message and exit with code 2
func Critical(msg string) {
fmt.Println(fmt.Sprintf("CRITICAL - %s", msg))
os.Exit(2)
}
// Warning print a message and exit with code 1
func Warning(msg string) {
fmt.Println(fmt.Sprintf("WARNING - %s", msg))
os.Exit(1)
}
// Ok print a message and exit with code 0
func Ok(msg string) {
fmt.Println(fmt.Sprintf("OK - %s", msg))
os.Exit(0)
}
// ServiceStatus check if the service is started
func ServiceStatus() error {
cmd := exec.Command("systemctl", "is-active", *SERVICE)
if err := cmd.Run(); err != nil {
return fmt.Errorf("the service is inactive")
}
output, err := exec.Command("systemctl", "show", *SERVICE, "-p", "ExecMainStartTimestamp", "--value").Output()
if err != nil {
return err
}
startDate, err := time.Parse("Mon 2006-01-02 15:04:05 MST", strings.Trim(string(output), "\n"))
if err != nil {
return err
}
if startDate.Unix() > time.Now().Add(- time.Duration(*LIFETIME) * time.Second).Unix() {
return fmt.Errorf("the service has started for less than %d seconds", *LIFETIME)
}
return nil
}
func main() {
err := ServiceStatus()
if err != nil {
Critical(fmt.Sprintf("%v", err))
}
Ok("the service is active")
}