Sha256: f6fcb3332ada463da2918813b3c378ac07f7b04c9d9fb8f2b43c9171134855c3
Contents?: true
Size: 1.76 KB
Versions: 1
Compression:
Stored size: 1.76 KB
Contents
# frozen_string_literal: true module Bellman module Handlers # Handle Sentry logging class Sentry < BaseHandler OBJECT_KEYS = [:profile_id, 'profile_id'].freeze def initialize(sentry: nil) super() @sentry = sentry end # rubocop:disable Metrics/CyclomaticComplexity # rubocop:disable Metrics/ParameterLists # rubocop:disable Metrics/PerceivedComplexity def handle( error, severity: nil, trace_id: nil, objects: nil, data: nil, ** ) sentry.with_scope do |scope| scope.set_level(severity) set_sentry_context(scope, objects) if objects.present? if trace_id data ||= {} data[:trace_id] = trace_id end set_sentry_user_and_tags(scope, data) if data.present? error = '[EMPTY MESSAGE]' if error.nil? if error.respond_to?(:message) && error.respond_to?(:backtrace) sentry.capture_exception(error) else sentry.capture_message(error.to_s) end end end # rubocop:enable Metrics/CyclomaticComplexity # rubocop:enable Metrics/ParameterLists # rubocop:enable Metrics/PerceivedComplexity def sentry @sentry || ::Sentry end private def set_sentry_context(scope, objects) scope.set_context( objects: objects.map { |object| "#{object.class.name}|#{object.id}" } ) end def set_sentry_user_and_tags(scope, data) data = data.with_indifferent_access scope.set_user(id: data[:profile_id]) if data[:profile_id] data.each do |key, val| next if OBJECT_KEYS.include? key scope.send(:set_tags, **{ key => val }) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bellman-0.1.0 | lib/bellman/handlers/sentry.rb |