diff options
Diffstat (limited to 'app/services/service_ping')
-rw-r--r-- | app/services/service_ping/submit_service.rb | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/app/services/service_ping/submit_service.rb b/app/services/service_ping/submit_service.rb index 89cb14e6fff..7fd0fb10b4b 100644 --- a/app/services/service_ping/submit_service.rb +++ b/app/services/service_ping/submit_service.rb @@ -18,41 +18,20 @@ module ServicePing def execute return unless ServicePing::ServicePingSettings.product_intelligence_enabled? - start = Time.current - begin - usage_data = payload || ServicePing::BuildPayload.new.execute - response = submit_usage_data_payload(usage_data) - rescue StandardError => e - return unless Gitlab::CurrentSettings.usage_ping_enabled? - - error_payload = { - time: Time.current, - uuid: Gitlab::CurrentSettings.uuid, - hostname: Gitlab.config.gitlab.host, - version: Gitlab.version_info.to_s, - message: "#{e.message.presence || e.class} at #{e.backtrace[0]}", - elapsed: (Time.current - start).round(1) - } - submit_payload({ error: error_payload }, path: ERROR_PATH) + start_time = Time.current - usage_data = payload || Gitlab::Usage::ServicePingReport.for(output: :all_metrics_values) - response = submit_usage_data_payload(usage_data) - end + begin + response = submit_usage_data_payload - version_usage_data_id = - response.dig('conv_index', 'usage_data_id') || response.dig('dev_ops_score', 'usage_data_id') + raise SubmissionError, "Unsuccessful response code: #{response.code}" unless response.success? - unless version_usage_data_id.is_a?(Integer) && version_usage_data_id > 0 - raise SubmissionError, "Invalid usage_data_id in response: #{version_usage_data_id}" - end + handle_response(response) + submit_metadata_payload + rescue StandardError => e + submit_error_payload(e, start_time) - unless skip_db_write - raw_usage_data = save_raw_usage_data(usage_data) - raw_usage_data.update_version_metadata!(usage_data_id: version_usage_data_id) - ServicePing::DevopsReport.new(response).execute + raise end - - submit_payload(metadata(usage_data), path: METADATA_PATH) end private @@ -90,14 +69,43 @@ module ServicePing ) end - def submit_usage_data_payload(usage_data) - raise SubmissionError, 'Usage data is blank' if usage_data.blank? + def submit_usage_data_payload + raise SubmissionError, 'Usage data payload is blank' if payload.blank? + + submit_payload(payload) + end + + def handle_response(response) + version_usage_data_id = + response.dig('conv_index', 'usage_data_id') || response.dig('dev_ops_score', 'usage_data_id') - response = submit_payload(usage_data) + unless version_usage_data_id.is_a?(Integer) && version_usage_data_id > 0 + raise SubmissionError, "Invalid usage_data_id in response: #{version_usage_data_id}" + end - raise SubmissionError, "Unsuccessful response code: #{response.code}" unless response.success? + return if skip_db_write + + raw_usage_data = save_raw_usage_data(payload) + raw_usage_data.update_version_metadata!(usage_data_id: version_usage_data_id) + ServicePing::DevopsReport.new(response).execute + end + + def submit_error_payload(error, start_time) + current_time = Time.current + error_payload = { + time: current_time, + uuid: Gitlab::CurrentSettings.uuid, + hostname: Gitlab.config.gitlab.host, + version: Gitlab.version_info.to_s, + message: "#{error.message.presence || error.class} at #{error.backtrace[0]}", + elapsed: (current_time - start_time).round(1) + } + + submit_payload({ error: error_payload }, path: ERROR_PATH) + end - response + def submit_metadata_payload + submit_payload(metadata(payload), path: METADATA_PATH) end def save_raw_usage_data(usage_data) |