gomonop/main.go
Emmanuel BENOîT 78af496fe9
All checks were successful
Run tests and linters / test (push) Successful in 44s
Run tests and linters / build (push) Successful in 47s
Run tests and linters / lint (push) Successful in 1m20s
refactor: make internals easier to test and add unit tests (#2)
This PR refactors most of the internals to make them easier to test (and also because the names didn't make sense). It adds unit tests for all internal components.

Reviewed-on: #2
Co-authored-by: Emmanuel BENOÎT <tseeker@nocternity.net>
Co-committed-by: Emmanuel BENOÎT <tseeker@nocternity.net>
2024-07-20 10:01:05 +02:00

73 lines
1.4 KiB
Go

package main
import (
"fmt"
"os"
"path/filepath"
"nocternity.net/gomonop/cmd/sslcert"
"nocternity.net/gomonop/cmd/zoneserial"
"nocternity.net/gomonop/pkg/plugin"
"nocternity.net/gomonop/pkg/results"
"nocternity.net/gomonop/pkg/version"
)
var (
plugins map[string]plugin.Builder = map[string]plugin.Builder{
"check_ssl_certificate": sslcert.NewProgram,
"check_zone_serial": zoneserial.NewProgram,
}
)
func getPlugin() plugin.Plugin {
ownName := filepath.Base(os.Args[0])
if builder, ok := plugins[ownName]; ok {
return builder()
}
if len(os.Args) < 2 {
fmt.Printf("Syntax: %s <plugin> [arguments]\n", ownName)
fmt.Printf(" %s --plugin|-p\n", ownName)
fmt.Printf(" %s --version|-v", ownName)
}
switch os.Args[1] {
case "--plugins", "-p":
for name := range plugins {
fmt.Println(name)
}
os.Exit(0)
case "--version", "-v":
fmt.Printf("%s %s\n", ownName, version.Version())
os.Exit(0)
}
if builder, ok := plugins[os.Args[1]]; ok {
os.Args = os.Args[1:]
return builder()
}
fmt.Printf("Unknown plugin: %s\n", os.Args[1])
os.Exit(1)
return nil
}
func main() {
runPlugin := getPlugin()
output := runPlugin.Results()
defer func() {
if r := recover(); r != nil {
output.SetState(results.StatusUnknown, "Internal error")
output.AddLinef("Error info: %v", r)
}
fmt.Println(output.String())
os.Exit(output.ExitCode())
}()
if runPlugin.CheckArguments() {
runPlugin.RunCheck()
}
}