Skip to content

Commit 2fa179f

Browse files
committed
Reduce boilerplate in OpenFeature transport
1 parent f70b426 commit 2fa179f

File tree

18 files changed

+132
-377
lines changed

18 files changed

+132
-377
lines changed

Rakefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ CORE_WITH_LIBDATADOG_API = [
2828
'spec/datadog/core/configuration/stable_config_spec.rb',
2929
'spec/datadog/core/ddsketch_spec.rb',
3030
'spec/datadog/data_streams/**/*_spec.rb',
31+
'spec/datadog/open_feature_spec.rb',
3132
].freeze
3233

3334
# Data Streams Monitoring (DSM) requires libdatadog_api for DDSketch
@@ -91,7 +92,7 @@ namespace :spec do
9192
RSpec::Core::RakeTask.new(:main) do |t, args|
9293
t.pattern = 'spec/**/*_spec.rb'
9394
t.exclude_pattern = 'spec/**/{appsec/integration,contrib,benchmark,redis,auto_instrument,opentelemetry,open_feature,profiling,crashtracking,error_tracking,rubocop,data_streams}/**/*_spec.rb,' \
94-
' spec/**/{auto_instrument,opentelemetry,process_discovery,stable_config,ddsketch}_spec.rb,' \
95+
' spec/**/{auto_instrument,opentelemetry,process_discovery,stable_config,ddsketch,open_feature}_spec.rb,' \
9596
' spec/datadog/gem_packaging_spec.rb'
9697
t.rspec_opts = args.to_a.join(' ')
9798
end
@@ -135,7 +136,7 @@ namespace :spec do
135136

136137
desc '' # "Explicitly hiding from `rake -T`"
137138
RSpec::Core::RakeTask.new(:open_feature) do |t, args|
138-
t.pattern = 'spec/datadog/open_feature/**/*_spec.rb,spec/datadog/open_feature_spec.rb'
139+
t.pattern = 'spec/datadog/open_feature/**/*_spec.rb'
139140
t.rspec_opts = args.to_a.join(' ')
140141
end
141142

lib/datadog/open_feature/component.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# frozen_string_literal: true
22

3+
require_relative 'transport'
34
require_relative 'evaluation_engine'
45
require_relative 'exposures/buffer'
56
require_relative 'exposures/worker'
67
require_relative 'exposures/deduplicator'
78
require_relative 'exposures/reporter'
8-
require_relative 'transport/http'
99

1010
module Datadog
1111
module OpenFeature
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../core/transport/http'
4+
require_relative '../core/transport/http/env'
5+
require_relative '../core/transport/parcel'
6+
require_relative '../core/transport/request'
7+
8+
module Datadog
9+
module OpenFeature
10+
module Transport
11+
class EncodedParcel
12+
include Core::Transport::Parcel
13+
14+
def encode_with(encoder)
15+
encoder.encode(data)
16+
end
17+
end
18+
19+
class HTTP
20+
class Spec < Core::Transport::HTTP::API::Spec
21+
def initialize
22+
@endpoint = Core::Transport::HTTP::API::Endpoint.new(
23+
:post, '/evp_proxy/v2/api/v2/exposures'
24+
)
25+
26+
super
27+
end
28+
29+
def call(env, &block)
30+
@endpoint.call(env) do |request_env|
31+
request_env.headers['Content-Type'] = Core::Encoding::JSONEncoder.content_type
32+
request_env.headers['X-Datadog-EVP-Subdomain'] = 'event-platform-intake'
33+
request_env.body = env.request.parcel.encode_with(Core::Encoding::JSONEncoder)
34+
35+
block.call(request_env)
36+
end
37+
end
38+
end
39+
40+
class Instance < Core::Transport::HTTP::API::Instance
41+
def send_exposures(env)
42+
@spec.call(env) { |request_env| call(request_env) }
43+
end
44+
end
45+
46+
def self.build(agent_settings:, logger:)
47+
Core::Transport::HTTP.build(
48+
api_instance_class: HTTP::Instance,
49+
agent_settings: agent_settings,
50+
logger: logger
51+
) { |t| t.api('exposures', HTTP::Spec.new) }.to_transport(self)
52+
end
53+
54+
def initialize(apis, default_api, logger:)
55+
@api = apis[default_api]
56+
@logger = logger
57+
end
58+
59+
def send_exposures(payload)
60+
request = Core::Transport::Request.new(EncodedParcel.new(payload))
61+
@api.send_exposures(Core::Transport::HTTP::Env.new(request))
62+
rescue => e
63+
message = "Internal error during request. Cause: #{e.class.name} #{e.message} " \
64+
"Location: #{Array(e.backtrace).first}"
65+
@logger.debug(message)
66+
67+
Core::Transport::InternalErrorResponse.new(e)
68+
end
69+
end
70+
end
71+
end
72+
end

lib/datadog/open_feature/transport/exposures.rb

Lines changed: 0 additions & 54 deletions
This file was deleted.

lib/datadog/open_feature/transport/http.rb

Lines changed: 0 additions & 32 deletions
This file was deleted.

lib/datadog/open_feature/transport/http/api.rb

Lines changed: 0 additions & 32 deletions
This file was deleted.

lib/datadog/open_feature/transport/http/client.rb

Lines changed: 0 additions & 41 deletions
This file was deleted.

lib/datadog/open_feature/transport/http/exposures.rb

Lines changed: 0 additions & 82 deletions
This file was deleted.

sig/datadog/open_feature/exposures/worker.rbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ module Datadog
2020

2121
def initialize: (
2222
settings: Core::Configuration::Settings,
23-
transport: Transport::Exposures::Transport,
23+
transport: Transport::HTTP,
2424
telemetry: Core::Telemetry::Component,
2525
logger: Core::Logger,
2626
?flush_interval_seconds: ::Integer,

0 commit comments

Comments
 (0)