Class: LaunchDarklyObservability::Hook
- Inherits:
-
Object
- Object
- LaunchDarklyObservability::Hook
- Includes:
- LaunchDarkly::Interfaces::Hooks::Hook
- Defined in:
- lib/launchdarkly_observability/hook.rb
Overview
Evaluation hook that instruments LaunchDarkly flag evaluations with OpenTelemetry spans and events.
This hook creates spans for each flag evaluation, capturing:
-
Flag key and provider
-
Context information
-
Evaluation result (value, variation index)
-
Any errors
Additionally, a “feature_flag” event is added to the span with evaluation results, following the OpenTelemetry semantic conventions for feature flags and matching the pattern used by other LaunchDarkly observability SDKs (Android, Node).
Constant Summary collapse
- TRACER_NAME =
'launchdarkly-ruby'- SPAN_NAME =
'evaluation'- FEATURE_FLAG_EVENT_NAME =
'feature_flag'
Instance Method Summary collapse
-
#after_evaluation(series_context, data, detail) ⇒ Hash
Called after flag evaluation.
-
#before_evaluation(series_context, data) ⇒ Hash
Called before flag evaluation.
- #metadata ⇒ LaunchDarkly::Interfaces::Hooks::Metadata
Instance Method Details
#after_evaluation(series_context, data, detail) ⇒ Hash
Called after flag evaluation. Completes the span with evaluation results and a “feature_flag” event.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/launchdarkly_observability/hook.rb', line 65 def after_evaluation(series_context, data, detail) span = data[:__ld_observability_span] return data unless span add_result_attributes(span, detail) handle_evaluation_error(span, detail) add_feature_flag_event(span, series_context, detail) span.finish data rescue StandardError => e warn "[LaunchDarklyObservability] Error in after_evaluation: #{e.}" span&.finish data end |
#before_evaluation(series_context, data) ⇒ Hash
Called before flag evaluation. Creates an OpenTelemetry span and captures initial context information.
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/launchdarkly_observability/hook.rb', line 45 def before_evaluation(series_context, data) return data unless opentelemetry_available? tracer = OpenTelemetry.tracer_provider.tracer(TRACER_NAME, LaunchDarklyObservability::VERSION) span = tracer.start_span(SPAN_NAME, attributes: build_before_attributes(series_context)) data.merge(__ld_observability_span: span) rescue StandardError => e warn "[LaunchDarklyObservability] Error in before_evaluation: #{e.}" data end |
#metadata ⇒ LaunchDarkly::Interfaces::Hooks::Metadata
35 36 37 |
# File 'lib/launchdarkly_observability/hook.rb', line 35 def LaunchDarkly::Interfaces::Hooks::Metadata.new('launchdarkly-observability-hook') end |