diff options
Diffstat (limited to 'app/services/error_tracking')
-rw-r--r-- | app/services/error_tracking/collect_error_service.rb | 32 | ||||
-rw-r--r-- | app/services/error_tracking/list_issues_service.rb | 4 |
2 files changed, 31 insertions, 5 deletions
diff --git a/app/services/error_tracking/collect_error_service.rb b/app/services/error_tracking/collect_error_service.rb index bc1f238d81f..477453a693e 100644 --- a/app/services/error_tracking/collect_error_service.rb +++ b/app/services/error_tracking/collect_error_service.rb @@ -9,18 +9,18 @@ module ErrorTracking error = project.error_tracking_errors.report_error( name: exception['type'], # Example: ActionView::MissingTemplate description: exception['value'], # Example: Missing template posts/show in... - actor: event['transaction'], # Example: PostsController#show + actor: actor, # Example: PostsController#show platform: event['platform'], # Example: ruby - timestamp: event['timestamp'] + timestamp: timestamp ) # The payload field contains all the data on error including stacktrace in jsonb. # Together with occured_at these are 2 main attributes that we need to save here. error.events.create!( environment: event['environment'], - description: exception['type'], + description: exception['value'], level: event['level'], - occurred_at: event['timestamp'], + occurred_at: timestamp, payload: event ) end @@ -34,5 +34,29 @@ module ErrorTracking def exception event['exception']['values'].first end + + def actor + return event['transaction'] if event['transaction'] + + # Some SDK do not have transaction attribute. + # So we build it by combining function name and module name from + # the last item in stacktrace. + last_line = exception.dig('stacktrace', 'frames').last + + "#{last_line['function']}(#{last_line['module']})" + end + + def timestamp + return @timestamp if @timestamp + + @timestamp = (event['timestamp'] || Time.zone.now) + + # Some SDK send timestamp in numeric format like '1630945472.13'. + if @timestamp.to_s =~ /\A\d+(\.\d+)?\z/ + @timestamp = Time.zone.at(@timestamp.to_f) + end + + @timestamp + end end end diff --git a/app/services/error_tracking/list_issues_service.rb b/app/services/error_tracking/list_issues_service.rb index 5ddba748fd4..86c7791e759 100644 --- a/app/services/error_tracking/list_issues_service.rb +++ b/app/services/error_tracking/list_issues_service.rb @@ -74,7 +74,9 @@ module ErrorTracking # We are going to support more options in the future. # For now we implement the bare minimum for rendering the list in UI. filter_opts = { - status: opts[:issue_status] + status: opts[:issue_status], + sort: opts[:sort], + limit: opts[:limit] } errors = ErrorTracking::ErrorsFinder.new(current_user, project, filter_opts).execute |