Skip to content

Commit e90dd54

Browse files
committed
DONOTMERGE: keep metrics local to the struct instance
1 parent e0ac123 commit e90dd54

File tree

1 file changed

+46
-25
lines changed

1 file changed

+46
-25
lines changed

pkg/store/github/github.go

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ type GitHubStore struct {
2828
// Topic to filter repositories by. Leave empty for all.
2929
topicFilter string
3030

31-
client *github.Client
32-
cache map[string][]*core.ModuleVersion
33-
mut sync.RWMutex
31+
client *github.Client
32+
cache map[string][]*core.ModuleVersion
33+
mut sync.RWMutex
34+
metrics metrics
3435

3536
logger *zap.Logger
3637
}
@@ -51,6 +52,17 @@ func NewGitHubStore(ownerFilter, topicFilter, accessToken string, logger *zap.Lo
5152
client: github.NewClient(c),
5253
cache: make(map[string][]*core.ModuleVersion),
5354
logger: logger,
55+
metrics: metrics{
56+
rateLimitCoreLimit: newGauge("rate_limit_core_limit"),
57+
rateLimitCoreRemaining: newGauge("rate_limit_core_remaining"),
58+
rateLimitCoreResetTimestamp: newGauge("rate_limit_core_reset_timestamp"),
59+
rateLimitSearchLimit: newGauge("rate_limit_search_limit"),
60+
rateLimitSearchRemaining: newGauge("rate_limit_search_remaining"),
61+
rateLimitSearchResetTimestamp: newGauge("rate_limit_search_reset_timestamp"),
62+
rateLimitGraphQLLimit: newGauge("rate_limit_graphql_limit"),
63+
rateLimitGraphQLRemaining: newGauge("rate_limit_graphql_remaining"),
64+
rateLimitGraphQLResetTimestamp: newGauge("rate_limit_graphql_reset_timestamp"),
65+
},
5466
}
5567
}
5668

@@ -214,6 +226,18 @@ func (s *GitHubStore) searchRepositories(ctx context.Context) ([]*github.Reposit
214226
return allRepos, nil
215227
}
216228

229+
type metrics struct {
230+
rateLimitCoreLimit prometheus.Gauge
231+
rateLimitCoreRemaining prometheus.Gauge
232+
rateLimitCoreResetTimestamp prometheus.Gauge
233+
rateLimitSearchLimit prometheus.Gauge
234+
rateLimitSearchRemaining prometheus.Gauge
235+
rateLimitSearchResetTimestamp prometheus.Gauge
236+
rateLimitGraphQLLimit prometheus.Gauge
237+
rateLimitGraphQLRemaining prometheus.Gauge
238+
rateLimitGraphQLResetTimestamp prometheus.Gauge
239+
}
240+
217241
// newGauge is a helper function for creating gauges with a common namespace and subsystem.
218242
func newGauge(name string) prometheus.Gauge {
219243
return prometheus.NewGauge(prometheus.GaugeOpts{
@@ -223,38 +247,35 @@ func newGauge(name string) prometheus.Gauge {
223247
})
224248
}
225249

226-
var (
227-
metRateLimitCoreLimit = newGauge("rate_limit_core_limit")
228-
metRateLimitCoreRemaining = newGauge("rate_limit_core_remaining")
229-
metRateLimitCoreResetTimestamp = newGauge("rate_limit_core_reset_timestamp")
230-
metRateLimitSearchLimit = newGauge("rate_limit_search_limit")
231-
metRateLimitSearchRemaining = newGauge("rate_limit_search_remaining")
232-
metRateLimitSearchResetTimestamp = newGauge("rate_limit_search_reset_timestamp")
233-
metRateLimitGraphQLLimit = newGauge("rate_limit_graphql_limit")
234-
metRateLimitGraphQLRemaining = newGauge("rate_limit_graphql_remaining")
235-
metRateLimitGraphQLResetTimestamp = newGauge("rate_limit_graphql_reset_timestamp")
236-
)
237-
238250
// updateMetrics updates all metrics that needs polling.
239251
func (s *GitHubStore) updateMetrics(ctx context.Context) {
240252
ratel, _, err := s.client.RateLimits(ctx)
241253
if err != nil {
242254
s.logger.Warn("failed to get rate limit status", zap.Errors("err", []error{err}))
243255
} else {
244-
metRateLimitCoreLimit.Set(float64(ratel.Core.Limit))
245-
metRateLimitCoreRemaining.Set(float64(ratel.Core.Remaining))
246-
metRateLimitCoreResetTimestamp.Set(float64(ratel.Core.Reset.Unix()))
247-
metRateLimitSearchLimit.Set(float64(ratel.Search.Limit))
248-
metRateLimitSearchRemaining.Set(float64(ratel.Search.Remaining))
249-
metRateLimitSearchResetTimestamp.Set(float64(ratel.Search.Reset.Unix()))
250-
metRateLimitGraphQLLimit.Set(float64(ratel.GraphQL.Limit))
251-
metRateLimitGraphQLRemaining.Set(float64(ratel.GraphQL.Remaining))
252-
metRateLimitGraphQLResetTimestamp.Set(float64(ratel.GraphQL.Reset.Unix()))
256+
s.metrics.rateLimitCoreLimit.Set(float64(ratel.Core.Limit))
257+
s.metrics.rateLimitCoreRemaining.Set(float64(ratel.Core.Remaining))
258+
s.metrics.rateLimitCoreResetTimestamp.Set(float64(ratel.Core.Reset.Unix()))
259+
s.metrics.rateLimitSearchLimit.Set(float64(ratel.Search.Limit))
260+
s.metrics.rateLimitSearchRemaining.Set(float64(ratel.Search.Remaining))
261+
s.metrics.rateLimitSearchResetTimestamp.Set(float64(ratel.Search.Reset.Unix()))
262+
s.metrics.rateLimitGraphQLLimit.Set(float64(ratel.GraphQL.Limit))
263+
s.metrics.rateLimitGraphQLRemaining.Set(float64(ratel.GraphQL.Remaining))
264+
s.metrics.rateLimitGraphQLResetTimestamp.Set(float64(ratel.GraphQL.Reset.Unix()))
253265
}
254266
}
255267

268+
// Metrics returns a registry with metrics for this store.
256269
func (s *GitHubStore) Metrics() []prometheus.Collector {
257270
return []prometheus.Collector{
258-
metRateLimitCoreLimit,
271+
s.metrics.rateLimitCoreLimit,
272+
s.metrics.rateLimitCoreRemaining,
273+
s.metrics.rateLimitCoreResetTimestamp,
274+
s.metrics.rateLimitSearchLimit,
275+
s.metrics.rateLimitSearchRemaining,
276+
s.metrics.rateLimitSearchResetTimestamp,
277+
s.metrics.rateLimitGraphQLLimit,
278+
s.metrics.rateLimitGraphQLRemaining,
279+
s.metrics.rateLimitGraphQLResetTimestamp,
259280
}
260281
}

0 commit comments

Comments
 (0)