Module: CloseYourIt

Defined in:
lib/closeyourit-ruby.rb,
lib/closeyourit/event.rb,
lib/closeyourit/scope.rb,
lib/closeyourit/client.rb,
lib/closeyourit/monitor.rb,
lib/closeyourit/version.rb,
lib/closeyourit/scrubber.rb,
lib/closeyourit/transport.rb,
lib/closeyourit/breadcrumb.rb,
lib/closeyourit/instrumenter.rb,
lib/closeyourit/configuration.rb,
lib/closeyourit/rails/railtie.rb,
lib/closeyourit/background_worker.rb,
lib/closeyourit/breadcrumb_buffer.rb,
lib/closeyourit/events/error_event.rb,
lib/closeyourit/rails/query_source.rb,
lib/closeyourit/events/message_event.rb,
lib/closeyourit/rails/request_context.rb,
lib/closeyourit/sidekiq/error_handler.rb,
lib/closeyourit/rails/error_subscriber.rb,
lib/closeyourit/subscribers/slow_query.rb,
lib/closeyourit/events/slow_query_event.rb,
lib/closeyourit/events/slow_method_event.rb,
lib/closeyourit/rails/capture_exceptions.rb,
lib/closeyourit/rails/active_job_extension.rb

Overview

CloseYourIt — client di telemetria (errori + statistiche di query/metodi lenti) che invia gli eventi all’endpoint di ingest di CloseYourIt.

Entry point della gemma (file con trattino come ‘sentry-ruby`): `require “closeyourit-ruby”` carica il modulo `CloseYourIt`.

Defined Under Namespace

Modules: Instrumenter, Monitor, Rails, Sidekiq, Subscribers Classes: BackgroundWorker, Breadcrumb, BreadcrumbBuffer, Client, Configuration, Error, ErrorEvent, Event, MessageEvent, Scope, Scrubber, SlowMethodEvent, SlowQueryEvent, Transport

Constant Summary collapse

CAPTURED_FLAG =
:@__closeyourit_captured
VERSION =
"0.2.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject



141
142
143
# File 'lib/closeyourit-ruby.rb', line 141

def logger
  @logger ||= default_logger
end

Class Method Details

.add_breadcrumb(message: nil, category: nil, type: "default", level: "info", data: {}) ⇒ Object

Aggiunge una briciola di contesto (query, navigazione, evento custom) all’evento corrente. No-op se breadcrumbs disabilitati; ‘data` viene scrubato (denylist) prima di essere salvato.



132
133
134
135
136
137
138
139
# File 'lib/closeyourit-ruby.rb', line 132

def add_breadcrumb(message: nil, category: nil, type: "default", level: "info", data: {})
  return nil unless configuration.breadcrumbs_enabled

  scrubbed = data.nil? || data.empty? ? data : Scrubber.new(configuration).filter_params(data)
  Scope.current.add_breadcrumb(
    Breadcrumb.new(message: message, category: category, type: type, level: level, data: scrubbed)
  )
end

.capture_event(event) ⇒ Object

Spedisce un evento già costruito (slow_query/slow_method).



77
78
79
80
81
# File 'lib/closeyourit-ruby.rb', line 77

def capture_event(event)
  return nil unless enabled?

  client.capture_event(event)
end

.capture_exception(exception, handled: false, level: "error", contexts: nil) ⇒ Object

Cattura un’eccezione e la spedisce (fire-and-forget). No-op se disabilitato, se l’eccezione è esclusa o già catturata.



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/closeyourit-ruby.rb', line 62

def capture_exception(exception, handled: false, level: "error", contexts: nil)
  return nil unless enabled?
  return nil if ignored_exception?(exception)
  return nil if exception_captured?(exception)

  mark_captured(exception)
  return nil unless sampled?

  event = ErrorEvent.from_exception(
    exception, configuration: configuration, handled: handled, level: level, contexts: contexts
  )
  client.capture_event(event)
end

.capture_message(message, level: "info") ⇒ Object

Invia un messaggio diagnostico esplicito (non un’eccezione). Soggetto a sampling + scope.

CloseYourIt.capture_message("cache miss storm", level: "warning")


85
86
87
88
89
90
91
# File 'lib/closeyourit-ruby.rb', line 85

def capture_message(message, level: "info")
  return nil unless enabled?
  return nil unless sampled?

  event = MessageEvent.new(message, level: level, configuration: configuration)
  client.capture_event(event)
end

.clear_scopeObject



126
127
128
# File 'lib/closeyourit-ruby.rb', line 126

def clear_scope
  Scope.reset!
end

.configurationObject



48
49
50
# File 'lib/closeyourit-ruby.rb', line 48

def configuration
  @configuration ||= Configuration.new
end

.configure_scope {|Scope.current| ... } ⇒ Object

Yields:



122
123
124
# File 'lib/closeyourit-ruby.rb', line 122

def configure_scope
  yield(Scope.current) if block_given?
end

.configured?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/closeyourit-ruby.rb', line 52

def configured?
  !@configuration.nil?
end

.enabled?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/closeyourit-ruby.rb', line 56

def enabled?
  configuration.enabled?
end

.init {|@configuration| ... } ⇒ Object

Configura il client. Senza token/endpoint → no-op.

Yields:



40
41
42
43
44
45
46
# File 'lib/closeyourit-ruby.rb', line 40

def init
  @configuration = Configuration.new
  @client = nil
  yield(@configuration) if block_given?
  @configuration.validate!
  @configuration
end

.measure(label, &block) ⇒ Object

Cronometra un blocco e invia un slow_method se supera la soglia.

CloseYourIt.measure("checkout.total") { ... }


95
96
97
# File 'lib/closeyourit-ruby.rb', line 95

def measure(label, &block)
  Instrumenter.measure(label, &block)
end

.set_context(key, attributes) ⇒ Object



114
115
116
# File 'lib/closeyourit-ruby.rb', line 114

def set_context(key, attributes)
  Scope.current.set_context(key, attributes)
end

.set_extra(key, value) ⇒ Object



118
119
120
# File 'lib/closeyourit-ruby.rb', line 118

def set_extra(key, value)
  Scope.current.set_extra(key, value)
end

.set_tag(key, value) ⇒ Object



106
107
108
# File 'lib/closeyourit-ruby.rb', line 106

def set_tag(key, value)
  Scope.current.set_tag(key, value)
end

.set_tags(attributes) ⇒ Object



110
111
112
# File 'lib/closeyourit-ruby.rb', line 110

def set_tags(attributes)
  Scope.current.set_tags(attributes)
end

.set_user(attributes) ⇒ Object

— Scope per-richiesta/job (user/tags/extra/contexts) — Arricchiscono l’evento corrente; resettati a fine richiesta/job da middleware e estensioni.



102
103
104
# File 'lib/closeyourit-ruby.rb', line 102

def set_user(attributes)
  Scope.current.set_user(attributes)
end