Module: Lapsoss

Defined in:
lib/lapsoss.rb,
lib/lapsoss/event.rb,
lib/lapsoss/scope.rb,
lib/lapsoss/client.rb,
lib/lapsoss/router.rb,
lib/lapsoss/current.rb,
lib/lapsoss/railtie.rb,
lib/lapsoss/version.rb,
lib/lapsoss/pipeline.rb,
lib/lapsoss/registry.rb,
lib/lapsoss/scrubber.rb,
lib/lapsoss/breadcrumb.rb,
lib/lapsoss/validators.rb,
lib/lapsoss/http_client.rb,
lib/lapsoss/merged_scope.rb,
lib/lapsoss/adapters/base.rb,
lib/lapsoss/configuration.rb,
lib/lapsoss/fingerprinter.rb,
lib/lapsoss/sampling/base.rb,
lib/lapsoss/backtrace_frame.rb,
lib/lapsoss/middleware/base.rb,
lib/lapsoss/release_tracker.rb,
lib/lapsoss/runtime_context.rb,
lib/lapsoss/exclusion_filter.rb,
lib/lapsoss/pipeline_builder.rb,
lib/lapsoss/backtrace_processor.rb,
lib/lapsoss/adapters/otlp_adapter.rb,
lib/lapsoss/sampling/rate_limiter.rb,
lib/lapsoss/rails_error_subscriber.rb,
lib/lapsoss/rails_event_subscriber.rb,
lib/lapsoss/adapters/logger_adapter.rb,
lib/lapsoss/adapters/sentry_adapter.rb,
lib/lapsoss/backtrace_frame_factory.rb,
lib/lapsoss/middleware/rate_limiter.rb,
lib/lapsoss/adapters/bugsnag_adapter.rb,
lib/lapsoss/adapters/rollbar_adapter.rb,
lib/lapsoss/middleware/sample_filter.rb,
lib/lapsoss/rails_controller_context.rb,
lib/lapsoss/sampling/uniform_sampler.rb,
lib/lapsoss/adapters/telebugs_adapter.rb,
lib/lapsoss/exception_backtrace_frame.rb,
lib/lapsoss/middleware/event_enricher.rb,
lib/lapsoss/adapters/appsignal_adapter.rb,
lib/lapsoss/middleware/release_tracker.rb,
lib/lapsoss/middleware/exception_filter.rb,
lib/lapsoss/adapters/insight_hub_adapter.rb,
lib/lapsoss/adapters/openobserve_adapter.rb,
lib/lapsoss/middleware/event_transformer.rb,
lib/lapsoss/middleware/metrics_collector.rb,
lib/lapsoss/rails_controller_transaction.rb,
lib/lapsoss/middleware/conditional_filter.rb,
lib/lapsoss/adapters/concerns/http_delivery.rb,
lib/lapsoss/adapters/concerns/level_mapping.rb,
lib/lapsoss/adapters/concerns/trace_context.rb,
lib/lapsoss/middleware/user_context_enhancer.rb,
lib/lapsoss/adapters/concerns/envelope_builder.rb,
lib/lapsoss/adapters/concerns/stacktrace_builder.rb

Defined Under Namespace

Modules: Adapters, Breadcrumb, Middleware, RailsControllerContext, RailsControllerTransaction, Sampling, Validators Classes: BacktraceFrame, BacktraceFrameFactory, BacktraceProcessor, Client, Configuration, Current, DeliveryError, Error, Event, ExceptionBacktraceFrame, ExclusionFilter, Fingerprinter, HttpClient, MergedScope, Pipeline, PipelineBuilder, RailsErrorSubscriber, RailsEventSubscriber, Railtie, Registry, ReleaseTracker, Router, RuntimeContext, Scope, Scrubber

Constant Summary collapse

VERSION =
"1.0.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.clientObject (readonly)

Returns the value of attribute client.



26
27
28
# File 'lib/lapsoss.rb', line 26

def client
  @client
end

Class Method Details

.add_breadcrumb(message, type: :default, **metadata) ⇒ Object



86
87
88
# File 'lib/lapsoss.rb', line 86

def add_breadcrumb(message, type: :default, **)
  client.add_breadcrumb(message, type: type, **)
end

.call_error_handler(adapter:, event:, error:) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/lapsoss.rb', line 100

def call_error_handler(adapter:, event:, error:)
  handler = configuration.error_handler
  return unless handler

  case handler.arity
  when 3
    handler.call(adapter, event, error)
  when 2
    handler.call(event, error)
  when 1, 0, -1
    handler.call(error)
  else
    handler.call(adapter, event, error)
  end
rescue => handler_error
  configuration.logger&.error("[LAPSOSS] Error handler failed: #{handler_error.message}")
end

.capture_exception(exception, **context) ⇒ Object



39
40
41
42
43
# File 'lib/lapsoss.rb', line 39

def capture_exception(exception, **context)
  configuration.logger.debug "[LAPSOSS] capture_exception called for #{exception.class}"
  return unless client
  client.capture_exception(exception, **context)
end

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



45
46
47
# File 'lib/lapsoss.rb', line 45

def capture_message(message, level: :info, **context)
  client.capture_message(message, level: level, **context)
end

.configurationObject



28
29
30
# File 'lib/lapsoss.rb', line 28

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



32
33
34
35
36
37
# File 'lib/lapsoss.rb', line 32

def configure
  yield(configuration)
  configuration.validate!
  configuration.apply!
  @client = Client.new(configuration)
end

.flush(timeout: 2) ⇒ Object



96
97
98
# File 'lib/lapsoss.rb', line 96

def flush(timeout: 2)
  client.flush(timeout: timeout)
end

.handle(error_class = StandardError, fallback: nil, **context) ⇒ Object

Handle errors and swallow them (like Rails.error.handle)



52
53
54
55
56
57
# File 'lib/lapsoss.rb', line 52

def handle(error_class = StandardError, fallback: nil, **context)
  yield
rescue error_class => e
  capture_exception(e, **context.merge(handled: true))
  fallback.respond_to?(:call) ? fallback.call : fallback
end

.record(error_class = StandardError, **context) ⇒ Object

Record errors and re-raise them (like Rails.error.record)



60
61
62
63
64
65
# File 'lib/lapsoss.rb', line 60

def record(error_class = StandardError, **context)
  yield
rescue error_class => e
  capture_exception(e, **context.merge(handled: false))
  raise
end

.report(exception, handled: true, **context) ⇒ Object

Report an error manually (like Rails.error.report)



68
69
70
# File 'lib/lapsoss.rb', line 68

def report(exception, handled: true, **context)
  capture_exception(exception, **context.merge(handled: handled))
end

.silenceObject

Suppress all event capture for the duration of the block (thread-local). Breadcrumbs and scope still accumulate; only delivery is skipped.



74
75
76
77
78
79
80
# File 'lib/lapsoss.rb', line 74

def silence
  previous = Current.silenced
  Current.silenced = true
  yield
ensure
  Current.silenced = previous
end

.silenced?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/lapsoss.rb', line 82

def silenced?
  Current.silenced
end

.with_scope(context = {}) ⇒ Object



90
91
92
# File 'lib/lapsoss.rb', line 90

def with_scope(context = {}, &)
  client.with_scope(context, &)
end