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/line_cache.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/request_body.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, LineCache, 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.4.0"
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.
156 157 158 |
# File 'lib/closeyourit-ruby.rb', line 156 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.
145 146 147 148 149 150 151 152 |
# File 'lib/closeyourit-ruby.rb', line 145 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).
90 91 92 93 94 |
# File 'lib/closeyourit-ruby.rb', line 90 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.
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/closeyourit-ruby.rb', line 75 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")
98 99 100 101 102 103 104 |
# File 'lib/closeyourit-ruby.rb', line 98 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
139 140 141 |
# File 'lib/closeyourit-ruby.rb', line 139 def clear_scope Scope.reset! end |
.configuration ⇒ Object
61 62 63 |
# File 'lib/closeyourit-ruby.rb', line 61 def configuration @configuration ||= Configuration.new end |
.configure_scope {|Scope.current| ... } ⇒ Object
135 136 137 |
# File 'lib/closeyourit-ruby.rb', line 135 def configure_scope yield(Scope.current) if block_given? end |
.configured? ⇒ Boolean
65 66 67 |
# File 'lib/closeyourit-ruby.rb', line 65 def configured? !@configuration.nil? end |
.enabled? ⇒ Boolean
69 70 71 |
# File 'lib/closeyourit-ruby.rb', line 69 def enabled? configuration.enabled? end |
.flush_logs ⇒ Object
Forza l'invio dei log bufferizzati (chiamato anche allo shutdown del processo).
190 191 192 193 |
# File 'lib/closeyourit-ruby.rb', line 190 def flush_logs @log_buffer&.flush nil end |
.init {|@configuration| ... } ⇒ Object
Configura il client. Senza token/endpoint → no-op.
51 52 53 54 55 56 57 58 59 |
# File 'lib/closeyourit-ruby.rb', line 51 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)
173 174 175 176 177 178 179 180 181 |
# File 'lib/closeyourit-ruby.rb', line 173 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)
164 165 166 |
# File 'lib/closeyourit-ruby.rb', line 164 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.
185 186 187 |
# File 'lib/closeyourit-ruby.rb', line 185 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") { ... }
108 109 110 |
# File 'lib/closeyourit-ruby.rb', line 108 def measure(label, &block) Instrumenter.measure(label, &block) end |
.set_context(key, attributes) ⇒ Object
127 128 129 |
# File 'lib/closeyourit-ruby.rb', line 127 def set_context(key, attributes) Scope.current.set_context(key, attributes) end |
.set_extra(key, value) ⇒ Object
131 132 133 |
# File 'lib/closeyourit-ruby.rb', line 131 def set_extra(key, value) Scope.current.set_extra(key, value) end |
.set_tag(key, value) ⇒ Object
119 120 121 |
# File 'lib/closeyourit-ruby.rb', line 119 def set_tag(key, value) Scope.current.set_tag(key, value) end |
.set_tags(attributes) ⇒ Object
123 124 125 |
# File 'lib/closeyourit-ruby.rb', line 123 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.
115 116 117 |
# File 'lib/closeyourit-ruby.rb', line 115 def set_user(attributes) Scope.current.set_user(attributes) end |