Class: Datadog::OpenFeature::Transport::HTTP

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

Defined Under Namespace

Classes: FlagevaluationsSpec, Spec

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(apis, default_api, logger:) ⇒ HTTP

Returns a new instance of HTTP.



79
80
81
82
# File 'lib/datadog/open_feature/transport.rb', line 79

def initialize(apis, default_api, logger:)
  @api = apis[default_api]
  @logger = logger
end

Class Method Details

.build(agent_settings:, logger:) ⇒ Object



64
65
66
67
68
69
# File 'lib/datadog/open_feature/transport.rb', line 64

def self.build(agent_settings:, logger:)
  Core::Transport::HTTP.build(
    agent_settings: agent_settings,
    logger: logger
  ) { |t| t.api("exposures", HTTP::Spec.new) }.to_transport(self)
end

.build_flagevaluations(agent_settings:, logger:) ⇒ Object

Build a transport instance for the flagevaluation EVP endpoint.



72
73
74
75
76
77
# File 'lib/datadog/open_feature/transport.rb', line 72

def self.build_flagevaluations(agent_settings:, logger:)
  Core::Transport::HTTP.build(
    agent_settings: agent_settings,
    logger: logger
  ) { |t| t.api("flagevaluations", HTTP::FlagevaluationsSpec.new) }.to_transport(self)
end

Instance Method Details

#send_exposures(payload) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/datadog/open_feature/transport.rb', line 84

def send_exposures(payload)
  encoder = Core::Encoding::JSONEncoder
  parcel = Core::Transport::Parcel.new(
    encoder.encode(payload),
    content_type: encoder.content_type
  )
  request = Core::Transport::Request.new(parcel)

  @api.endpoint.call(Core::Transport::HTTP::Env.new(request)) do |env|
    @api.call(env)
  end
rescue => e
  message = "Internal error during request. Cause: #{e.class}: #{e.message} " \
            "Location: #{Array(e.backtrace).first}"
  @logger.debug(message)

  Core::Transport::InternalErrorResponse.new(e)
end

#send_flag_evaluations(payload) ⇒ Object

POST a flag evaluations batch to /evp_proxy/v2/api/v2/flagevaluation. Mirrors send_exposures; uses the FlagevaluationsSpec endpoint.



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/datadog/open_feature/transport.rb', line 105

def send_flag_evaluations(payload)
  encoder = Core::Encoding::JSONEncoder
  parcel = Core::Transport::Parcel.new(
    encoder.encode(payload),
    content_type: encoder.content_type
  )
  request = Core::Transport::Request.new(parcel)

  @api.endpoint.call(Core::Transport::HTTP::Env.new(request)) do |env|
    @api.call(env)
  end
rescue => e
  message = "Internal error during request. Cause: #{e.class}: #{e.message} " \
            "Location: #{Array(e.backtrace).first}"
  @logger.debug(message)

  Core::Transport::InternalErrorResponse.new(e)
end