Skip to content

Commit d216be1

Browse files
committed
Add reporting to the evaluation
1 parent adbb064 commit d216be1

File tree

5 files changed

+27
-6
lines changed

5 files changed

+27
-6
lines changed

lib/datadog/open_feature/evaluation_engine.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ def fetch_value(flag_key:, expected_type:, evaluation_context: nil)
3636
# In the example from the OpenFeature there is zero trust to the result of the evaluation
3737
# do we want to go that way?
3838

39-
@evaluator.get_assignment(flag_key, evaluation_context, expected_type, Time.now.utc.to_i)
40-
# TODO: insert reporting here
39+
result = @evaluator.get_assignment(flag_key, evaluation_context, expected_type, Time.now.utc.to_i)
40+
@reporter.report(result, flag_key: flag_key, context: evaluation_context)
41+
42+
result
4143
rescue => e
4244
@telemetry.report(e, description: 'OpenFeature: Failed to fetch value for flag')
4345

lib/datadog/open_feature/exposures/reporter.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
module Datadog
77
module OpenFeature
88
module Exposures
9+
# This class is responsible for reporting exposures to the Agent
910
class Reporter
1011
def initialize(worker, telemetry:, logger: Datadog.logger)
1112
@worker = worker
@@ -16,6 +17,7 @@ def initialize(worker, telemetry:, logger: Datadog.logger)
1617

1718
def report(result, flag_key:, context:)
1819
return false unless result.do_log
20+
return false if context.nil?
1921

2022
event = Models::Event.build(result, flag_key: flag_key, context: context)
2123
return false if @deduplicator.duplicate?(event)

sig/datadog/open_feature/exposures/reporter.rbs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@ module Datadog
22
module OpenFeature
33
module Exposures
44
class Reporter
5+
@worker: Worker
6+
7+
@logger: Core::Logger
8+
9+
@telemetry: Core::Telemetry::Component
10+
11+
@deduplicator: Deduplicator
12+
513
def initialize: (Worker worker, telemetry: Core::Telemetry::Component, ?logger: Core::Logger) -> void
614

715
def report: (
816
Binding::ResolutionDetails result,
917
flag_key: ::String,
10-
context: ::OpenFeature::SDK::EvaluationContext
18+
context: ::OpenFeature::SDK::EvaluationContext?
1119
) -> bool
1220
end
1321
end

sig/datadog/open_feature/exposures/worker.rbs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ module Datadog
2222

2323
def stop: (?bool, ?::Integer) -> bool
2424

25-
def enqueue: (Exposures::Event) -> bool
25+
def enqueue: (Exposures::Models::Event event) -> bool
2626

27-
def dequeue: () -> [::Array[Exposures::Event], ::Integer]
27+
def dequeue: () -> [::Array[Exposures::Models::Event], ::Integer]
2828

2929
def flush: () -> void
3030

@@ -38,7 +38,7 @@ module Datadog
3838

3939
def perform: (*untyped) -> void
4040

41-
def send_events: (::Array[Exposures::Event], ::Integer) -> void
41+
def send_events: (::Array[Exposures::Models::Event], ::Integer) -> void
4242

4343
def send_payload: (::Hash[::Symbol, untyped]) -> Core::Transport::Response?
4444
end

spec/datadog/open_feature/exposures/reporter_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@
8787
expect(reporter.report(result, flag_key: 'feature_flag', context: context)).to be(false)
8888
end
8989
end
90+
91+
context 'when evaluation context is nil' do
92+
it 'skips enqueueing exposure' do
93+
expect(deduplicator).not_to receive(:duplicate?)
94+
expect(worker).not_to receive(:enqueue)
95+
96+
expect(reporter.report(result, flag_key: 'feature_flag', context: nil)).to be(false)
97+
end
98+
end
9099
end
91100
end
92101

0 commit comments

Comments
 (0)