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 'lib/gitlab/error_tracking/error_repository/active_record_strategy.rb')
-rw-r--r--lib/gitlab/error_tracking/error_repository/active_record_strategy.rb117
1 files changed, 0 insertions, 117 deletions
diff --git a/lib/gitlab/error_tracking/error_repository/active_record_strategy.rb b/lib/gitlab/error_tracking/error_repository/active_record_strategy.rb
deleted file mode 100644
index 01e7fbda384..00000000000
--- a/lib/gitlab/error_tracking/error_repository/active_record_strategy.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module ErrorTracking
- class ErrorRepository
- class ActiveRecordStrategy
- def initialize(project)
- @project = project
- end
-
- def report_error(
- name:, description:, actor:, platform:,
- environment:, level:, occurred_at:, payload:
- )
- error = project_errors.report_error(
- name: name, # Example: ActionView::MissingTemplate
- description: description, # Example: Missing template posts/show in...
- actor: actor, # Example: PostsController#show
- platform: platform, # Example: ruby
- timestamp: occurred_at
- )
-
- # The payload field contains all the data on error including stacktrace in jsonb.
- # Together with occurred_at these are 2 main attributes that we need to save here.
- error.events.create!(
- environment: environment,
- description: description,
- level: level,
- occurred_at: occurred_at,
- payload: payload
- )
- rescue ActiveRecord::ActiveRecordError => e
- handle_exceptions(e)
- end
-
- def find_error(id)
- project_error(id).to_sentry_detailed_error
- rescue ActiveRecord::ActiveRecordError => e
- handle_exceptions(e)
- end
-
- def list_errors(filters:, query:, sort:, limit:, cursor:)
- errors = project_errors
- errors = filter_by_status(errors, filters[:status])
- errors = sort(errors, sort)
- errors = errors.keyset_paginate(cursor: cursor, per_page: limit)
- # query is not supported
-
- pagination = ErrorRepository::Pagination.new(errors.cursor_for_next_page, errors.cursor_for_previous_page)
-
- [errors.map(&:to_sentry_error), pagination]
- end
-
- def last_event_for(id)
- project_error(id).last_event&.to_sentry_error_event
- rescue ActiveRecord::ActiveRecordError => e
- handle_exceptions(e)
- end
-
- def update_error(id, **attributes)
- project_error(id).update(attributes)
- end
-
- def dsn_url(public_key)
- gitlab = Settings.gitlab
-
- custom_port = Settings.gitlab_on_standard_port? ? nil : ":#{gitlab.port}"
-
- base_url = [
- gitlab.protocol,
- "://",
- public_key,
- '@',
- gitlab.host,
- custom_port,
- gitlab.relative_url_root
- ].join('')
-
- "#{base_url}/api/v4/error_tracking/collector/#{project.id}"
- end
-
- private
-
- attr_reader :project
-
- def project_errors
- ::ErrorTracking::Error.where(project: project) # rubocop:disable CodeReuse/ActiveRecord
- end
-
- def project_error(id)
- project_errors.find(id)
- end
-
- def filter_by_status(errors, status)
- return errors unless ::ErrorTracking::Error.statuses.key?(status)
-
- errors.for_status(status)
- end
-
- def sort(errors, sort)
- return errors.order_id_desc unless sort
-
- errors.sort_by_attribute(sort)
- end
-
- def handle_exceptions(exception)
- case exception
- when ActiveRecord::RecordInvalid
- raise RecordInvalidError, exception.message
- else
- raise DatabaseError, exception.message
- end
- end
- end
- end
- end
-end