summaryrefslogtreecommitdiff
path: root/lib/service_ping/devops_report.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/service_ping/devops_report.rb')
-rw-r--r--lib/service_ping/devops_report.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/service_ping/devops_report.rb b/lib/service_ping/devops_report.rb
new file mode 100644
index 00000000000..2444dfa1d21
--- /dev/null
+++ b/lib/service_ping/devops_report.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+module ServicePing
+ class DevopsReport
+ def initialize(data)
+ @data = data
+ end
+
+ def execute
+ # `conv_index` was previously named `dev_ops_score` in
+ # version-gitlab-com, so we check both for backwards compatibility.
+ metrics = @data['conv_index'] || @data['dev_ops_score']
+
+ # Do not attempt to save a report for the first Service Ping
+ # response for a given GitLab instance, which comes without
+ # metrics.
+ return if metrics.keys == ['usage_data_id']
+
+ report = DevOpsReport::Metric.create(
+ metrics.slice(*DevOpsReport::Metric::METRICS)
+ )
+
+ unless report.persisted?
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(
+ ActiveRecord::RecordInvalid.new(report)
+ )
+ end
+ end
+ end
+end