Sha256: 72b93908e66558e0e3aaa8722f1f6145c766c25c2f1c618249f8abbe17ec1c2a

Contents?: true

Size: 1.82 KB

Versions: 28

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

require_relative '../../../core/transport/request'

# TODO: Resolve conceptual conundrum
#
# It seems that through naming of `Transport::Traces::Transport` the transport
# is specific to traces, which kind of matches the almost-generic-but-not-quite
# implementation.
#
# This may be why `Transport::Traces::Transport` negotiates only considering
# the `/vX/traces` path, but here we don't negotiate since we are at the root.
#
# In turn this means that API::Spec cannot describe multiple roots, or even
# endpoints that happen to differ in version.
#
# Concepts such as Spec, API, Endpoint, and Transport should be clarified
# before attempting further refactoring here, to attempt to resolve whether a
# Transport - via its negotiated Spec - describes a function (implemented as
# one or more endpoints) or whether the Spec describes the API towards the
# agent as a whole, morphing through negotiation into the best available
# version for each endpoint.

module Datadog
  module Core
    module Remote
      module Transport
        module Negotiation
          # Negotiation request
          class Request < Datadog::Core::Transport::Request
          end

          # Negotiation response
          module Response
            attr_reader :version, :endpoints, :config
          end

          # Negotiation transport
          class Transport
            attr_reader :client, :apis, :default_api, :current_api_id

            def initialize(apis, default_api)
              @apis = apis

              @client = HTTP::Client.new(current_api)
            end

            def send_info
              request = Request.new

              @client.send_info_payload(request)
            end

            def current_api
              @apis[HTTP::API::ROOT]
            end
          end
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
datadog-2.10.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.9.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.8.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.7.1 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.7.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.6.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.5.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.4.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.3.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.2.0 lib/datadog/core/remote/transport/negotiation.rb
ddtrace-1.23.3 lib/datadog/core/remote/transport/negotiation.rb
ddtrace-1.23.2 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.1.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.0.0 lib/datadog/core/remote/transport/negotiation.rb
ddtrace-1.23.1 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.0.0.beta2 lib/datadog/core/remote/transport/negotiation.rb
ddtrace-1.22.0 lib/datadog/core/remote/transport/negotiation.rb
datadog-2.0.0.beta1 lib/datadog/core/remote/transport/negotiation.rb
ddtrace-1.21.1 lib/datadog/core/remote/transport/negotiation.rb
ddtrace-1.21.0 lib/datadog/core/remote/transport/negotiation.rb