Module: Bitfab
- Defined in:
- lib/bitfab.rb,
lib/bitfab/client.rb,
lib/bitfab/replay.rb,
lib/bitfab/version.rb,
lib/bitfab/constants.rb,
lib/bitfab/serialize.rb,
lib/bitfab/traceable.rb,
lib/bitfab/http_client.rb,
lib/bitfab/span_context.rb
Defined Under Namespace
Modules: Replay, ReplayContext, Serialize, SpanContext, TraceState, Traceable Classes: BitfabFunction, Client, CurrentSpan, CurrentTrace, HttpClient, NoOpCurrentSpan, NoOpCurrentTrace
Constant Summary collapse
- NO_OP_SPAN =
NoOpCurrentSpan.new.freeze
- NO_OP_TRACE =
NoOpCurrentTrace.new.freeze
- MOCK_STRATEGIES =
Replay mock strategies. Mirrors the Python and TypeScript SDKs.
-
“none” — every child span runs real code (default)
-
“all” — every child span returns its historical output
-
“marked” — only spans declared with mock_on_replay: true return historical
output; everything else runs real code
-
%w[none all marked].freeze
- VERSION =
"0.12.0"- DEFAULT_SERVICE_URL =
"https://bitfab.ai"- REPLAY_CONTEXT_KEY =
:__bitfab_replay_context
Class Method Summary collapse
-
._run_in_background(&block) ⇒ Object
Run a block in a background thread with tracking.
-
.client ⇒ Object
Returns the global client, raising if not configured.
-
.configure(api_key:, service_url: nil, enabled: true) ⇒ Object
Configure the global Bitfab client.
-
.current_span ⇒ CurrentSpan, NoOpCurrentSpan
Get a handle to the current active span.
-
.current_trace ⇒ CurrentTrace, NoOpCurrentTrace
Get a handle to the current active trace.
-
.flush_traces(timeout: 30) ⇒ Object
Wait for all pending background threads to complete.
-
.reset! ⇒ Object
Reset the global client (primarily for testing).
Class Method Details
._run_in_background(&block) ⇒ Object
Run a block in a background thread with tracking. Returns the thread for callers that need to join on it.
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/bitfab/http_client.rb', line 178 def _run_in_background(&block) thread = Thread.new do block.call rescue => e begin warn "Bitfab: Failed to send request: #{e.}" rescue # Never crash the host app end ensure @pending_threads_mutex.synchronize { @pending_threads.delete(Thread.current) } end @pending_threads_mutex.synchronize { @pending_threads << thread } thread end |
.client ⇒ Object
Returns the global client, raising if not configured.
62 63 64 |
# File 'lib/bitfab.rb', line 62 def client @client or raise "Bitfab not configured. Call Bitfab.configure(api_key: '...') first." end |
.configure(api_key:, service_url: nil, enabled: true) ⇒ Object
Configure the global Bitfab client.
57 58 59 |
# File 'lib/bitfab.rb', line 57 def configure(api_key:, service_url: nil, enabled: true) @client = Client.new(api_key:, service_url:, enabled:) end |
.current_span ⇒ CurrentSpan, NoOpCurrentSpan
Get a handle to the current active span.
Call this from inside a traced method to get a span handle that allows setting metadata at runtime.
77 78 79 80 81 82 |
# File 'lib/bitfab.rb', line 77 def current_span entry = SpanContext.current return NO_OP_SPAN unless entry CurrentSpan.new(entry) end |
.current_trace ⇒ CurrentTrace, NoOpCurrentTrace
Get a handle to the current active trace.
Call this from inside a traced method to get a trace handle that allows setting trace-level context at runtime.
90 91 92 93 94 95 |
# File 'lib/bitfab.rb', line 90 def current_trace entry = SpanContext.current return NO_OP_TRACE unless entry CurrentTrace.new(entry[:trace_id]) end |
.flush_traces(timeout: 30) ⇒ Object
Wait for all pending background threads to complete.
196 197 198 199 |
# File 'lib/bitfab/http_client.rb', line 196 def flush_traces(timeout: 30) threads = @pending_threads_mutex.synchronize { @pending_threads.dup } threads.each { |t| t.join(timeout) } end |
.reset! ⇒ Object
Reset the global client (primarily for testing).
67 68 69 |
# File 'lib/bitfab.rb', line 67 def reset! @client = nil end |