55 "crypto/tls"
66 "encoding/base64"
77 "encoding/json"
8- "flag"
98 "fmt"
109 "net"
1110 "net/http"
@@ -15,13 +14,15 @@ import (
1514 "strconv"
1615 "strings"
1716 "time"
17+
18+ "github.com/namsral/flag"
1819)
1920
2021// TODO
2122// - strip trailing / from url
2223// - what about value being int64 in legacy api in PerfLine struct?
2324
24- const AppVersion = "0.5.2 "
25+ const AppVersion = "0.5.3 "
2526
2627var usage = `
2728 check_nsc_web is a REST client for the NSClient++ webserver for querying
@@ -140,6 +141,7 @@ func main() {
140141 var flagInsecure bool
141142 var flagFloatround int
142143 var flagExtratext string
144+ var flagQuery string
143145
144146 flag .StringVar (& flagURL , "u" , "" , "NSCLient++ URL, for example https://10.1.2.3:8443." )
145147 flag .StringVar (& flagLogin , "l" , "admin" , "NSClient++ webserver login." )
@@ -151,9 +153,13 @@ func main() {
151153 flag .BoolVar (& flagVersion , "V" , false , "Print program version." )
152154 flag .BoolVar (& flagInsecure , "k" , false , "Insecure mode - skip TLS verification." )
153155 flag .IntVar (& flagFloatround , "f" , - 1 , "Round performance data float values to this number of digits." )
154- flag .StringVar (& flagExtratext , "x" , "" , "Extra text to appear in output." )
156+
157+ // These flags support loading config from file using "-config FILENAME"
158+ flag .StringVar (& flagQuery , "query" , "" , "placeholder for query string from config file" )
159+ flag .String (flag .DefaultConfigFlagname , "" , "path to config file" )
155160
156161 flag .Parse ()
162+
157163 if flagVersion {
158164 fmt .Fprintln (os .Stderr , "check_nsc_web v" + AppVersion )
159165 os .Exit (0 )
@@ -171,6 +177,13 @@ func main() {
171177 }
172178 }
173179
180+ args := flag .Args ()
181+ // Has there a flag "query" been provided in the config file? Transform it into slice and append it to Args()
182+ if seen ["query" ] {
183+ q := strings .Split (flagQuery , " " )
184+ args = append (args , q ... )
185+ }
186+
174187 timeout := time .Second * time .Duration (flagTimeout )
175188
176189 urlStruct , err := url .Parse (flagURL )
@@ -179,17 +192,17 @@ func main() {
179192 os .Exit (3 )
180193 }
181194
182- if len (flag . Args () ) == 0 {
195+ if len (args ) == 0 {
183196 urlStruct .Path += "/"
184197 } else {
185198 if flagAPIVersion == "1" {
186- urlStruct .Path += "/api/v1/queries/" + flag . Arg ( 0 ) + "/commands/execute"
199+ urlStruct .Path += "/api/v1/queries/" + args [ 0 ] + "/commands/execute"
187200 } else {
188- urlStruct .Path += "/query/" + flag . Arg ( 0 )
201+ urlStruct .Path += "/query/" + args [ 0 ]
189202 }
190- if len (flag . Args () ) > 1 {
203+ if len (args ) > 1 {
191204 var param bytes.Buffer
192- for i , a := range flag . Args () {
205+ for i , a := range args {
193206 if i == 0 {
194207 continue
195208 } else if i > 1 {
@@ -269,7 +282,7 @@ func main() {
269282 fmt .Printf ("RESPONSE:\n %q\n " , dumpres )
270283 }
271284
272- if len (flag . Args () ) == 0 {
285+ if len (args ) == 0 {
273286 fmt .Println ("OK: NSClient API reachable on " + flagURL )
274287 os .Exit (0 )
275288 } else {
0 commit comments