diff options
Diffstat (limited to 'app/models/error_tracking/error.rb')
-rw-r--r-- | app/models/error_tracking/error.rb | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/app/models/error_tracking/error.rb b/app/models/error_tracking/error.rb index 32932c4d045..39ecc487806 100644 --- a/app/models/error_tracking/error.rb +++ b/app/models/error_tracking/error.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class ErrorTracking::Error < ApplicationRecord + include Sortable + belongs_to :project has_many :events, class_name: 'ErrorTracking::ErrorEvent' @@ -22,11 +24,28 @@ class ErrorTracking::Error < ApplicationRecord def self.report_error(name:, description:, actor:, platform:, timestamp:) safe_find_or_create_by( name: name, - description: description, actor: actor, platform: platform - ) do |error| - error.update!(last_seen_at: timestamp) + ).tap do |error| + error.update!( + # Description can contain object id, so it can't be + # used as a group criteria for similar errors. + description: description, + last_seen_at: timestamp + ) + end + end + + def self.sort_by_attribute(method) + case method.to_s + when 'last_seen' + order(last_seen_at: :desc) + when 'first_seen' + order(first_seen_at: :desc) + when 'frequency' + order(events_count: :desc) + else + order_id_desc end end |