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>
62 lines
2.5 KiB
Go
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"})
|
|
)
|