Skip to content

Commit 36d9717

Browse files
authored
Merge pull request #1274 from ripienaar/server_check_domains
Enable domains and api prefixes in server check
2 parents 3071ae5 + 68ede19 commit 36d9717

File tree

5 files changed

+62
-40
lines changed

5 files changed

+62
-40
lines changed

cli/server_check_command.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ func (c *SrvCheckCmd) checkConsumer(_ *fisk.ParseContext) error {
326326
if opts().Trace {
327327
logger = api.NewDefaultLogger(api.TraceLevel)
328328
}
329-
err := monitor.ConsumerHealthCheck(opts().Config.ServerURL(), natsOpts(), check, *checkOpts, logger)
329+
err := monitor.ConsumerHealthCheck(opts().Config.ServerURL(), natsOpts(), jsmOpts(), check, *checkOpts, logger)
330330
if err != nil {
331331
return fmt.Errorf("health check failed: %v", err)
332332
}
@@ -372,7 +372,7 @@ func (c *SrvCheckCmd) checkJS(_ *fisk.ParseContext) error {
372372
check := &monitor.Result{Name: "JetStream", Check: "jetstream", OutFile: checkRenderOutFile, NameSpace: opts().PrometheusNamespace, RenderFormat: checkRenderFormat, Trace: opts().Trace}
373373
defer check.GenericExit()
374374

375-
return monitor.CheckJetStreamAccount(opts().Config.ServerURL(), natsOpts(), check, monitor.CheckJetStreamAccountOptions{
375+
return monitor.CheckJetStreamAccount(opts().Config.ServerURL(), natsOpts(), jsmOpts(), check, monitor.CheckJetStreamAccountOptions{
376376
MemoryWarning: c.jsMemWarn,
377377
MemoryCritical: c.jsMemCritical,
378378
FileWarning: c.jsStoreWarn,
@@ -444,7 +444,7 @@ func (c *SrvCheckCmd) checkStream(_ *fisk.ParseContext) error {
444444
if opts().Trace {
445445
logger = api.NewDefaultLogger(api.TraceLevel)
446446
}
447-
err := monitor.CheckStreamHealth(opts().Config.ServerURL(), natsOpts(), check, *checkOpts, logger)
447+
err := monitor.CheckStreamHealth(opts().Config.ServerURL(), natsOpts(), jsmOpts(), check, *checkOpts, logger)
448448
check.CriticalIfErr(err, "Healthcheck failed: %s", err)
449449

450450
return nil
@@ -454,7 +454,7 @@ func (c *SrvCheckCmd) checkMsg(_ *fisk.ParseContext) error {
454454
check := &monitor.Result{Name: "Stream Message", Check: "message", OutFile: checkRenderOutFile, NameSpace: opts().PrometheusNamespace, RenderFormat: checkRenderFormat, Trace: opts().Trace}
455455
defer check.GenericExit()
456456

457-
return monitor.CheckStreamMessage(opts().Config.ServerURL(), natsOpts(), check, monitor.CheckStreamMessageOptions{
457+
return monitor.CheckStreamMessage(opts().Config.ServerURL(), natsOpts(), jsmOpts(), check, monitor.CheckStreamMessageOptions{
458458
StreamName: c.sourcesStream,
459459
Subject: c.msgSubject,
460460
AgeWarning: c.msgAgeWarn.Seconds(),

cli/util.go

+30-18
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"encoding/json"
2020
"errors"
2121
"fmt"
22-
"github.com/jedib0t/go-pretty/v6/progress"
2322
"io"
2423
"math"
2524
"os"
@@ -31,6 +30,8 @@ import (
3130
"text/template"
3231
"time"
3332

33+
"github.com/jedib0t/go-pretty/v6/progress"
34+
3435
"github.com/AlecAivazis/survey/v2"
3536
"github.com/choria-io/fisk"
3637
"github.com/google/shlex"
@@ -378,6 +379,33 @@ func validator() *SchemaValidator {
378379
return nil
379380
}
380381

382+
func jsmOpts() []jsm.Option {
383+
opts := opts()
384+
385+
if opts.Config == nil {
386+
return []jsm.Option{}
387+
}
388+
389+
jsopts, err := opts.Config.JSMOptions()
390+
if err != nil {
391+
return nil
392+
}
393+
394+
if os.Getenv("NOVALIDATE") == "" {
395+
jsopts = append(jsopts, jsm.WithAPIValidation(validator()))
396+
}
397+
398+
if opts.Timeout != 0 {
399+
jsopts = append(jsopts, jsm.WithTimeout(opts.Timeout))
400+
}
401+
402+
if opts.Trace {
403+
jsopts = append(jsopts, jsm.WithTrace())
404+
}
405+
406+
return jsopts
407+
}
408+
381409
func prepareHelperUnlocked(servers string, copts ...nats.Option) (*nats.Conn, *jsm.Manager, error) {
382410
var err error
383411

@@ -401,23 +429,7 @@ func prepareHelperUnlocked(servers string, copts ...nats.Option) (*nats.Conn, *j
401429
return opts.Conn, opts.Mgr, nil
402430
}
403431

404-
jsopts := []jsm.Option{
405-
jsm.WithAPIPrefix(opts.Config.JSAPIPrefix()),
406-
jsm.WithEventPrefix(opts.Config.JSEventPrefix()),
407-
jsm.WithDomain(opts.Config.JSDomain()),
408-
}
409-
410-
if os.Getenv("NOVALIDATE") == "" {
411-
jsopts = append(jsopts, jsm.WithAPIValidation(validator()))
412-
}
413-
414-
if opts.Timeout != 0 {
415-
jsopts = append(jsopts, jsm.WithTimeout(opts.Timeout))
416-
}
417-
418-
if opts.Trace {
419-
jsopts = append(jsopts, jsm.WithTrace())
420-
}
432+
jsopts := jsmOpts()
421433

422434
opts.Mgr, err = jsm.New(opts.Conn, jsopts...)
423435
if err != nil {

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ require (
1818
github.com/jedib0t/go-pretty/v6 v6.6.6
1919
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
2020
github.com/klauspost/compress v1.17.11
21-
github.com/nats-io/jsm.go v0.1.1-0.20250207154114-3173c77580a6
21+
github.com/nats-io/jsm.go v0.1.1-0.20250213110753-19c36a3b25c7
2222
github.com/nats-io/jwt/v2 v2.7.3
2323
github.com/nats-io/nats-server/v2 v2.11.0-dev.0.20250212011304-b848ef11daa4
2424
github.com/nats-io/nats.go v1.39.0

go.sum

+4
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
107107
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
108108
github.com/nats-io/jsm.go v0.1.1-0.20250207154114-3173c77580a6 h1:ffBn2DalSseF2YmuEs+Ko6pnx+b+f338qenGwBNlBzo=
109109
github.com/nats-io/jsm.go v0.1.1-0.20250207154114-3173c77580a6/go.mod h1:8dMjkX/FvrOkAcQH4nGyv49V+v6yLEge9uf1Kql5HQs=
110+
github.com/nats-io/jsm.go v0.1.1-0.20250213083755-12d02538f5c4 h1:XB6wphdG+Ey4jzV5pk75PcQKE6Q08nyN4dLGywGucqo=
111+
github.com/nats-io/jsm.go v0.1.1-0.20250213083755-12d02538f5c4/go.mod h1:8dMjkX/FvrOkAcQH4nGyv49V+v6yLEge9uf1Kql5HQs=
112+
github.com/nats-io/jsm.go v0.1.1-0.20250213110753-19c36a3b25c7 h1:b/C5HLAv6mjK4jmP3G/oUqU43LC+4/ociB+ohdx3dhk=
113+
github.com/nats-io/jsm.go v0.1.1-0.20250213110753-19c36a3b25c7/go.mod h1:8dMjkX/FvrOkAcQH4nGyv49V+v6yLEge9uf1Kql5HQs=
110114
github.com/nats-io/jwt/v2 v2.7.3 h1:6bNPK+FXgBeAqdj4cYQ0F8ViHRbi7woQLq4W29nUAzE=
111115
github.com/nats-io/jwt/v2 v2.7.3/go.mod h1:GvkcbHhKquj3pkioy5put1wvPxs78UlZ7D/pY+BgZk4=
112116
github.com/nats-io/nats-server/v2 v2.11.0-dev.0.20250212011304-b848ef11daa4 h1:CfOv4PMRmMnROf3Lb+TiOZ1mODupeR3EOYkCrh2guSI=

internal/exporter/exporter.go

+23-17
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"time"
2121

2222
"github.com/ghodss/yaml"
23+
"github.com/nats-io/jsm.go"
2324
"github.com/nats-io/jsm.go/api"
2425
"github.com/nats-io/jsm.go/monitor"
2526
"github.com/nats-io/jsm.go/natscontext"
@@ -77,7 +78,7 @@ func (e *Exporter) Describe(ch chan<- *prometheus.Desc) {
7778

7879
// Collect implements prometheus.Collector
7980
func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
80-
callCheck := func(check *Check, f func(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result)) {
81+
callCheck := func(check *Check, f func(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result)) {
8182
result := &monitor.Result{Name: check.Name, Check: check.Kind, NameSpace: e.ns, RenderFormat: monitor.NagiosFormat}
8283
defer result.Collect(ch)
8384

@@ -91,12 +92,17 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
9192
return
9293
}
9394

94-
f(nctx.ServerURL(), opts, check, result)
95+
jsmopts, err := nctx.JSMOptions()
96+
if result.CriticalIfErr(err, "could not load jetstream options: %v", err) {
97+
return
98+
}
99+
100+
f(nctx.ServerURL(), opts, jsmopts, check, result)
95101
log.Print(result)
96102
}
97103

98104
for _, check := range e.config.Checks {
99-
var f func(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result)
105+
var f func(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result)
100106

101107
switch check.Kind {
102108
case "connection":
@@ -141,7 +147,7 @@ func (e *Exporter) natsContext(check *Check) (*natscontext.Context, error) {
141147
return natscontext.New(ctxName, true)
142148
}
143149

144-
func (e *Exporter) checkRequest(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
150+
func (e *Exporter) checkRequest(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
145151
copts := monitor.CheckRequestOptions{}
146152
err := yaml.Unmarshal(check.Properties, &copts)
147153
if result.CriticalIfErr(err, "invalid properties: %v", err) {
@@ -152,7 +158,7 @@ func (e *Exporter) checkRequest(servers string, natsOpts []nats.Option, check *C
152158
result.CriticalIfErr(err, "check failed: %v", err)
153159
}
154160

155-
func (e *Exporter) checkCredential(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
161+
func (e *Exporter) checkCredential(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
156162
copts := monitor.CheckCredentialOptions{}
157163
err := yaml.Unmarshal(check.Properties, &copts)
158164
if result.CriticalIfErr(err, "invalid properties: %v", err) {
@@ -163,7 +169,7 @@ func (e *Exporter) checkCredential(servers string, natsOpts []nats.Option, check
163169
result.CriticalIfErr(err, "check failed: %v", err)
164170
}
165171

166-
func (e *Exporter) checkServer(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
172+
func (e *Exporter) checkServer(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
167173
copts := monitor.CheckServerOptions{}
168174
err := yaml.Unmarshal(check.Properties, &copts)
169175
if result.CriticalIfErr(err, "invalid properties: %v", err) {
@@ -174,7 +180,7 @@ func (e *Exporter) checkServer(servers string, natsOpts []nats.Option, check *Ch
174180
result.CriticalIfErr(err, "check failed: %v", err)
175181
}
176182

177-
func (e *Exporter) checkJetStream(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
183+
func (e *Exporter) checkJetStream(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
178184
copts := monitor.CheckJetStreamAccountOptions{
179185
MemoryCritical: -1,
180186
MemoryWarning: -1,
@@ -190,11 +196,11 @@ func (e *Exporter) checkJetStream(servers string, natsOpts []nats.Option, check
190196
return
191197
}
192198

193-
err = monitor.CheckJetStreamAccount(servers, natsOpts, result, copts)
199+
err = monitor.CheckJetStreamAccount(servers, natsOpts, jsmOpts, result, copts)
194200
result.CriticalIfErr(err, "check failed: %v", err)
195201
}
196202

197-
func (e *Exporter) checkMeta(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
203+
func (e *Exporter) checkMeta(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
198204
copts := monitor.CheckJetstreamMetaOptions{}
199205
err := yaml.Unmarshal(check.Properties, &copts)
200206
if result.CriticalIfErr(err, "invalid properties: %v", err) {
@@ -205,18 +211,18 @@ func (e *Exporter) checkMeta(servers string, natsOpts []nats.Option, check *Chec
205211
result.CriticalIfErr(err, "check failed: %v", err)
206212
}
207213

208-
func (e *Exporter) checkMessage(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
214+
func (e *Exporter) checkMessage(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
209215
copts := monitor.CheckStreamMessageOptions{}
210216
err := yaml.Unmarshal(check.Properties, &copts)
211217
if result.CriticalIfErr(err, "invalid properties: %v", err) {
212218
return
213219
}
214220

215-
err = monitor.CheckStreamMessage(servers, natsOpts, result, copts)
221+
err = monitor.CheckStreamMessage(servers, natsOpts, jsmOpts, result, copts)
216222
result.CriticalIfErr(err, "check failed: %v", err)
217223
}
218224

219-
func (e *Exporter) checkKv(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
225+
func (e *Exporter) checkKv(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
220226
copts := monitor.CheckKVBucketAndKeyOptions{
221227
ValuesWarning: -1,
222228
ValuesCritical: -1,
@@ -230,29 +236,29 @@ func (e *Exporter) checkKv(servers string, natsOpts []nats.Option, check *Check,
230236
result.CriticalIfErr(err, "check failed: %v", err)
231237
}
232238

233-
func (e *Exporter) checkConsumer(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
239+
func (e *Exporter) checkConsumer(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
234240
copts := monitor.ConsumerHealthCheckOptions{}
235241
err := yaml.Unmarshal(check.Properties, &copts)
236242
if result.CriticalIfErr(err, "invalid properties: %v", err) {
237243
return
238244
}
239245

240-
err = monitor.ConsumerHealthCheck(servers, natsOpts, result, copts, api.NewDiscardLogger())
246+
err = monitor.ConsumerHealthCheck(servers, natsOpts, jsmOpts, result, copts, api.NewDiscardLogger())
241247
result.CriticalIfErr(err, "check failed: %v", err)
242248
}
243249

244-
func (e *Exporter) checkStream(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
250+
func (e *Exporter) checkStream(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
245251
copts := monitor.CheckStreamHealthOptions{}
246252
err := yaml.Unmarshal(check.Properties, &copts)
247253
if result.CriticalIfErr(err, "invalid properties: %v", err) {
248254
return
249255
}
250256

251-
err = monitor.CheckStreamHealth(servers, natsOpts, result, copts, api.NewDiscardLogger())
257+
err = monitor.CheckStreamHealth(servers, natsOpts, jsmOpts, result, copts, api.NewDiscardLogger())
252258
result.CriticalIfErr(err, "check failed: %v", err)
253259
}
254260

255-
func (e *Exporter) checkConnection(servers string, natsOpts []nats.Option, check *Check, result *monitor.Result) {
261+
func (e *Exporter) checkConnection(servers string, natsOpts []nats.Option, jsmOpts []jsm.Option, check *Check, result *monitor.Result) {
256262
copts := monitor.CheckConnectionOptions{}
257263
err := yaml.Unmarshal(check.Properties, &copts)
258264
if result.CriticalIfErr(err, "invalid properties: %v", err) {

0 commit comments

Comments
 (0)