Class: Datadog::Core::Transport::HTTP::Builder
- Inherits:
-
Object
- Object
- Datadog::Core::Transport::HTTP::Builder
- Defined in:
- lib/datadog/core/transport/http/builder.rb
Overview
Builds new instances of Transport::HTTP::Client
Defined Under Namespace
Classes: NoAdapterForApiError, NoApisError, NoDefaultApiError, UnknownAdapterError, UnknownApiError
Constant Summary collapse
- REGISTRY =
Datadog::Core::Transport::HTTP::Adapters::Registry.new
Instance Attribute Summary collapse
-
#api_options ⇒ Object
readonly
Returns the value of attribute api_options.
-
#apis ⇒ Object
readonly
Returns the value of attribute apis.
-
#default_adapter ⇒ Object
readonly
Returns the value of attribute default_adapter.
-
#default_api ⇒ Object
Returns the value of attribute default_api.
-
#default_headers ⇒ Object
readonly
Returns the value of attribute default_headers.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
Instance Method Summary collapse
- #adapter(config, *args, **kwargs) ⇒ Object
-
#api(key, spec, options = {}) ⇒ Object
Adds a new API to the client Valid options: - :adapter - :default - :fallback - :headers.
- #headers(values = {}) ⇒ Object
-
#initialize(logger: Datadog.logger) {|_self| ... } ⇒ Builder
constructor
A new instance of Builder.
- #to_api_instances ⇒ Object
- #to_transport(klass) ⇒ Object
Constructor Details
#initialize(logger: Datadog.logger) {|_self| ... } ⇒ Builder
Returns a new instance of Builder.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/datadog/core/transport/http/builder.rb', line 23 def initialize(logger: Datadog.logger) # Global settings @default_adapter = nil @default_headers = {} # Client settings @apis = Datadog::Core::Transport::HTTP::API::Map.new @default_api = nil # API settings = {} @logger = logger yield(self) if block_given? end |
Instance Attribute Details
#api_options ⇒ Object (readonly)
Returns the value of attribute api_options.
15 16 17 |
# File 'lib/datadog/core/transport/http/builder.rb', line 15 def end |
#apis ⇒ Object (readonly)
Returns the value of attribute apis.
15 16 17 |
# File 'lib/datadog/core/transport/http/builder.rb', line 15 def apis @apis end |
#default_adapter ⇒ Object (readonly)
Returns the value of attribute default_adapter.
15 16 17 |
# File 'lib/datadog/core/transport/http/builder.rb', line 15 def default_adapter @default_adapter end |
#default_api ⇒ Object
Returns the value of attribute default_api.
15 16 17 |
# File 'lib/datadog/core/transport/http/builder.rb', line 15 def default_api @default_api end |
#default_headers ⇒ Object (readonly)
Returns the value of attribute default_headers.
15 16 17 |
# File 'lib/datadog/core/transport/http/builder.rb', line 15 def default_headers @default_headers end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
15 16 17 |
# File 'lib/datadog/core/transport/http/builder.rb', line 15 def logger @logger end |
Instance Method Details
#adapter(config, *args, **kwargs) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/datadog/core/transport/http/builder.rb', line 40 def adapter(config, *args, **kwargs) @default_adapter = case config when Core::Configuration::AgentSettings registry_klass = REGISTRY.get(config.adapter) raise UnknownAdapterError, config.adapter if registry_klass.nil? registry_klass.build(config) when Symbol registry_klass = REGISTRY.get(config) raise UnknownAdapterError, config if registry_klass.nil? registry_klass.new(*args, **kwargs) else config end end |
#api(key, spec, options = {}) ⇒ Object
Adds a new API to the client Valid options:
- :adapter
- :default
- :fallback
- :headers
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/datadog/core/transport/http/builder.rb', line 67 def api(key, spec, = {}) = .dup # Copy spec into API map @apis[key] = spec # Apply as default API, if specified to do so. # # This code also sets the first defined API to be the default API. # In APIs without fallbacks (currently, everything other than # tracing's Traces, though DI Input will also have fallbacks soon) # there is only one declaration of `transport.api`, and that # API is set as the default API in the transport by this line. @default_api = key if .delete(:default) || @default_api.nil? # Save all other settings for initialization ([key] ||= {}).merge!() end |
#headers(values = {}) ⇒ Object
57 58 59 |
# File 'lib/datadog/core/transport/http/builder.rb', line 57 def headers(values = {}) @default_headers.merge!(values) end |
#to_api_instances ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/datadog/core/transport/http/builder.rb', line 98 def to_api_instances raise NoApisError if @apis.empty? @apis.inject(API::Map.new) do |instances, (key, spec)| instances.tap do = [key].dup # Resolve the adapter to use for this API adapter = .delete(:adapter) || @default_adapter raise NoAdapterForApiError, key if adapter.nil? # Resolve fallback and merge headers fallback = .delete(:fallback) [:headers] = @default_headers.merge(([:headers] || {})) # Add API::Instance with all settings instances[key] = API::Instance.new( spec, adapter, ) # Configure fallback, if provided. instances.with_fallbacks(key => fallback) unless fallback.nil? end end end |
#to_transport(klass) ⇒ Object
92 93 94 95 96 |
# File 'lib/datadog/core/transport/http/builder.rb', line 92 def to_transport(klass) raise NoDefaultApiError if @default_api.nil? klass.new(to_api_instances, @default_api, logger: logger) end |