diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 21:42:06 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 21:42:06 +0300 |
commit | 6e4e1050d9dba2b7b2523fdd1768823ab85feef4 (patch) | |
tree | 78be5963ec075d80116a932011d695dd33910b4e /app/services/submit_usage_ping_service.rb | |
parent | 1ce776de4ae122aba3f349c02c17cebeaa8ecf07 (diff) |
Add latest changes from gitlab-org/gitlab@13-3-stable-ee
Diffstat (limited to 'app/services/submit_usage_ping_service.rb')
-rw-r--r-- | app/services/submit_usage_ping_service.rb | 44 |
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 |