refactor: make internals easier to test and add unit tests #2
5 changed files with 30 additions and 19 deletions
|
@ -215,9 +215,9 @@ func NewProgram() program.Program {
|
|||
return program
|
||||
}
|
||||
|
||||
// Terminate the monitoring check program.
|
||||
func (program *checkProgram) Done() {
|
||||
program.plugin.Done()
|
||||
// Return the program's output value.
|
||||
func (program *checkProgram) Output() *plugin.Plugin {
|
||||
return program.plugin
|
||||
}
|
||||
|
||||
// Check the values that were specified from the command line. Returns true
|
||||
|
|
|
@ -85,13 +85,9 @@ func NewProgram() program.Program {
|
|||
return program
|
||||
}
|
||||
|
||||
// Terminate the monitoring check program.
|
||||
func (program *checkProgram) Done() {
|
||||
if r := recover(); r != nil {
|
||||
program.plugin.SetState(plugin.StatusUnknown, "Internal error")
|
||||
program.plugin.AddLinef("Error info: %v", r)
|
||||
}
|
||||
program.plugin.Done()
|
||||
// Return the program's output value.
|
||||
func (program *checkProgram) Output() *plugin.Plugin {
|
||||
return program.plugin
|
||||
}
|
||||
|
||||
// Check the values that were specified from the command line. Returns true if the arguments made sense.
|
||||
|
|
13
main.go
13
main.go
|
@ -7,6 +7,7 @@ import (
|
|||
|
||||
"nocternity.net/gomonop/cmd/sslcert"
|
||||
"nocternity.net/gomonop/cmd/zoneserial"
|
||||
"nocternity.net/gomonop/pkg/plugin"
|
||||
"nocternity.net/gomonop/pkg/program"
|
||||
"nocternity.net/gomonop/pkg/version"
|
||||
)
|
||||
|
@ -55,7 +56,17 @@ func getProgram() program.Program {
|
|||
|
||||
func main() {
|
||||
program := getProgram()
|
||||
defer program.Done()
|
||||
|
||||
output := program.Output()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
output.SetState(plugin.StatusUnknown, "Internal error")
|
||||
output.AddLinef("Error info: %v", r)
|
||||
}
|
||||
fmt.Println(output.String())
|
||||
os.Exit(output.ExitCode())
|
||||
}()
|
||||
|
||||
if program.CheckArguments() {
|
||||
program.RunCheck()
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ package plugin // import nocternity.net/gomonop/pkg/perfdata
|
|||
import (
|
||||
"container/list"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"nocternity.net/gomonop/pkg/perfdata"
|
||||
|
@ -70,10 +69,9 @@ func (p *Plugin) AddPerfData(pd *perfdata.PerfData) {
|
|||
p.perfData[pd.Label] = pd
|
||||
}
|
||||
|
||||
// Done generates the plugin's text output from its name, status, text data
|
||||
// and performance data, before exiting with the code corresponding to the
|
||||
// status.
|
||||
func (p *Plugin) Done() {
|
||||
// String generates the plugin's text output from its name, status, text data
|
||||
// and performance data.
|
||||
func (p *Plugin) String() string {
|
||||
var strBuilder strings.Builder
|
||||
strBuilder.WriteString(p.name)
|
||||
strBuilder.WriteString(" ")
|
||||
|
@ -99,6 +97,10 @@ func (p *Plugin) Done() {
|
|||
strBuilder.WriteString(em.Value.(string))
|
||||
}
|
||||
}
|
||||
fmt.Println(strBuilder.String())
|
||||
os.Exit(int(p.status))
|
||||
return strBuilder.String()
|
||||
}
|
||||
|
||||
// ExitCode returns the plugin's exit code.
|
||||
func (p *Plugin) ExitCode() int {
|
||||
return int(p.status)
|
||||
}
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package program // import nocternity.net/gomonop/pkg/program
|
||||
|
||||
import "nocternity.net/gomonop/pkg/plugin"
|
||||
|
||||
type Program interface {
|
||||
Output() *plugin.Plugin
|
||||
CheckArguments() bool
|
||||
RunCheck()
|
||||
Done()
|
||||
}
|
||||
|
||||
type Builder func() Program
|
||||
|
|
Loading…
Reference in a new issue