Module: CloseYourIt
- Defined in:
- lib/closeyourit-ruby.rb,
lib/closeyourit/event.rb,
lib/closeyourit/scope.rb,
lib/closeyourit/stats.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/log_buffer.rb,
lib/closeyourit/log_device.rb,
lib/closeyourit/instrumenter.rb,
lib/closeyourit/configuration.rb,
lib/closeyourit/rails/railtie.rb,
lib/closeyourit/events/log_event.rb,
lib/closeyourit/background_worker.rb,
lib/closeyourit/breadcrumb_buffer.rb,
lib/closeyourit/events/error_event.rb,
lib/closeyourit/performance/rollup.rb,
lib/closeyourit/rails/query_source.rb,
lib/closeyourit/rails/log_broadcast.rb,
lib/closeyourit/events/message_event.rb,
lib/closeyourit/rails/net_http_patch.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,
lib/closeyourit/performance/request_profile.rb,
lib/closeyourit/events/performance_issue_event.rb,
lib/closeyourit/subscribers/request_performance.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, Performance, Rails, Sidekiq, Subscribers Classes: BackgroundWorker, Breadcrumb, BreadcrumbBuffer, Client, Configuration, Error, ErrorEvent, Event, LogBuffer, LogDevice, LogEvent, MessageEvent, PerformanceIssueEvent, Scope, Scrubber, SlowMethodEvent, SlowQueryEvent, Stats, Transport
Constant Summary collapse
- CAPTURED_FLAG =
:@__closeyourit_captured- VERSION =
"0.3.4"
Class Attribute Summary collapse
-
.internal_logger ⇒ Object
Logger interno della gemma (warning/errori diagnostici su stdout).
Class Method Summary collapse
-
.add_breadcrumb(message: nil, category: nil, type: "default", level: "info", data: {}) ⇒ Object
Aggiunge una briciola di contesto (query, navigazione, evento custom) all'evento corrente.
-
.capture_event(event) ⇒ Object
Spedisce un evento già costruito (slow_query/slow_method).
-
.capture_exception(exception, handled: false, level: "error", contexts: nil) ⇒ Object
Cattura un'eccezione e la spedisce (fire-and-forget).
-
.capture_message(message, level: "info") ⇒ Object
Invia un messaggio diagnostico esplicito (non un'eccezione).
- .clear_scope ⇒ Object
- .configuration ⇒ Object
- .configure_scope {|Scope.current| ... } ⇒ Object
- .configured? ⇒ Boolean
- .enabled? ⇒ Boolean
-
.flush_logs ⇒ Object
Forza l'invio dei log bufferizzati (chiamato anche allo shutdown del processo).
-
.init {|@configuration| ... } ⇒ Object
Configura il client.
-
.log(level, message, logger: nil, **attributes) ⇒ Object
Costruisce e bufferizza una voce di log strutturata (batch verso /logs, fire-and-forget).
-
.logger ⇒ Object
Logger applicativo Logger-compatibile: inoltra ogni messaggio a
CloseYourIt.log(→ ingest /logs). -
.logs_active? ⇒ Boolean
Vero se i log sono attivi (master switch + flag): usato da LogDevice per NON valutare i block costosi (
logger.debug { dump }) quando il logging è spento. -
.measure(label, &block) ⇒ Object
Cronometra un blocco e invia un slow_method se supera la soglia.
- .set_context(key, attributes) ⇒ Object
- .set_extra(key, value) ⇒ Object
- .set_tag(key, value) ⇒ Object
- .set_tags(attributes) ⇒ Object
-
.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.
-
.stats ⇒ Object
Contatori diagnostici del client (accodati/scartati/spediti/falliti).
Class Attribute Details
.internal_logger ⇒ Object
Logger interno della gemma (warning/errori diagnostici su stdout). NON è il logging applicativo:
per spedire log strutturati a CloseYourIt usa CloseYourIt.log / CloseYourIt.logger.
155 156 157 |
# File 'lib/closeyourit-ruby.rb', line 155 def internal_logger @internal_logger ||= default_internal_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.
144 145 146 147 148 149 150 151 |
# File 'lib/closeyourit-ruby.rb', line 144 def (message: nil, category: nil, type: "default", level: "info", data: {}) return nil unless configuration. scrubbed = data.nil? || data.empty? ? data : Scrubber.new(configuration).filter_params(data) Scope.current.( Breadcrumb.new(message: , category: category, type: type, level: level, data: scrubbed) ) end |
.capture_event(event) ⇒ Object
Spedisce un evento già costruito (slow_query/slow_method).
89 90 91 92 93 |
# File 'lib/closeyourit-ruby.rb', line 89 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.
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/closeyourit-ruby.rb', line 74 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")
97 98 99 100 101 102 103 |
# File 'lib/closeyourit-ruby.rb', line 97 def (, level: "info") return nil unless enabled? return nil unless sampled? event = MessageEvent.new(, level: level, configuration: configuration) client.capture_event(event) end |
.clear_scope ⇒ Object
138 139 140 |
# File 'lib/closeyourit-ruby.rb', line 138 def clear_scope Scope.reset! end |
.configuration ⇒ Object
60 61 62 |
# File 'lib/closeyourit-ruby.rb', line 60 def configuration @configuration ||= Configuration.new end |
.configure_scope {|Scope.current| ... } ⇒ Object
134 135 136 |
# File 'lib/closeyourit-ruby.rb', line 134 def configure_scope yield(Scope.current) if block_given? end |
.configured? ⇒ Boolean
64 65 66 |
# File 'lib/closeyourit-ruby.rb', line 64 def configured? !@configuration.nil? end |
.enabled? ⇒ Boolean
68 69 70 |
# File 'lib/closeyourit-ruby.rb', line 68 def enabled? configuration.enabled? end |
.flush_logs ⇒ Object
Forza l'invio dei log bufferizzati (chiamato anche allo shutdown del processo).
189 190 191 192 |
# File 'lib/closeyourit-ruby.rb', line 189 def flush_logs @log_buffer&.flush nil end |
.init {|@configuration| ... } ⇒ Object
Configura il client. Senza token/endpoint → no-op.
50 51 52 53 54 55 56 57 58 |
# File 'lib/closeyourit-ruby.rb', line 50 def init @configuration = Configuration.new @client = nil @log_buffer = nil yield(@configuration) if block_given? @configuration.validate! register_shutdown_flush @configuration end |
.log(level, message, logger: nil, **attributes) ⇒ Object
Costruisce e bufferizza una voce di log strutturata (batch verso /logs, fire-and-forget). Il
level è normalizzato ai livelli canonici (:warn→warning, downcase; ignoto→info). logger
opzionale = nome della sorgente del log.
CloseYourIt.log(:info, "ordine creato", order_id: 1)
CloseYourIt.log(:warn, "retry", logger: "payments", attempt: 3)
172 173 174 175 176 177 178 179 180 |
# File 'lib/closeyourit-ruby.rb', line 172 def log(level, , logger: nil, **attributes) return nil unless logs_enabled? return nil unless logs_sampled? event = LogEvent.new(, level: level, attributes: attributes, logger: logger, configuration: configuration) log_buffer.add(event) nil end |
.logger ⇒ Object
Logger applicativo Logger-compatibile: inoltra ogni messaggio a CloseYourIt.log (→ ingest /logs).
CloseYourIt.logger.info("ordine creato", order_id: 1)
163 164 165 |
# File 'lib/closeyourit-ruby.rb', line 163 def logger @app_logger ||= LogDevice.new end |
.logs_active? ⇒ Boolean
Vero se i log sono attivi (master switch + flag): usato da LogDevice per NON valutare i block
costosi (logger.debug { dump }) quando il logging è spento.
184 185 186 |
# File 'lib/closeyourit-ruby.rb', line 184 def logs_active? logs_enabled? end |
.measure(label, &block) ⇒ Object
Cronometra un blocco e invia un slow_method se supera la soglia. CloseYourIt.measure("checkout.total") { ... }
107 108 109 |
# File 'lib/closeyourit-ruby.rb', line 107 def measure(label, &block) Instrumenter.measure(label, &block) end |
.set_context(key, attributes) ⇒ Object
126 127 128 |
# File 'lib/closeyourit-ruby.rb', line 126 def set_context(key, attributes) Scope.current.set_context(key, attributes) end |
.set_extra(key, value) ⇒ Object
130 131 132 |
# File 'lib/closeyourit-ruby.rb', line 130 def set_extra(key, value) Scope.current.set_extra(key, value) end |
.set_tag(key, value) ⇒ Object
118 119 120 |
# File 'lib/closeyourit-ruby.rb', line 118 def set_tag(key, value) Scope.current.set_tag(key, value) end |
.set_tags(attributes) ⇒ Object
122 123 124 |
# File 'lib/closeyourit-ruby.rb', line 122 def (attributes) Scope.current.(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.
114 115 116 |
# File 'lib/closeyourit-ruby.rb', line 114 def set_user(attributes) Scope.current.set_user(attributes) end |