213 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Go
		
	
	
	
package metrics
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/actions-runner-controller/actions-runner-controller/api/v1alpha1"
 | 
						|
	"github.com/prometheus/client_golang/prometheus"
 | 
						|
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	hraName        = "horizontalrunnerautoscaler"
 | 
						|
	hraNamespace   = "namespace"
 | 
						|
	stEnterprise   = "enterprise"
 | 
						|
	stOrganization = "organization"
 | 
						|
	stRepository   = "repository"
 | 
						|
	stKind         = "kind"
 | 
						|
	stName         = "name"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	horizontalRunnerAutoscalerMetrics = []prometheus.Collector{
 | 
						|
		horizontalRunnerAutoscalerMinReplicas,
 | 
						|
		horizontalRunnerAutoscalerMaxReplicas,
 | 
						|
		horizontalRunnerAutoscalerDesiredReplicas,
 | 
						|
		horizontalRunnerAutoscalerReplicasDesired,
 | 
						|
		horizontalRunnerAutoscalerRunners,
 | 
						|
		horizontalRunnerAutoscalerRunnersRegistered,
 | 
						|
		horizontalRunnerAutoscalerRunnersBusy,
 | 
						|
		horizontalRunnerAutoscalerTerminatingBusy,
 | 
						|
		horizontalRunnerAutoscalerNecessaryReplicas,
 | 
						|
		horizontalRunnerAutoscalerWorkflowRunsCompleted,
 | 
						|
		horizontalRunnerAutoscalerWorkflowRunsInProgress,
 | 
						|
		horizontalRunnerAutoscalerWorkflowRunsQueued,
 | 
						|
		horizontalRunnerAutoscalerWorkflowRunsUnknown,
 | 
						|
	}
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	horizontalRunnerAutoscalerMinReplicas = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_spec_min_replicas",
 | 
						|
			Help: "minReplicas of HorizontalRunnerAutoscaler",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerMaxReplicas = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_spec_max_replicas",
 | 
						|
			Help: "maxReplicas of HorizontalRunnerAutoscaler",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerDesiredReplicas = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_status_desired_replicas",
 | 
						|
			Help: "desiredReplicas of HorizontalRunnerAutoscaler",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace},
 | 
						|
	)
 | 
						|
	// PercentageRunnersBusy
 | 
						|
	horizontalRunnerAutoscalerReplicasDesired = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_replicas_desired",
 | 
						|
			Help: "replicas_desired of PercentageRunnersBusy",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerRunners = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_runners",
 | 
						|
			Help: "num_runners of PercentageRunnersBusy",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerRunnersRegistered = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_runners_registered",
 | 
						|
			Help: "num_runners_registered of PercentageRunnersBusy",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerRunnersBusy = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_runners_busy",
 | 
						|
			Help: "num_runners_busy of PercentageRunnersBusy",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerTerminatingBusy = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_terminating_busy",
 | 
						|
			Help: "num_terminating_busy of PercentageRunnersBusy",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	// QueuedAndInProgressWorkflowRuns
 | 
						|
	horizontalRunnerAutoscalerNecessaryReplicas = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_necessary_replicas",
 | 
						|
			Help: "necessary_replicas of QueuedAndInProgressWorkflowRuns",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsCompleted = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_workflow_runs_completed",
 | 
						|
			Help: "workflow_runs_completed of QueuedAndInProgressWorkflowRuns",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsInProgress = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_workflow_runs_in_progress",
 | 
						|
			Help: "workflow_runs_in_progress of QueuedAndInProgressWorkflowRuns",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsQueued = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_workflow_runs_queued",
 | 
						|
			Help: "workflow_runs_queued of QueuedAndInProgressWorkflowRuns",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsUnknown = prometheus.NewGaugeVec(
 | 
						|
		prometheus.GaugeOpts{
 | 
						|
			Name: "horizontalrunnerautoscaler_workflow_runs_unknown",
 | 
						|
			Help: "workflow_runs_unknown of QueuedAndInProgressWorkflowRuns",
 | 
						|
		},
 | 
						|
		[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
 | 
						|
	)
 | 
						|
)
 | 
						|
 | 
						|
func SetHorizontalRunnerAutoscalerSpec(o metav1.ObjectMeta, spec v1alpha1.HorizontalRunnerAutoscalerSpec) {
 | 
						|
	labels := prometheus.Labels{
 | 
						|
		hraName:      o.Name,
 | 
						|
		hraNamespace: o.Namespace,
 | 
						|
	}
 | 
						|
	if spec.MaxReplicas != nil {
 | 
						|
		horizontalRunnerAutoscalerMaxReplicas.With(labels).Set(float64(*spec.MaxReplicas))
 | 
						|
	}
 | 
						|
	if spec.MinReplicas != nil {
 | 
						|
		horizontalRunnerAutoscalerMinReplicas.With(labels).Set(float64(*spec.MinReplicas))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func SetHorizontalRunnerAutoscalerStatus(o metav1.ObjectMeta, status v1alpha1.HorizontalRunnerAutoscalerStatus) {
 | 
						|
	labels := prometheus.Labels{
 | 
						|
		hraName:      o.Name,
 | 
						|
		hraNamespace: o.Namespace,
 | 
						|
	}
 | 
						|
	if status.DesiredReplicas != nil {
 | 
						|
		horizontalRunnerAutoscalerDesiredReplicas.With(labels).Set(float64(*status.DesiredReplicas))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func SetHorizontalRunnerAutoscalerPercentageRunnersBusy(
 | 
						|
	o metav1.ObjectMeta,
 | 
						|
	enterprise string,
 | 
						|
	organization string,
 | 
						|
	repository string,
 | 
						|
	kind string,
 | 
						|
	name string,
 | 
						|
	desiredReplicas int,
 | 
						|
	numRunners int,
 | 
						|
	numRunnersRegistered int,
 | 
						|
	numRunnersBusy int,
 | 
						|
	numTerminatingBusy int,
 | 
						|
) {
 | 
						|
	labels := prometheus.Labels{
 | 
						|
		hraName:        o.Name,
 | 
						|
		hraNamespace:   o.Namespace,
 | 
						|
		stEnterprise:   enterprise,
 | 
						|
		stOrganization: organization,
 | 
						|
		stRepository:   repository,
 | 
						|
		stKind:         kind,
 | 
						|
		stName:         name,
 | 
						|
	}
 | 
						|
	horizontalRunnerAutoscalerReplicasDesired.With(labels).Set(float64(desiredReplicas))
 | 
						|
	horizontalRunnerAutoscalerRunners.With(labels).Set(float64(numRunners))
 | 
						|
	horizontalRunnerAutoscalerRunnersRegistered.With(labels).Set(float64(numRunnersRegistered))
 | 
						|
	horizontalRunnerAutoscalerRunnersBusy.With(labels).Set(float64(numRunnersBusy))
 | 
						|
	horizontalRunnerAutoscalerTerminatingBusy.With(labels).Set(float64(numTerminatingBusy))
 | 
						|
}
 | 
						|
 | 
						|
func SetHorizontalRunnerAutoscalerQueuedAndInProgressWorkflowRuns(
 | 
						|
	o metav1.ObjectMeta,
 | 
						|
	enterprise string,
 | 
						|
	organization string,
 | 
						|
	repository string,
 | 
						|
	kind string,
 | 
						|
	name string,
 | 
						|
	necessaryReplicas int,
 | 
						|
	workflowRunsCompleted int,
 | 
						|
	workflowRunsInProgress int,
 | 
						|
	workflowRunsQueued int,
 | 
						|
	workflowRunsUnknown int,
 | 
						|
) {
 | 
						|
	labels := prometheus.Labels{
 | 
						|
		hraName:        o.Name,
 | 
						|
		hraNamespace:   o.Namespace,
 | 
						|
		stEnterprise:   enterprise,
 | 
						|
		stOrganization: organization,
 | 
						|
		stRepository:   repository,
 | 
						|
		stKind:         kind,
 | 
						|
		stName:         name,
 | 
						|
	}
 | 
						|
	horizontalRunnerAutoscalerNecessaryReplicas.With(labels).Set(float64(necessaryReplicas))
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsCompleted.With(labels).Set(float64(workflowRunsCompleted))
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsInProgress.With(labels).Set(float64(workflowRunsInProgress))
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsQueued.With(labels).Set(float64(workflowRunsQueued))
 | 
						|
	horizontalRunnerAutoscalerWorkflowRunsUnknown.With(labels).Set(float64(workflowRunsUnknown))
 | 
						|
}
 |