Use golf for command line parsing
* Split command line flags data from the main program data structure * Use golf to support GNU-style flags * Added -h/--help flag
This commit is contained in:
parent
2c5d27684a
commit
916dc35de6
3 changed files with 35 additions and 19 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
bin
|
bin
|
||||||
|
go.sum
|
|
@ -3,42 +3,55 @@ package main
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"nocternity.net/monitoring/perfdata"
|
"nocternity.net/monitoring/perfdata"
|
||||||
"nocternity.net/monitoring/plugin"
|
"nocternity.net/monitoring/plugin"
|
||||||
|
|
||||||
|
"github.com/karrick/golf"
|
||||||
)
|
)
|
||||||
|
|
||||||
type checkProgram struct {
|
type programFlags struct {
|
||||||
hostname string
|
hostname string
|
||||||
port int
|
port int
|
||||||
warn int
|
warn int
|
||||||
crit int
|
crit int
|
||||||
ignoreCnOnly bool
|
ignoreCnOnly bool
|
||||||
|
|
||||||
certificate *x509.Certificate
|
|
||||||
plugin *plugin.Plugin
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newProgram() (flags *checkProgram) {
|
type checkProgram struct {
|
||||||
flags = &checkProgram{
|
programFlags
|
||||||
|
plugin *plugin.Plugin
|
||||||
|
certificate *x509.Certificate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (flags *programFlags) parseArguments() {
|
||||||
|
var help bool
|
||||||
|
golf.BoolVarP(&help, 'h', "help", false, "Display usage information")
|
||||||
|
golf.StringVarP(&flags.hostname, 'H', "hostname", "", "Host name to connect to.")
|
||||||
|
golf.IntVarP(&flags.port, 'P', "port", -1, "Port to connect to.")
|
||||||
|
golf.IntVarP(&flags.warn, 'W', "warning", -1,
|
||||||
|
"Validity threshold below which a warning state is issued, in days.")
|
||||||
|
golf.IntVarP(&flags.crit, 'C', "critical", -1,
|
||||||
|
"Validity threshold below which a critical state is issued, in days.")
|
||||||
|
golf.BoolVar(&flags.ignoreCnOnly, "ignore-cn-only", false,
|
||||||
|
"Do not issue warnings regarding certificates that do not use SANs at all.")
|
||||||
|
golf.Parse()
|
||||||
|
if help {
|
||||||
|
golf.Usage()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newProgram() *checkProgram {
|
||||||
|
program := &checkProgram{
|
||||||
plugin: plugin.New("Certificate check"),
|
plugin: plugin.New("Certificate check"),
|
||||||
}
|
}
|
||||||
flag.StringVar(&flags.hostname, "hostname", "", "Host name to connect to.")
|
program.parseArguments()
|
||||||
flag.StringVar(&flags.hostname, "H", "", "Host name to connect to (shorthand).")
|
return program
|
||||||
flag.IntVar(&flags.port, "port", -1, "Port to connect to.")
|
|
||||||
flag.IntVar(&flags.port, "P", -1, "Port to connect to (shorthand).")
|
|
||||||
flag.IntVar(&flags.warn, "warning", -1, "Validity threshold below which a warning state is issued, in days.")
|
|
||||||
flag.IntVar(&flags.warn, "W", -1, "Validity threshold below which a warning state is issued, in days (shorthand).")
|
|
||||||
flag.IntVar(&flags.crit, "critical", -1, "Validity threshold below which a critical state is issued, in days.")
|
|
||||||
flag.IntVar(&flags.crit, "C", -1, "Validity threshold below which a critical state is issued, in days (shorthand).")
|
|
||||||
flag.BoolVar(&flags.ignoreCnOnly, "ignore-cn-only", false,
|
|
||||||
"Do not issue warnings regarding certificates that do not use SANs at all.")
|
|
||||||
flag.Parse()
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (program *checkProgram) close() {
|
func (program *checkProgram) close() {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -1,3 +1,5 @@
|
||||||
module nocternity.net/monitoring
|
module nocternity.net/monitoring
|
||||||
|
|
||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
|
require github.com/karrick/golf v1.4.0
|
||||||
|
|
Loading…
Reference in a new issue