Module: BrainzLab::Reflex

Defined in:
lib/brainzlab/reflex.rb,
lib/brainzlab/reflex/client.rb,
lib/brainzlab/reflex/breadcrumbs.rb,
lib/brainzlab/reflex/provisioner.rb

Defined Under Namespace

Classes: Breadcrumbs, Client, Provisioner

Constant Summary collapse

FILTERED_PARAMS =
%w[password password_confirmation token api_key secret credit_card cvv ssn].freeze

Class Method Summary collapse

Class Method Details

.add_breadcrumb(message, category: 'default', level: :info, data: nil) ⇒ Object



46
47
48
# File 'lib/brainzlab/reflex/breadcrumbs.rb', line 46

def add_breadcrumb(message, category: 'default', level: :info, data: nil)
  breadcrumbs.add(message: message, category: category, level: level, data: data)
end


42
43
44
# File 'lib/brainzlab/reflex/breadcrumbs.rb', line 42

def breadcrumbs
  Context.current.breadcrumbs
end

.capture(exception, **context) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/brainzlab/reflex.rb', line 12

def capture(exception, **context)
  return unless enabled?
  return if capture_disabled?
  return if excluded?(exception)
  return if sampled_out?

  # Log debug output for the operation
  log_debug_capture(exception)

  payload = build_payload(exception, context)
  payload = run_before_send(payload, exception)
  return if payload.nil?

  # In development mode, log locally instead of sending to server
  if BrainzLab.configuration.development_mode?
    Development.record(service: :reflex, event_type: 'error', payload: payload)
    return
  end

  # Auto-provision project on first capture if app_name is configured
  ensure_provisioned!

  return unless BrainzLab.configuration.reflex_valid?

  client.send_error(payload)
end

.capture_message(message, level: :error, **context) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/brainzlab/reflex.rb', line 39

def capture_message(message, level: :error, **context)
  return unless enabled?
  return if capture_disabled?
  return if sampled_out?

  # Log debug output for the operation
  log_debug_message(message, level)

  payload = build_message_payload(message, level, context)
  payload = run_before_send(payload, nil)
  return if payload.nil?

  # In development mode, log locally instead of sending to server
  if BrainzLab.configuration.development_mode?
    Development.record(service: :reflex, event_type: 'message', payload: payload)
    return
  end

  # Auto-provision project on first capture if app_name is configured
  ensure_provisioned!

  return unless BrainzLab.configuration.reflex_valid?

  client.send_error(payload)
end

.clear_breadcrumbs!Object



50
51
52
# File 'lib/brainzlab/reflex/breadcrumbs.rb', line 50

def clear_breadcrumbs!
  breadcrumbs.clear!
end

.clientObject



85
86
87
# File 'lib/brainzlab/reflex.rb', line 85

def client
  @client ||= Client.new(BrainzLab.configuration)
end

.ensure_provisioned!Object



65
66
67
68
69
70
# File 'lib/brainzlab/reflex.rb', line 65

def ensure_provisioned!
  return if @provisioned

  @provisioned = true
  provisioner.ensure_project!
end

.provisionerObject



72
73
74
# File 'lib/brainzlab/reflex.rb', line 72

def provisioner
  @provisioner ||= Provisioner.new(BrainzLab.configuration)
end

.reset!Object



89
90
91
92
93
# File 'lib/brainzlab/reflex.rb', line 89

def reset!
  @client = nil
  @provisioner = nil
  @provisioned = false
end

.without_captureObject

Temporarily disable capture within a block



77
78
79
80
81
82
83
# File 'lib/brainzlab/reflex.rb', line 77

def without_capture
  previous = Thread.current[:brainzlab_capture_disabled]
  Thread.current[:brainzlab_capture_disabled] = true
  yield
ensure
  Thread.current[:brainzlab_capture_disabled] = previous
end