Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/submit_usage_ping_service.rb')
-rw-r--r--app/services/submit_usage_ping_service.rb44
1 files changed, 34 insertions, 10 deletions
diff --git a/app/services/submit_usage_ping_service.rb b/app/services/submit_usage_ping_service.rb
index 4bbde3a9648..9191943caa7 100644
--- a/app/services/submit_usage_ping_service.rb
+++ b/app/services/submit_usage_ping_service.rb
@@ -1,7 +1,8 @@
# frozen_string_literal: true
class SubmitUsagePingService
- URL = 'https://version.gitlab.com/usage_data'
+ PRODUCTION_URL = 'https://version.gitlab.com/usage_data'
+ STAGING_URL = 'https://gitlab-services-version-gitlab-com-staging.gs-staging.gitlab.org/usage_data'
METRICS = %w[leader_issues instance_issues percentage_issues leader_notes instance_notes
percentage_notes leader_milestones instance_milestones percentage_milestones
@@ -13,28 +14,42 @@ class SubmitUsagePingService
percentage_projects_prometheus_active leader_service_desk_issues instance_service_desk_issues
percentage_service_desk_issues].freeze
+ SubmissionError = Class.new(StandardError)
+
def execute
- return false unless Gitlab::CurrentSettings.usage_ping_enabled?
- return false if User.single_user&.requires_usage_stats_consent?
+ return unless Gitlab::CurrentSettings.usage_ping_enabled?
+ return if User.single_user&.requires_usage_stats_consent?
+
+ usage_data = Gitlab::UsageData.data(force_refresh: true)
+
+ raise SubmissionError.new('Usage data is blank') if usage_data.blank?
+
+ raw_usage_data = save_raw_usage_data(usage_data)
response = Gitlab::HTTP.post(
- URL,
- body: Gitlab::UsageData.to_json(force_refresh: true),
+ url,
+ body: usage_data.to_json,
allow_local_requests: true,
headers: { 'Content-type' => 'application/json' }
)
- store_metrics(response)
+ raise SubmissionError.new("Unsuccessful response code: #{response.code}") unless response.success?
- true
- rescue Gitlab::HTTP::Error => e
- Gitlab::AppLogger.info("Unable to contact GitLab, Inc.: #{e}")
+ raw_usage_data.update_sent_at! if raw_usage_data
- false
+ store_metrics(response)
end
private
+ def save_raw_usage_data(usage_data)
+ return unless Feature.enabled?(:save_raw_usage_data)
+
+ RawUsageData.safe_find_or_create_by(recorded_at: usage_data[:recorded_at]) do |record|
+ record.payload = usage_data
+ end
+ end
+
def store_metrics(response)
metrics = response['conv_index'] || response['dev_ops_score']
@@ -44,4 +59,13 @@ class SubmitUsagePingService
metrics.slice(*METRICS)
)
end
+
+ # See https://gitlab.com/gitlab-org/gitlab/-/issues/233615 for details
+ def url
+ if Rails.env.production?
+ PRODUCTION_URL
+ else
+ STAGING_URL
+ end
+ end
end