@@ -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. 
218242func  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. 
239251func  (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. 
256269func  (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