garm/metrics/github.go
Gabriel Adrian Samfira b600a21980 Add rate limits metrics and credentials details page
This change adds metrics for rate limits. Rate limits are now recorded
via a rate limit check loop (as before), but in addition, we are now
taking the rate limit info that gets returned in all github responses
and we're recording that as it happens as opposed to every 30 seconds.

The loop remains to update rate limits even for credentials that are
used rarely.

This change also adds a credentials details page in the webUI.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2026-02-10 12:34:35 +02:00

62 lines
2.5 KiB
Go

// Copyright 2025 Cloudbase Solutions SRL
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
package metrics
import "github.com/prometheus/client_golang/prometheus"
var (
GithubOperationCount = prometheus.NewCounterVec(prometheus.CounterOpts{
Namespace: metricsNamespace,
Subsystem: metricsGithubSubsystem,
Name: "operations_total",
Help: "Total number of github operation attempts",
}, []string{"operation", "scope"})
GithubOperationFailedCount = prometheus.NewCounterVec(prometheus.CounterOpts{
Namespace: metricsNamespace,
Subsystem: metricsGithubSubsystem,
Name: "errors_total",
Help: "Total number of failed github operation attempts",
}, []string{"operation", "scope"})
// GitHub rate limit metrics
GithubRateLimitLimit = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: metricsNamespace,
Subsystem: metricsGithubSubsystem,
Name: "rate_limit_limit",
Help: "The maximum number of requests allowed per hour for GitHub API",
}, []string{"credential_name", "credential_id", "endpoint"})
GithubRateLimitRemaining = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: metricsNamespace,
Subsystem: metricsGithubSubsystem,
Name: "rate_limit_remaining",
Help: "The number of requests remaining in the current rate limit window",
}, []string{"credential_name", "credential_id", "endpoint"})
GithubRateLimitUsed = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: metricsNamespace,
Subsystem: metricsGithubSubsystem,
Name: "rate_limit_used",
Help: "The number of requests used in the current rate limit window",
}, []string{"credential_name", "credential_id", "endpoint"})
GithubRateLimitResetTimestamp = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: metricsNamespace,
Subsystem: metricsGithubSubsystem,
Name: "rate_limit_reset_timestamp",
Help: "Unix timestamp when the rate limit resets",
}, []string{"credential_name", "credential_id", "endpoint"})
)