summaryrefslogtreecommitdiff
path: root/app/services/service_ping/devops_report_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/service_ping/devops_report_service.rb')
-rw-r--r--app/services/service_ping/devops_report_service.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/app/services/service_ping/devops_report_service.rb b/app/services/service_ping/devops_report_service.rb
new file mode 100644
index 00000000000..3b8f5dfdb82
--- /dev/null
+++ b/app/services/service_ping/devops_report_service.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+module ServicePing
+ class DevopsReportService
+ 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)
+ )
+
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(ActiveRecord::RecordInvalid.new(report)) unless report.persisted?
+ end
+ end
+end