132 lines
2.9 KiB
Go
132 lines
2.9 KiB
Go
// Package metrics provides monitoring of the GitHub related metrics.
|
|
//
|
|
// This depends on the metrics exporter of kubebuilder.
|
|
// See https://book.kubebuilder.io/reference/metrics.html for details.
|
|
package actionsmetrics
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"sigs.k8s.io/controller-runtime/pkg/metrics"
|
|
)
|
|
|
|
func init() {
|
|
metrics.Registry.MustRegister(
|
|
githubWorkflowJobQueueDurationSeconds,
|
|
githubWorkflowJobRunDurationSeconds,
|
|
githubWorkflowJobConclusionsTotal,
|
|
githubWorkflowJobsQueuedTotal,
|
|
githubWorkflowJobsStartedTotal,
|
|
githubWorkflowJobsCompletedTotal,
|
|
githubWorkflowJobFailuresTotal,
|
|
)
|
|
}
|
|
|
|
var (
|
|
runtimeBuckets []float64 = []float64{
|
|
0.01,
|
|
0.05,
|
|
0.1,
|
|
0.5,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
6,
|
|
7,
|
|
8,
|
|
9,
|
|
10,
|
|
12,
|
|
15,
|
|
18,
|
|
20,
|
|
25,
|
|
30,
|
|
40,
|
|
50,
|
|
60,
|
|
70,
|
|
80,
|
|
90,
|
|
100,
|
|
110,
|
|
120,
|
|
150,
|
|
180,
|
|
210,
|
|
240,
|
|
300,
|
|
360,
|
|
420,
|
|
480,
|
|
540,
|
|
600,
|
|
900,
|
|
1200,
|
|
1800,
|
|
2400,
|
|
3000,
|
|
3600,
|
|
}
|
|
)
|
|
|
|
func metricLabels(extras ...string) []string {
|
|
return append(append([]string{}, commonLabels...), extras...)
|
|
}
|
|
|
|
var (
|
|
commonLabels = []string{"runs_on", "job_name", "organization", "repository", "repository_full_name", "owner", "workflow_name", "head_branch"}
|
|
githubWorkflowJobQueueDurationSeconds = prometheus.NewHistogramVec(
|
|
prometheus.HistogramOpts{
|
|
Name: "github_workflow_job_queue_duration_seconds",
|
|
Help: "Queue times for workflow jobs in seconds",
|
|
Buckets: runtimeBuckets,
|
|
},
|
|
metricLabels(),
|
|
)
|
|
githubWorkflowJobRunDurationSeconds = prometheus.NewHistogramVec(
|
|
prometheus.HistogramOpts{
|
|
Name: "github_workflow_job_run_duration_seconds",
|
|
Help: "Run times for workflow jobs in seconds",
|
|
Buckets: runtimeBuckets,
|
|
},
|
|
metricLabels("job_conclusion"),
|
|
)
|
|
githubWorkflowJobConclusionsTotal = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "github_workflow_job_conclusions_total",
|
|
Help: "Conclusions for tracked workflow jobs",
|
|
},
|
|
metricLabels("job_conclusion"),
|
|
)
|
|
githubWorkflowJobsQueuedTotal = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "github_workflow_jobs_queued_total",
|
|
Help: "Total count of workflow jobs queued (events where job_status=queued)",
|
|
},
|
|
metricLabels(),
|
|
)
|
|
githubWorkflowJobsStartedTotal = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "github_workflow_jobs_started_total",
|
|
Help: "Total count of workflow jobs started (events where job_status=in_progress)",
|
|
},
|
|
metricLabels(),
|
|
)
|
|
githubWorkflowJobsCompletedTotal = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "github_workflow_jobs_completed_total",
|
|
Help: "Total count of workflow jobs completed (events where job_status=completed)",
|
|
},
|
|
metricLabels(),
|
|
)
|
|
githubWorkflowJobFailuresTotal = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "github_workflow_job_failures_total",
|
|
Help: "Conclusions for tracked workflow runs",
|
|
},
|
|
metricLabels("failed_step", "exit_code"),
|
|
)
|
|
)
|