Skip to content

Commit f6965b1

Browse files
authored
mssql: fix nil panic, if YAML file is used a configuration (#1570)
1 parent d7f052f commit f6965b1

File tree

4 files changed

+46
-21
lines changed

4 files changed

+46
-21
lines changed

pkg/collector/dfsr/dfsr.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,17 @@ func NewWithFlags(app *kingpin.Application) *Collector {
120120
c := &Collector{
121121
config: ConfigDefaults,
122122
}
123-
c.config.CollectorsEnabled = make([]string, 0)
123+
124+
var collectorsEnabled string
124125

125126
app.Flag("collectors.dfsr.sources-enabled", "Comma-separated list of DFSR Perflib sources to use.").
126-
Default(strings.Join(ConfigDefaults.CollectorsEnabled, ",")).StringsVar(&c.config.CollectorsEnabled)
127+
Default(strings.Join(ConfigDefaults.CollectorsEnabled, ",")).StringVar(&collectorsEnabled)
128+
129+
app.Action(func(*kingpin.ParseContext) error {
130+
c.config.CollectorsEnabled = strings.Split(collectorsEnabled, ",")
131+
132+
return nil
133+
})
127134

128135
return c
129136
}

pkg/collector/exchange/exchange.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ func NewWithFlags(app *kingpin.Application) *Collector {
111111
c.config.CollectorsEnabled = make([]string, 0)
112112

113113
var listAllCollectors bool
114+
var collectorsEnabled string
114115

115116
app.Flag(
116117
"collectors.exchange.list",
@@ -120,7 +121,7 @@ func NewWithFlags(app *kingpin.Application) *Collector {
120121
app.Flag(
121122
"collectors.exchange.enabled",
122123
"Comma-separated list of collectors to use. Defaults to all, if not specified.",
123-
).Default(strings.Join(ConfigDefaults.CollectorsEnabled, ",")).StringsVar(&c.config.CollectorsEnabled)
124+
).Default(strings.Join(ConfigDefaults.CollectorsEnabled, ",")).StringVar(&collectorsEnabled)
124125

125126
app.PreAction(func(*kingpin.ParseContext) error {
126127
if listAllCollectors {
@@ -152,6 +153,12 @@ func NewWithFlags(app *kingpin.Application) *Collector {
152153
return nil
153154
})
154155

156+
app.Action(func(*kingpin.ParseContext) error {
157+
c.config.CollectorsEnabled = strings.Split(collectorsEnabled, ",")
158+
159+
return nil
160+
})
161+
155162
return c
156163
}
157164

pkg/collector/mssql/mssql.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"errors"
77
"fmt"
88
"os"
9-
"slices"
109
"sort"
1110
"strings"
1211
"sync"
@@ -437,9 +436,9 @@ func NewWithFlags(app *kingpin.Application) *Collector {
437436
c := &Collector{
438437
config: ConfigDefaults,
439438
}
440-
c.config.CollectorsEnabled = make([]string, 0)
441439

442440
var listAllCollectors bool
441+
var collectorsEnabled string
443442

444443
app.Flag(
445444
"collectors.mssql.class-print",
@@ -449,7 +448,7 @@ func NewWithFlags(app *kingpin.Application) *Collector {
449448
app.Flag(
450449
"collectors.mssql.classes-enabled",
451450
"Comma-separated list of mssql WMI classes to use.",
452-
).Default(strings.Join(ConfigDefaults.CollectorsEnabled, ",")).StringsVar(&c.config.CollectorsEnabled)
451+
).Default(strings.Join(c.config.CollectorsEnabled, ",")).StringVar(&collectorsEnabled)
453452

454453
app.PreAction(func(*kingpin.ParseContext) error {
455454
if listAllCollectors {
@@ -468,6 +467,12 @@ func NewWithFlags(app *kingpin.Application) *Collector {
468467
return nil
469468
})
470469

470+
app.Action(func(*kingpin.ParseContext) error {
471+
c.config.CollectorsEnabled = strings.Split(collectorsEnabled, ",")
472+
473+
return nil
474+
})
475+
471476
return c
472477
}
473478

@@ -480,16 +485,11 @@ func (c *Collector) SetLogger(logger log.Logger) {
480485
}
481486

482487
func (c *Collector) GetPerfCounter() ([]string, error) {
483-
enabled := slices.Compact(c.config.CollectorsEnabled)
484-
485-
// Result must order, to prevent test failures.
486-
sort.Strings(enabled)
487-
488488
c.mssqlInstances = getMSSQLInstances(c.logger)
489-
perfCounters := make([]string, 0, len(c.mssqlInstances)*len(enabled))
489+
perfCounters := make([]string, 0, len(c.mssqlInstances)*len(c.config.CollectorsEnabled))
490490

491491
for instance := range c.mssqlInstances {
492-
for _, c := range enabled {
492+
for _, c := range c.config.CollectorsEnabled {
493493
perfCounters = append(perfCounters, mssqlGetPerfObjectName(instance, c))
494494
}
495495
}
@@ -502,6 +502,9 @@ func (c *Collector) Close() error {
502502
}
503503

504504
func (c *Collector) Build() error {
505+
// Result must order, to prevent test failures.
506+
sort.Strings(c.config.CollectorsEnabled)
507+
505508
// meta
506509
c.mssqlScrapeDurationDesc = prometheus.NewDesc(
507510
prometheus.BuildFQName(types.Namespace, Name, "collector_duration_seconds"),
@@ -1965,6 +1968,12 @@ func (c *Collector) Build() error {
19651968

19661969
c.mssqlCollectors = c.getMSSQLCollectors()
19671970

1971+
for _, name := range c.config.CollectorsEnabled {
1972+
if _, ok := c.mssqlCollectors[name]; !ok {
1973+
return errors.New("unknown mssql collector: " + name)
1974+
}
1975+
}
1976+
19681977
return nil
19691978
}
19701979

@@ -2007,13 +2016,8 @@ func (c *Collector) execute(ctx *types.ScrapeContext, name string, fn mssqlColle
20072016
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
20082017
wg := sync.WaitGroup{}
20092018

2010-
enabled := slices.Compact(c.config.CollectorsEnabled)
2011-
2012-
// Result must order, to prevent test failures.
2013-
sort.Strings(enabled)
2014-
20152019
for sqlInstance := range c.mssqlInstances {
2016-
for _, name := range enabled {
2020+
for _, name := range c.config.CollectorsEnabled {
20172021
function := c.mssqlCollectors[name]
20182022

20192023
wg.Add(1)

pkg/collector/textfile/textfile.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,19 @@ func NewWithFlags(app *kingpin.Application) *Collector {
7878
c := &Collector{
7979
config: ConfigDefaults,
8080
}
81-
c.config.TextFileDirectories = make([]string, 0)
81+
82+
var textFileDirectories string
8283

8384
app.Flag(
8485
"collector.textfile.directories",
8586
"Directory or Directories to read text files with metrics from.",
86-
).Default(strings.Join(ConfigDefaults.TextFileDirectories, ",")).StringsVar(&c.config.TextFileDirectories)
87+
).Default(strings.Join(ConfigDefaults.TextFileDirectories, ",")).StringVar(&textFileDirectories)
88+
89+
app.Action(func(*kingpin.ParseContext) error {
90+
c.config.TextFileDirectories = strings.Split(textFileDirectories, ",")
91+
92+
return nil
93+
})
8794

8895
return c
8996
}

0 commit comments

Comments
 (0)