summaryrefslogtreecommitdiff
path: root/app/workers/analytics/usage_trends/counter_job_worker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/analytics/usage_trends/counter_job_worker.rb')
-rw-r--r--app/workers/analytics/usage_trends/counter_job_worker.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/workers/analytics/usage_trends/counter_job_worker.rb b/app/workers/analytics/usage_trends/counter_job_worker.rb
new file mode 100644
index 00000000000..275c6ac2de2
--- /dev/null
+++ b/app/workers/analytics/usage_trends/counter_job_worker.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module Analytics
+ module UsageTrends
+ class CounterJobWorker
+ extend ::Gitlab::Utils::Override
+ include ApplicationWorker
+
+ feature_category :devops_reports
+ urgency :low
+
+ idempotent!
+
+ def perform(measurement_identifier, min_id, max_id, recorded_at)
+ query_scope = ::Analytics::UsageTrends::Measurement.identifier_query_mapping[measurement_identifier].call
+
+ count = if min_id.nil? || max_id.nil? # table is empty
+ 0
+ else
+ counter(query_scope, min_id, max_id)
+ end
+
+ return if count == Gitlab::Database::BatchCounter::FALLBACK
+
+ UsageTrends::Measurement.insert_all([{ recorded_at: recorded_at, count: count, identifier: measurement_identifier }])
+ end
+
+ private
+
+ def counter(query_scope, min_id, max_id)
+ Gitlab::Database::BatchCount.batch_count(query_scope, start: min_id, finish: max_id)
+ end
+ end
+ end
+end