129 lines
3.5 KiB
Go
129 lines
3.5 KiB
Go
package metrics
|
|
|
|
import (
|
|
"github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"sigs.k8s.io/controller-runtime/pkg/metrics"
|
|
)
|
|
|
|
var githubScaleSetControllerSubsystem = "gha_controller"
|
|
|
|
var labels = []string{
|
|
"name",
|
|
"namespace",
|
|
"repository",
|
|
"organization",
|
|
"enterprise",
|
|
}
|
|
|
|
type CommonLabels struct {
|
|
Name string
|
|
Namespace string
|
|
Repository string
|
|
Organization string
|
|
Enterprise string
|
|
}
|
|
|
|
func (l *CommonLabels) labels() prometheus.Labels {
|
|
return prometheus.Labels{
|
|
"name": l.Name,
|
|
"namespace": l.Namespace,
|
|
"repository": l.Repository,
|
|
"organization": l.Organization,
|
|
"enterprise": l.Enterprise,
|
|
}
|
|
}
|
|
|
|
var (
|
|
pendingEphemeralRunners = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Subsystem: githubScaleSetControllerSubsystem,
|
|
Name: "pending_ephemeral_runners",
|
|
Help: "Number of ephemeral runners in a pending state.",
|
|
},
|
|
labels,
|
|
)
|
|
runningEphemeralRunners = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Subsystem: githubScaleSetControllerSubsystem,
|
|
Name: "running_ephemeral_runners",
|
|
Help: "Number of ephemeral runners in a running state.",
|
|
},
|
|
labels,
|
|
)
|
|
succeededEphemeralRunners = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Subsystem: githubScaleSetControllerSubsystem,
|
|
Name: "succeeded_ephemeral_runners",
|
|
Help: "Number of ephemeral runners in a succeeded state.",
|
|
},
|
|
labels,
|
|
)
|
|
failedEphemeralRunners = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Subsystem: githubScaleSetControllerSubsystem,
|
|
Name: "failed_ephemeral_runners",
|
|
Help: "Number of ephemeral runners in a failed state.",
|
|
},
|
|
labels,
|
|
)
|
|
outdatedEphemeralRunners = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Subsystem: githubScaleSetControllerSubsystem,
|
|
Name: "outdated_ephemeral_runners",
|
|
Help: "Number of ephemeral runners in an outdated state.",
|
|
},
|
|
labels,
|
|
)
|
|
runningListeners = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Subsystem: githubScaleSetControllerSubsystem,
|
|
Name: "running_listeners",
|
|
Help: "Number of listeners in a running state.",
|
|
},
|
|
labels,
|
|
)
|
|
)
|
|
|
|
func RegisterMetrics() {
|
|
metrics.Registry.MustRegister(
|
|
pendingEphemeralRunners,
|
|
runningEphemeralRunners,
|
|
succeededEphemeralRunners,
|
|
failedEphemeralRunners,
|
|
outdatedEphemeralRunners,
|
|
runningListeners,
|
|
)
|
|
}
|
|
|
|
func AddEphemeralRunner(commonLabels CommonLabels, phase v1alpha1.EphemeralRunnerPhase) {
|
|
updateEphemeralRunner(commonLabels, phase, 1)
|
|
}
|
|
|
|
func SubEphemeralRunner(commonLabels CommonLabels, phase v1alpha1.EphemeralRunnerPhase) {
|
|
updateEphemeralRunner(commonLabels, phase, -1)
|
|
}
|
|
|
|
func updateEphemeralRunner(commonLabels CommonLabels, phase v1alpha1.EphemeralRunnerPhase, delta float64) {
|
|
switch phase {
|
|
case v1alpha1.EphemeralRunnerPhasePending:
|
|
pendingEphemeralRunners.With(commonLabels.labels()).Add(delta)
|
|
case v1alpha1.EphemeralRunnerPhaseRunning:
|
|
runningEphemeralRunners.With(commonLabels.labels()).Add(delta)
|
|
case v1alpha1.EphemeralRunnerPhaseSucceeded:
|
|
succeededEphemeralRunners.With(commonLabels.labels()).Add(delta)
|
|
case v1alpha1.EphemeralRunnerPhaseFailed:
|
|
failedEphemeralRunners.With(commonLabels.labels()).Add(delta)
|
|
case v1alpha1.EphemeralRunnerPhaseOutdated:
|
|
outdatedEphemeralRunners.With(commonLabels.labels()).Add(delta)
|
|
}
|
|
}
|
|
|
|
func AddRunningListener(commonLabels CommonLabels) {
|
|
runningListeners.With(commonLabels.labels()).Set(1)
|
|
}
|
|
|
|
func SubRunningListener(commonLabels CommonLabels) {
|
|
runningListeners.With(commonLabels.labels()).Set(0)
|
|
}
|