Skip to content

Fix Service ping failing metrics for protect stage

Summary

The following metrics are failing in GitLab.com for devopsprotect

  • counts.container_scanning_jobs

Resources

Implementation plan

  • database optimize query to use different batch size when counting container_scanning_jobs, we should use 500_000 (currently ~4200 loops) or 1_000_000 (currently ~2100 loops).
diff --git a/ee/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric.rb b/ee/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric.rb
index bb7a6ec0d87..adc7fc3f740 100644
--- a/ee/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric.rb
+++ b/ee/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric.rb
@@ -7,6 +7,11 @@ module Instrumentations
         class CountCiBuildsMetric < DatabaseMetric
           relation { ::Ci::Build }
           operation :count
+          metric_options do
+            {
+              batch_size: 1_000_000
+            }
+          end
 
           def initialize(time_frame:, options: {})
             super
diff --git a/lib/gitlab/usage/metrics/instrumentations/database_metric.rb b/lib/gitlab/usage/metrics/instrumentations/database_metric.rb
index d7fc798ebe2..34a8bfd08b5 100644
--- a/lib/gitlab/usage/metrics/instrumentations/database_metric.rb
+++ b/lib/gitlab/usage/metrics/instrumentations/database_metric.rb
@@ -33,6 +33,12 @@ def relation(&block)
               @metric_relation = block
             end
 
+            def metric_options(&block)
+              return @metric_options&.call.to_h unless block_given?
+
+              @metric_options = block
+            end
+
             def operation(symbol, column: nil, &block)
               @metric_operation = symbol
               @column = column
@@ -54,6 +60,7 @@ def value
                     self.class.column,
                     start: start,
                     finish: finish,
+                    **self.class.metric_options,
                     &self.class.metric_operation_block)
           end
 
Edited by Alan (Maciej) Paruszewski