Class: Datadog::OpenFeature::Exposures::Reporter

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/open_feature/exposures/reporter.rb

Overview

This class is responsible for reporting exposures to the Agent

Instance Method Summary collapse

Constructor Details

#initialize(worker, telemetry:, logger:) ⇒ Reporter

Returns a new instance of Reporter.



11
12
13
14
15
16
# File 'lib/datadog/open_feature/exposures/reporter.rb', line 11

def initialize(worker, telemetry:, logger:)
  @worker = worker
  @logger = logger
  @telemetry = telemetry
  @deduplicator = Deduplicator.new
end

Instance Method Details

#report(result, flag_key:, context:) ⇒ Object

NOTE: Reporting expects evaluation context to be always present, but it

might be missing depending on the customer way of using flags evaluation API.
In addition to that the evaluation result must be marked for reporting.


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/datadog/open_feature/exposures/reporter.rb', line 21

def report(result, flag_key:, context:)
  return false if context.nil?
  return false unless result.log?

  key = Event.cache_key(result, flag_key: flag_key, context: context)
  value = Event.cache_value(result, flag_key: flag_key, context: context)
  return false if @deduplicator.duplicate?(key, value)

  event = Event.build(result, flag_key: flag_key, context: context)
  @worker.enqueue(event)
rescue => e
  @logger.debug { "OpenFeature: Failed to report resolution details: #{e.class}: #{e.message}" }
  @telemetry.report(e, description: 'OpenFeature: Failed to report resolution details')

  false
end