From bebb679b8dcc2695435ea3d0ef31b843b506bf8c Mon Sep 17 00:00:00 2001 From: divyansh42 Date: Wed, 6 Aug 2025 16:09:41 +0530 Subject: [PATCH] fix: exclude pending PipelineRuns from tekton_pipelines_controller_running_pipelineruns metric The running_pipelineruns metric incorrectly counted pending PipelineRuns as running. Add !pr.IsPending() check to exclude them. Fixes #8949 Signed-off-by: divyansh42 --- pkg/pipelinerunmetrics/metrics.go | 2 +- pkg/pipelinerunmetrics/metrics_test.go | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/pkg/pipelinerunmetrics/metrics.go b/pkg/pipelinerunmetrics/metrics.go index b9aaebf6ce6..f4bd0cdf380 100644 --- a/pkg/pipelinerunmetrics/metrics.go +++ b/pkg/pipelinerunmetrics/metrics.go @@ -412,7 +412,7 @@ func (r *Recorder) RunningPipelineRuns(lister listers.PipelineRunLister) error { if err_ != nil { return err } - if !pr.IsDone() { + if !pr.IsDone() && !pr.IsPending() { countMap[pipelineRunKey]++ metrics.Record(ctx_, runningPRs.M(float64(countMap[pipelineRunKey]))) runningPipelineRuns++ diff --git a/pkg/pipelinerunmetrics/metrics_test.go b/pkg/pipelinerunmetrics/metrics_test.go index 4ef501021f4..fe0373ca414 100644 --- a/pkg/pipelinerunmetrics/metrics_test.go +++ b/pkg/pipelinerunmetrics/metrics_test.go @@ -544,9 +544,12 @@ func TestRecordPipelineRunDurationCount(t *testing.T) { func TestRecordRunningPipelineRunsCount(t *testing.T) { unregisterMetrics() - newPipelineRun := func(status corev1.ConditionStatus) *v1.PipelineRun { + newPipelineRun := func(status corev1.ConditionStatus, specStatus v1.PipelineRunSpecStatus) *v1.PipelineRun { return &v1.PipelineRun{ ObjectMeta: metav1.ObjectMeta{Name: names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pipelinerun-")}, + Spec: v1.PipelineRunSpec{ + Status: specStatus, + }, Status: v1.PipelineRunStatus{ Status: duckv1.Status{ Conditions: duckv1.Conditions{{ @@ -561,13 +564,18 @@ func TestRecordRunningPipelineRunsCount(t *testing.T) { ctx, _ := ttesting.SetupFakeContext(t) informer := fakepipelineruninformer.Get(ctx) // Add N randomly-named PipelineRuns with differently-succeeded statuses. - for _, tr := range []*v1.PipelineRun{ - newPipelineRun(corev1.ConditionTrue), - newPipelineRun(corev1.ConditionUnknown), - newPipelineRun(corev1.ConditionFalse), + for _, pr := range []*v1.PipelineRun{ + // Completed PipelineRun - should NOT be counted as running + newPipelineRun(corev1.ConditionTrue, ""), + // Actually running PipelineRun - should be counted as running + newPipelineRun(corev1.ConditionUnknown, ""), + // Pending PipelineRun - should NOT be counted as running + newPipelineRun(corev1.ConditionUnknown, v1.PipelineRunSpecStatusPending), + // Failed PipelineRun - should NOT be counted as running + newPipelineRun(corev1.ConditionFalse, ""), } { - if err := informer.Informer().GetIndexer().Add(tr); err != nil { - t.Fatalf("Adding TaskRun to informer: %v", err) + if err := informer.Informer().GetIndexer().Add(pr); err != nil { + t.Fatalf("Adding PipelineRun to informer: %v", err) } }