Skip to content

Commit d3e6fc0

Browse files
authored
Clean up scraper factory (#656)
The function is becoming too messy. Clean up a little by replacing the counter arguments with a generic metrics interface. Signed-off-by: Marcelo E. Magallon <[email protected]>
1 parent 3d7939f commit d3e6fc0

File tree

5 files changed

+76
-41
lines changed

5 files changed

+76
-41
lines changed

internal/checks/checks.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -867,9 +867,15 @@ func (c *Updater) addAndStartScraperWithLock(ctx context.Context, check model.Ch
867867
return err
868868
}
869869

870+
metrics := scraper.NewMetrics(
871+
scrapeCounter,
872+
scraper.NewIncrementerFromCounterVec(scrapeErrorCounter),
873+
)
874+
870875
scraper, err := c.scraperFactory(
871-
ctx, check, c.publisher, *c.probe, c.logger, scrapeCounter,
872-
scraper.NewIncrementerFromCounterVec(scrapeErrorCounter), c.k6Runner,
876+
ctx, check, c.publisher, *c.probe, c.logger,
877+
metrics,
878+
c.k6Runner,
873879
c.tenantLimits, c.telemeter,
874880
)
875881
if err != nil {

internal/checks/checks_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,18 +296,17 @@ func (l testLabelsLimiter) LogLabels(ctx context.Context, tenantID model.GlobalI
296296
}
297297

298298
func testScraperFactory(ctx context.Context, check model.Check, publisher pusher.Publisher,
299-
_ sm.Probe, logger zerolog.Logger, scrapeCounter scraper.Incrementer, scrapeErrorCounter scraper.IncrementerVec,
299+
_ sm.Probe, logger zerolog.Logger, metrics scraper.Metrics,
300300
k6Runner k6runner.Runner, labelsLimiter scraper.LabelsLimiter, telemeter *telemetry.Telemeter,
301301
) (*scraper.Scraper, error) {
302302
return scraper.NewWithOpts(
303303
ctx,
304304
check,
305305
scraper.ScraperOpts{
306-
ErrorCounter: scrapeErrorCounter,
307306
Logger: logger,
308307
ProbeFactory: testProbeFactory{},
309308
Publisher: publisher,
310-
ScrapeCounter: scrapeCounter,
309+
Metrics: metrics,
311310
LabelsLimiter: testLabelsLimiter{},
312311
Telemeter: telemeter,
313312
},

internal/scraper/metrics.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package scraper
2+
3+
import "github.com/prometheus/client_golang/prometheus"
4+
5+
func NewMetrics(scrapeCounter Incrementer, errorCounter IncrementerVec) Metrics {
6+
return metrics{
7+
scrapeCounter: scrapeCounter,
8+
errorCounter: errorCounter,
9+
}
10+
}
11+
12+
type metrics struct {
13+
scrapeCounter Incrementer
14+
errorCounter IncrementerVec
15+
}
16+
17+
func (m metrics) AddScrape() {
18+
m.scrapeCounter.Inc()
19+
}
20+
21+
func (m metrics) AddCheckError() {
22+
m.errorCounter.WithLabelValues("check").Inc()
23+
}
24+
25+
func (m metrics) AddCollectorError() {
26+
m.errorCounter.WithLabelValues("collector").Inc()
27+
}
28+
29+
type Incrementer interface {
30+
Inc()
31+
}
32+
33+
type IncrementerVec interface {
34+
WithLabelValues(...string) Incrementer
35+
}
36+
37+
type counterVecWrapper struct {
38+
c *prometheus.CounterVec
39+
}
40+
41+
func (c *counterVecWrapper) WithLabelValues(v ...string) Incrementer {
42+
return c.c.WithLabelValues(v...)
43+
}
44+
45+
func NewIncrementerFromCounterVec(c *prometheus.CounterVec) IncrementerVec {
46+
return &counterVecWrapper{c: c}
47+
}

internal/scraper/scraper.go

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,10 @@ var (
4444
staleMarker float64 = math.Float64frombits(staleNaN)
4545
)
4646

47-
type Incrementer interface {
48-
Inc()
49-
}
50-
51-
type IncrementerVec interface {
52-
WithLabelValues(...string) Incrementer
53-
}
54-
55-
type counterVecWrapper struct {
56-
c *prometheus.CounterVec
57-
}
58-
59-
func (c *counterVecWrapper) WithLabelValues(v ...string) Incrementer {
60-
return c.c.WithLabelValues(v...)
61-
}
62-
63-
func NewIncrementerFromCounterVec(c *prometheus.CounterVec) IncrementerVec {
64-
return &counterVecWrapper{c: c}
47+
type Metrics interface {
48+
AddScrape()
49+
AddCheckError()
50+
AddCollectorError()
6551
}
6652

6753
type LabelsLimiter interface {
@@ -84,16 +70,15 @@ type Scraper struct {
8470
prober prober.Prober
8571
labelsLimiter LabelsLimiter
8672
stop chan struct{}
87-
scrapeCounter Incrementer
88-
errorCounter IncrementerVec
73+
metrics Metrics
8974
summaries map[uint64]prometheus.Summary
9075
histograms map[uint64]prometheus.Histogram
9176
telemeter Telemeter
9277
}
9378

9479
type Factory func(
9580
ctx context.Context, check model.Check, publisher pusher.Publisher, probe sm.Probe, logger zerolog.Logger,
96-
scrapeCounter Incrementer, errorCounter IncrementerVec, k6runner k6runner.Runner, labelsLimiter LabelsLimiter,
81+
metrics Metrics, k6runner k6runner.Runner, labelsLimiter LabelsLimiter,
9782
telemeter *telemetry.Telemeter,
9883
) (*Scraper, error)
9984

@@ -122,15 +107,14 @@ func (d *probeData) Tenant() model.GlobalID {
122107

123108
func New(
124109
ctx context.Context, check model.Check, publisher pusher.Publisher, probe sm.Probe,
125-
logger zerolog.Logger, scrapeCounter Incrementer, errorCounter IncrementerVec,
110+
logger zerolog.Logger, metrics Metrics,
126111
k6runner k6runner.Runner, labelsLimiter LabelsLimiter, telemeter *telemetry.Telemeter,
127112
) (*Scraper, error) {
128113
return NewWithOpts(ctx, check, ScraperOpts{
129114
Probe: probe,
130115
Publisher: publisher,
131116
Logger: logger,
132-
ScrapeCounter: scrapeCounter,
133-
ErrorCounter: errorCounter,
117+
Metrics: metrics,
134118
ProbeFactory: prober.NewProberFactory(k6runner, probe.Id),
135119
LabelsLimiter: labelsLimiter,
136120
Telemeter: telemeter,
@@ -141,8 +125,7 @@ type ScraperOpts struct {
141125
Probe sm.Probe
142126
Publisher pusher.Publisher
143127
Logger zerolog.Logger
144-
ScrapeCounter Incrementer
145-
ErrorCounter IncrementerVec
128+
Metrics Metrics
146129
ProbeFactory prober.ProberFactory
147130
LabelsLimiter LabelsLimiter
148131
Telemeter Telemeter
@@ -179,8 +162,7 @@ func NewWithOpts(ctx context.Context, check model.Check, opts ScraperOpts) (*Scr
179162
prober: smProber,
180163
labelsLimiter: opts.LabelsLimiter,
181164
stop: make(chan struct{}),
182-
scrapeCounter: opts.ScrapeCounter,
183-
errorCounter: opts.ErrorCounter,
165+
metrics: opts.Metrics,
184166
summaries: make(map[uint64]prometheus.Summary),
185167
histograms: make(map[uint64]prometheus.Histogram),
186168
telemeter: opts.Telemeter,
@@ -265,7 +247,7 @@ type scrapeHandler struct {
265247
}
266248

267249
func (h *scrapeHandler) scrape(ctx context.Context, t time.Time) {
268-
h.scraper.scrapeCounter.Inc()
250+
h.scraper.metrics.AddScrape()
269251

270252
var err error
271253

@@ -280,13 +262,13 @@ func (h *scrapeHandler) scrape(ctx context.Context, t time.Time) {
280262

281263
switch {
282264
case errors.Is(err, errCheckFailed):
283-
h.scraper.errorCounter.WithLabelValues("check").Inc()
265+
h.scraper.metrics.AddCheckError()
284266
h.sm.fail(func() {
285267
h.scraper.logger.Info().Msg("check entered FAIL state")
286268
})
287269

288270
case err != nil:
289-
h.scraper.errorCounter.WithLabelValues("collector").Inc()
271+
h.scraper.metrics.AddCollectorError()
290272
h.scraper.logger.Error().Err(err).Msg("error collecting data")
291273
return
292274

internal/scraper/scraper_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,12 +1610,13 @@ func TestScraperRun(t *testing.T) {
16101610
testProber := &testProberB{wantedFailures: 2}
16111611
testTelemeter := &testTelemeter{}
16121612

1613+
metrics := NewMetrics(&counter, &errCounter)
1614+
16131615
s, err := NewWithOpts(ctx, check, ScraperOpts{
1614-
ScrapeCounter: &counter,
1615-
ErrorCounter: &errCounter,
1616-
ProbeFactory: testProbeFactory{builder: func() prober.Prober { return testProber }},
1617-
Logger: zerolog.New(zerolog.NewTestWriter(t)),
1618-
Publisher: &testPublisher{},
1616+
Metrics: metrics,
1617+
ProbeFactory: testProbeFactory{builder: func() prober.Prober { return testProber }},
1618+
Logger: zerolog.New(zerolog.NewTestWriter(t)),
1619+
Publisher: &testPublisher{},
16191620
LabelsLimiter: testLabelsLimiter{
16201621
maxMetricLabels: 20,
16211622
maxLogLabels: 15,

0 commit comments

Comments
 (0)