Skip to content

Commit

Permalink
DEBUG-3535 DRY Transport::HTTP::Builder, move to core (#4413)
Browse files Browse the repository at this point in the history
  • Loading branch information
p-datadog authored Feb 20, 2025
1 parent 62d691e commit 917747b
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 340 deletions.
19 changes: 8 additions & 11 deletions lib/datadog/core/remote/transport/http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
require_relative '../../environment/container'
require_relative '../../environment/ext'
require_relative '../../transport/ext'
require_relative '../../transport/http/builder'
require_relative '../../transport/http/adapters/net'
require_relative '../../transport/http/adapters/unix_socket'
require_relative '../../transport/http/adapters/test'
Expand All @@ -19,13 +20,7 @@
# require_relative '../../transport/http/api'
require_relative 'http/api'

# TODO: Decouple transport/http/builder
#
# See http/builder
#
# Below should be:
# require_relative '../../transport/http/builder'
require_relative 'http/builder'
require_relative 'http/api/instance'

# TODO: Decouple transport/http
#
Expand Down Expand Up @@ -53,7 +48,9 @@ module HTTP

# Builds a new Transport::HTTP::Client
def new(klass, &block)
Builder.new(&block).to_transport(klass)
Core::Transport::HTTP::Builder.new(
api_instance_class: API::Instance, &block
).to_transport(klass)
end

# Builds a new Transport::HTTP::Client with default settings
Expand Down Expand Up @@ -133,15 +130,15 @@ def default_adapter
end

# Add adapters to registry
Builder::REGISTRY.set(
Core::Transport::HTTP::Builder::REGISTRY.set(
Datadog::Core::Transport::HTTP::Adapters::Net,
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
)
Builder::REGISTRY.set(
Core::Transport::HTTP::Builder::REGISTRY.set(
Datadog::Core::Transport::HTTP::Adapters::Test,
Datadog::Core::Transport::Ext::Test::ADAPTER
)
Builder::REGISTRY.set(
Core::Transport::HTTP::Builder::REGISTRY.set(
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
Datadog::Core::Configuration::Ext::Agent::UnixSocket::ADAPTER
)
Expand Down
219 changes: 0 additions & 219 deletions lib/datadog/core/remote/transport/http/builder.rb

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,27 +1,26 @@
# frozen_string_literal: true

require_relative '../../../core/configuration/agent_settings_resolver'
require_relative '../../../core/transport/http/adapters/registry'
require_relative '../../../core/transport/http/api/map'
require_relative 'api/instance'
require_relative 'client'
require_relative '../../configuration/agent_settings_resolver'
require_relative 'adapters/registry'
require_relative 'api/map'

module Datadog
module Tracing
module Core
module Transport
module HTTP
# Builds new instances of Transport::HTTP::Client
class Builder
REGISTRY = Datadog::Core::Transport::HTTP::Adapters::Registry.new

attr_reader \
:api_instance_class,
:apis,
:api_options,
:default_adapter,
:default_api,
:default_headers

def initialize
def initialize(api_instance_class:)
# Global settings
@default_adapter = nil
@default_headers = {}
Expand All @@ -33,6 +32,8 @@ def initialize
# API settings
@api_options = {}

@api_instance_class = api_instance_class

yield(self) if block_given?
end

Expand Down Expand Up @@ -82,11 +83,10 @@ def default_api=(key)
@default_api = key
end

def to_transport
def to_transport(klass)
raise NoDefaultApiError if @default_api.nil?

# DEV: Should not be specific to traces
Transport::Traces::Transport.new(to_api_instances, @default_api)
klass.new(to_api_instances, @default_api)
end

def to_api_instances
Expand Down Expand Up @@ -117,28 +117,48 @@ def to_api_instances
end
end

def api_instance_class
API::Instance
end

# Raised when the API key does not match known APIs.
class UnknownApiError < StandardError
attr_reader :key

def initialize(key)
super("Unknown transport API '#{key}'!")
super()

@key = key
end

def message
"Unknown transport API '#{key}'!"
end
end

# Raised when the identifier cannot be matched to an adapter.
class UnknownAdapterError < StandardError
attr_reader :type

def initialize(type)
super("Unknown transport adapter '#{type}'!")
super()

@type = type
end

def message
"Unknown transport adapter '#{type}'!"
end
end

# Raised when an adapter cannot be resolved for an API instance.
class NoAdapterForApiError < StandardError
attr_reader :key

def initialize(key)
super("No adapter resolved for transport API '#{key}'!")
super()

@key = key
end

def message
"No adapter resolved for transport API '#{key}'!"
end
end

Expand Down
Loading

0 comments on commit 917747b

Please sign in to comment.