Module: Salopulse::RequestContext
- Defined in:
- lib/salopulse/request_context.rb
Constant Summary collapse
- KEY =
:salopulse_request_context- SUPPRESS_KEY =
:salopulse_suppressed
Class Method Summary collapse
- .active? ⇒ Boolean
- .clear ⇒ Object
- .current ⇒ Object
- .elapsed_ms ⇒ Object
- .monotonic_now ⇒ Object
- .record_sql_event(event, fingerprint) ⇒ Object
- .set_tag(key, value) ⇒ Object
- .set_user(attrs) ⇒ Object
- .start(endpoint:, http_method:, source: :http, request_id: nil, parent_request_id: nil) ⇒ Object
- .suppressed? ⇒ Boolean
- .with_suppression ⇒ Object
Class Method Details
.active? ⇒ Boolean
30 31 32 |
# File 'lib/salopulse/request_context.rb', line 30 def active? !current.nil? end |
.clear ⇒ Object
34 35 36 |
# File 'lib/salopulse/request_context.rb', line 34 def clear Thread.current[KEY] = nil end |
.current ⇒ Object
26 27 28 |
# File 'lib/salopulse/request_context.rb', line 26 def current Thread.current[KEY] end |
.elapsed_ms ⇒ Object
54 55 56 57 |
# File 'lib/salopulse/request_context.rb', line 54 def elapsed_ms return 0 unless current ((monotonic_now - current[:started_at]) * 1000).to_i end |
.monotonic_now ⇒ Object
74 75 76 |
# File 'lib/salopulse/request_context.rb', line 74 def monotonic_now Process.clock_gettime(Process::CLOCK_MONOTONIC) end |
.record_sql_event(event, fingerprint) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/salopulse/request_context.rb', line 46 def record_sql_event(event, fingerprint) ctx = current return false unless ctx ctx[:sql_events] << [event, fingerprint] ctx[:sql_fingerprint_counts][fingerprint] += 1 true end |
.set_tag(key, value) ⇒ Object
42 43 44 |
# File 'lib/salopulse/request_context.rb', line 42 def set_tag(key, value) current[:tags][key] = value if current end |
.set_user(attrs) ⇒ Object
38 39 40 |
# File 'lib/salopulse/request_context.rb', line 38 def set_user(attrs) current[:user] = attrs if current end |
.start(endpoint:, http_method:, source: :http, request_id: nil, parent_request_id: nil) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/salopulse/request_context.rb', line 10 def start(endpoint:, http_method:, source: :http, request_id: nil, parent_request_id: nil) Thread.current[KEY] = { request_id: request_id || SecureRandom.uuid, parent_request_id: parent_request_id, endpoint: endpoint, http_method: http_method, source: source, sql_events: [], sql_fingerprint_counts: Hash.new(0), started_at: monotonic_now, user: nil, tags: {}, suppressed: false } end |
.suppressed? ⇒ Boolean
59 60 61 |
# File 'lib/salopulse/request_context.rb', line 59 def suppressed? Thread.current[SUPPRESS_KEY] == true end |
.with_suppression ⇒ Object
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/salopulse/request_context.rb', line 63 def with_suppression previous_ctx = Thread.current[KEY] previous_suppress = Thread.current[SUPPRESS_KEY] Thread.current[KEY] = nil Thread.current[SUPPRESS_KEY] = true yield ensure Thread.current[KEY] = previous_ctx Thread.current[SUPPRESS_KEY] = previous_suppress end |