From 75f8f0df52f3d8ae8bc766ad9291afec67bc5f3b Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Apr 2025 10:25:10 -0400 Subject: [PATCH 01/10] delete telemetry Net::HTTP adapter --- .../core/telemetry/http/adapters/net.rb | 111 -------- lib/datadog/core/telemetry/http/transport.rb | 13 +- spec/datadog/core/telemetry/emitter_spec.rb | 3 +- .../core/telemetry/http/adapters/net_spec.rb | 266 ------------------ .../core/telemetry/http/transport_spec.rb | 17 +- spec/datadog/core/telemetry/worker_spec.rb | 7 +- 6 files changed, 27 insertions(+), 390 deletions(-) delete mode 100644 lib/datadog/core/telemetry/http/adapters/net.rb delete mode 100644 spec/datadog/core/telemetry/http/adapters/net_spec.rb diff --git a/lib/datadog/core/telemetry/http/adapters/net.rb b/lib/datadog/core/telemetry/http/adapters/net.rb deleted file mode 100644 index 271da8400fb..00000000000 --- a/lib/datadog/core/telemetry/http/adapters/net.rb +++ /dev/null @@ -1,111 +0,0 @@ -# frozen_string_literal: true - -require_relative '../response' - -module Datadog - module Core - module Telemetry - module Http - module Adapters - # Class defining methods to make http requests via NET - class Net - attr_reader \ - :hostname, - :port, - :timeout, - :ssl - - DEFAULT_TIMEOUT = 2 - - def initialize(hostname:, port: nil, timeout: DEFAULT_TIMEOUT, ssl: true) - @hostname = hostname - @port = port - @timeout = timeout - @ssl = ssl.nil? || ssl - end - - def open(&block) - req = ::Net::HTTP.new(@hostname, @port) - - req.use_ssl = @ssl - req.open_timeout = req.read_timeout = @timeout - - req.start(&block) - end - - def post(env) - post = ::Net::HTTP::Post.new(env.path, env.headers) - post.body = env.body - - http_response = open do |http| - http.request(post) - end - - Response.new(http_response) - rescue StandardError => e - Datadog.logger.debug("Unable to send telemetry event to agent: #{e}") - Telemetry::Http::InternalErrorResponse.new(e) - end - - # Data structure for an HTTP Response - class Response - include Datadog::Core::Telemetry::Http::Response - - attr_reader :http_response - - def initialize(http_response) - @http_response = http_response - end - - def payload - return super if http_response.nil? - - http_response.body - end - - def code - return super if http_response.nil? - - http_response.code.to_i - end - - def ok? - return super if http_response.nil? - - code.between?(200, 299) - end - - def unsupported? - return super if http_response.nil? - - code == 415 - end - - def not_found? - return super if http_response.nil? - - code == 404 - end - - def client_error? - return super if http_response.nil? - - code.between?(400, 499) - end - - def server_error? - return super if http_response.nil? - - code.between?(500, 599) - end - - def inspect - "#{super}, http_response:#{http_response}" - end - end - end - end - end - end - end -end diff --git a/lib/datadog/core/telemetry/http/transport.rb b/lib/datadog/core/telemetry/http/transport.rb index 33cc48c8c04..e00d9ef9d6e 100644 --- a/lib/datadog/core/telemetry/http/transport.rb +++ b/lib/datadog/core/telemetry/http/transport.rb @@ -5,7 +5,7 @@ require_relative '../../transport/ext' require_relative 'env' require_relative 'ext' -require_relative 'adapters/net' +require_relative '../../transport/http/adapters/net' module Datadog module Core @@ -81,7 +81,16 @@ def headers(request_type:, api_version: Http::Ext::API_VERSION) end def adapter - @adapter ||= Http::Adapters::Net.new(hostname: @host, port: @port, ssl: @ssl) + @adapter ||= begin + agent_settings = Core::Configuration::AgentSettingsResolver::AgentSettings.new( + adapter: Core::Configuration::Ext::Agent::HTTP::ADAPTER, + ssl: @ssl, + hostname: @host, + port: @port, + # TODO get timeout_seconds from somewhere + ) + Core::Transport::HTTP::Adapters::Net.new(agent_settings) + end end end end diff --git a/spec/datadog/core/telemetry/emitter_spec.rb b/spec/datadog/core/telemetry/emitter_spec.rb index 661e17edfe0..2b33409c71b 100644 --- a/spec/datadog/core/telemetry/emitter_spec.rb +++ b/spec/datadog/core/telemetry/emitter_spec.rb @@ -1,11 +1,12 @@ require 'spec_helper' require 'datadog/core/telemetry/emitter' +require 'datadog/core/telemetry/http/response' RSpec.describe Datadog::Core::Telemetry::Emitter do subject(:emitter) { described_class.new(http_transport: http_transport) } let(:http_transport) { double(Datadog::Core::Telemetry::Http::Transport) } - let(:response) { double(Datadog::Core::Telemetry::Http::Adapters::Net::Response) } + let(:response) { double(Datadog::Core::Transport::HTTP::Adapters::Net::Response) } let(:response_ok) { true } before do diff --git a/spec/datadog/core/telemetry/http/adapters/net_spec.rb b/spec/datadog/core/telemetry/http/adapters/net_spec.rb deleted file mode 100644 index e4513c0ae87..00000000000 --- a/spec/datadog/core/telemetry/http/adapters/net_spec.rb +++ /dev/null @@ -1,266 +0,0 @@ -require 'spec_helper' - -require 'datadog/core/telemetry/http/adapters/net' - -RSpec.describe Datadog::Core::Telemetry::Http::Adapters::Net do - subject(:adapter) { described_class.new(hostname: hostname, port: port, **options) } - - let(:hostname) { double('hostname') } - let(:port) { double('port') } - let(:timeout) { double('timeout') } - let(:options) { { timeout: timeout } } - - shared_context 'HTTP connection stub' do - let(:http_connection) { instance_double(::Net::HTTP) } - - before do - allow(::Net::HTTP).to receive(:new) - .with( - adapter.hostname, - adapter.port, - ).and_return(http_connection) - - allow(http_connection).to receive(:open_timeout=).with(adapter.timeout) - allow(http_connection).to receive(:read_timeout=).with(adapter.timeout) - allow(http_connection).to receive(:use_ssl=).with(adapter.ssl) - - allow(http_connection).to receive(:start).and_yield(http_connection) - end - end - - shared_context 'HTTP Env' do - let(:env) do - instance_double( - Datadog::Core::Telemetry::Http::Env, - path: path, - body: body, - headers: headers, - ) - end - - let(:path) { '/foo' } - let(:body) { '{}' } - let(:headers) { {} } - end - - describe '#initialize' do - context 'given no options' do - let(:options) { {} } - - it do - is_expected.to have_attributes( - hostname: hostname, - port: port, - timeout: Datadog::Core::Telemetry::Http::Adapters::Net::DEFAULT_TIMEOUT, - ssl: true - ) - end - end - - context 'given a :timeout option' do - let(:options) { { timeout: timeout } } - let(:timeout) { double('timeout') } - - it { is_expected.to have_attributes(timeout: timeout) } - end - - context 'given a :ssl option' do - let(:options) { { ssl: ssl } } - - context 'with nil' do - let(:ssl) { nil } - - it { is_expected.to have_attributes(ssl: true) } - end - - context 'with false' do - let(:ssl) { false } - - it { is_expected.to have_attributes(ssl: false) } - end - end - end - - describe '#open' do - include_context 'HTTP connection stub' - - it 'opens and yields a Net::HTTP connection' do - expect { |b| adapter.open(&b) }.to yield_with_args(http_connection) - end - end - - describe '#post' do - include_context 'HTTP connection stub' - include_context 'HTTP Env' - - subject(:post) { adapter.post(env) } - - let(:http_response) { double('http_response') } - - context 'when request goes through' do - before { expect(http_connection).to receive(:request).and_return(http_response) } - - it 'produces a response' do - is_expected.to be_a_kind_of(described_class::Response) - expect(post.http_response).to be(http_response) - end - end - - context 'when error in connecting to agent' do - before { expect(http_connection).to receive(:request).and_raise(StandardError) } - it { expect(post).to be_a_kind_of(Datadog::Core::Telemetry::Http::InternalErrorResponse) } - end - end -end - -RSpec.describe Datadog::Core::Telemetry::Http::Adapters::Net::Response do - subject(:response) { described_class.new(http_response) } - - let(:http_response) { instance_double(::Net::HTTPResponse) } - - describe '#initialize' do - it { is_expected.to have_attributes(http_response: http_response) } - end - - describe '#payload' do - subject(:payload) { response.payload } - - let(:http_response) { instance_double(::Net::HTTPResponse, body: double('body')) } - - it { is_expected.to be(http_response.body) } - end - - describe '#code' do - subject(:code) { response.code } - - let(:http_response) { instance_double(::Net::HTTPResponse, code: '200') } - - it { is_expected.to eq(200) } - end - - describe '#ok?' do - subject(:ok?) { response.ok? } - - let(:http_response) { instance_double(::Net::HTTPResponse, code: code) } - - context 'when code not 2xx' do - let(:code) { 199 } - - it { is_expected.to be false } - end - - context 'when code is 200' do - let(:code) { 200 } - - it { is_expected.to be true } - end - - context 'when code is 299' do - let(:code) { 299 } - - it { is_expected.to be true } - end - - context 'when code is greater than 299' do - let(:code) { 300 } - - it { is_expected.to be false } - end - end - - describe '#unsupported?' do - subject(:unsupported?) { response.unsupported? } - - let(:http_response) { instance_double(::Net::HTTPResponse, code: code) } - - context 'when code is 400' do - let(:code) { 400 } - - it { is_expected.to be false } - end - - context 'when code is 415' do - let(:code) { 415 } - - it { is_expected.to be true } - end - end - - describe '#not_found?' do - subject(:not_found?) { response.not_found? } - - let(:http_response) { instance_double(::Net::HTTPResponse, code: code) } - - context 'when code is 400' do - let(:code) { 400 } - - it { is_expected.to be false } - end - - context 'when code is 404' do - let(:code) { 404 } - - it { is_expected.to be true } - end - end - - describe '#client_error?' do - subject(:client_error?) { response.client_error? } - - let(:http_response) { instance_double(::Net::HTTPResponse, code: code) } - - context 'when code is 399' do - let(:code) { 399 } - - it { is_expected.to be false } - end - - context 'when code is 400' do - let(:code) { 400 } - - it { is_expected.to be true } - end - - context 'when code is 499' do - let(:code) { 499 } - - it { is_expected.to be true } - end - - context 'when code is 500' do - let(:code) { 500 } - - it { is_expected.to be false } - end - end - - describe '#server_error?' do - subject(:server_error?) { response.server_error? } - - let(:http_response) { instance_double(::Net::HTTPResponse, code: code) } - - context 'when code is 499' do - let(:code) { 499 } - - it { is_expected.to be false } - end - - context 'when code is 500' do - let(:code) { 500 } - - it { is_expected.to be true } - end - - context 'when code is 599' do - let(:code) { 599 } - - it { is_expected.to be true } - end - - context 'when code is 600' do - let(:code) { 600 } - - it { is_expected.to be false } - end - end -end diff --git a/spec/datadog/core/telemetry/http/transport_spec.rb b/spec/datadog/core/telemetry/http/transport_spec.rb index ce27a8c92d8..b6a37ed88bf 100644 --- a/spec/datadog/core/telemetry/http/transport_spec.rb +++ b/spec/datadog/core/telemetry/http/transport_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' require 'datadog/core/telemetry/http/transport' -require 'datadog/core/telemetry/http/adapters/net' +require 'datadog/core/transport/http/adapters/net' RSpec.describe Datadog::Core::Telemetry::Http::Transport do subject(:transport) { described_class.build_agent_transport(agent_settings) } @@ -57,7 +57,7 @@ describe '#request' do subject(:request) { transport.request(request_type: request_type, payload: payload) } - let(:adapter) { instance_double(Datadog::Core::Telemetry::Http::Adapters::Net, post: response) } + let(:adapter) { instance_double(Datadog::Core::Transport::HTTP::Adapters::Net, post: response) } let(:env) { instance_double(Datadog::Core::Telemetry::Http::Env, body: payload, path: path) } let(:headers) do { @@ -75,7 +75,7 @@ let(:payload) { '{"foo":"bar"}' } let(:port) { 1234 } let(:request_type) { 'app-started' } - let(:response) { instance_double(Datadog::Core::Telemetry::Http::Adapters::Net::Response) } + let(:response) { instance_double(Datadog::Core::Transport::HTTP::Adapters::Net::Response) } let(:ssl) { false } before do @@ -87,11 +87,14 @@ allow(env).to receive(:body=).with(payload) allow(env).to receive(:headers=).with(headers) - allow(Datadog::Core::Telemetry::Http::Adapters::Net).to receive(:new) + allow(Datadog::Core::Transport::HTTP::Adapters::Net).to receive(:new) .with( - hostname: hostname, - port: port, - ssl: ssl + Datadog::Core::Configuration::AgentSettingsResolver::AgentSettings.new( + adapter: :net_http, + hostname: hostname, + port: port, + ssl: ssl + ) ).and_return(adapter) end diff --git a/spec/datadog/core/telemetry/worker_spec.rb b/spec/datadog/core/telemetry/worker_spec.rb index 35d7373b44b..6957711cb89 100644 --- a/spec/datadog/core/telemetry/worker_spec.rb +++ b/spec/datadog/core/telemetry/worker_spec.rb @@ -1,6 +1,7 @@ require 'spec_helper' require 'datadog/core/telemetry/worker' +require 'datadog/core/transport/http/adapters/net' RSpec.describe Datadog::Core::Telemetry::Worker do subject(:worker) do @@ -26,7 +27,7 @@ let(:backend_supports_telemetry?) { true } let(:response) do double( - Datadog::Core::Telemetry::Http::Adapters::Net::Response, + Datadog::Core::Transport::HTTP::Adapters::Net::Response, not_found?: !backend_supports_telemetry?, ok?: backend_supports_telemetry? ) @@ -126,7 +127,7 @@ expect(emitter).to receive(:request).with(an_instance_of(Datadog::Core::Telemetry::Event::AppStarted)) .and_return( double( - Datadog::Core::Telemetry::Http::Adapters::Net::Response, + Datadog::Core::Transport::HTTP::Adapters::Net::Response, not_found?: false, ok?: false ) @@ -162,7 +163,7 @@ expect(emitter).to receive(:request).with(an_instance_of(Datadog::Core::Telemetry::Event::AppStarted)) .and_return( double( - Datadog::Core::Telemetry::Http::Adapters::Net::Response, + Datadog::Core::Transport::HTTP::Adapters::Net::Response, not_found?: false, ok?: false ) From e865a33c1fd929eeb7c57dd2bb1dbc7372e46104 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Apr 2025 10:35:39 -0400 Subject: [PATCH 02/10] delete telemetry Env --- lib/datadog/core/telemetry/http/env.rb | 20 ------------------- lib/datadog/core/telemetry/http/transport.rb | 3 +-- spec/datadog/core/telemetry/http/env_spec.rb | 20 ------------------- .../core/telemetry/http/transport_spec.rb | 4 ++-- 4 files changed, 3 insertions(+), 44 deletions(-) delete mode 100644 lib/datadog/core/telemetry/http/env.rb delete mode 100644 spec/datadog/core/telemetry/http/env_spec.rb diff --git a/lib/datadog/core/telemetry/http/env.rb b/lib/datadog/core/telemetry/http/env.rb deleted file mode 100644 index a1463aca72a..00000000000 --- a/lib/datadog/core/telemetry/http/env.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module Datadog - module Core - module Telemetry - module Http - # Data structure for an HTTP request - class Env - attr_accessor :path, :body - - attr_writer :headers - - def headers - @headers ||= {} - end - end - end - end - end -end diff --git a/lib/datadog/core/telemetry/http/transport.rb b/lib/datadog/core/telemetry/http/transport.rb index e00d9ef9d6e..0d441a3f852 100644 --- a/lib/datadog/core/telemetry/http/transport.rb +++ b/lib/datadog/core/telemetry/http/transport.rb @@ -3,7 +3,6 @@ require_relative '../../configuration/settings' require_relative '../../environment/ext' require_relative '../../transport/ext' -require_relative 'env' require_relative 'ext' require_relative '../../transport/http/adapters/net' @@ -53,7 +52,7 @@ def initialize(host:, port:, path:, ssl: false, api_key: nil) end def request(request_type:, payload:) - env = Http::Env.new + env = Core::Transport::HTTP::Env.new(Core::Transport::Request.new) env.path = @path env.body = payload env.headers = headers(request_type: request_type) diff --git a/spec/datadog/core/telemetry/http/env_spec.rb b/spec/datadog/core/telemetry/http/env_spec.rb deleted file mode 100644 index 33420aa5375..00000000000 --- a/spec/datadog/core/telemetry/http/env_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'spec_helper' - -require 'datadog/core/telemetry/http/env' - -RSpec.describe Datadog::Core::Telemetry::Http::Env do - subject(:env) { described_class.new } - - describe '#initialize' do - it { is_expected.to have_attributes(headers: {}) } - end - - it 'has request attributes' do - is_expected.to respond_to(:path) - is_expected.to respond_to(:path=) - is_expected.to respond_to(:body) - is_expected.to respond_to(:body=) - is_expected.to respond_to(:headers) - is_expected.to respond_to(:headers=) - end -end diff --git a/spec/datadog/core/telemetry/http/transport_spec.rb b/spec/datadog/core/telemetry/http/transport_spec.rb index b6a37ed88bf..4dcadbffc04 100644 --- a/spec/datadog/core/telemetry/http/transport_spec.rb +++ b/spec/datadog/core/telemetry/http/transport_spec.rb @@ -58,7 +58,7 @@ subject(:request) { transport.request(request_type: request_type, payload: payload) } let(:adapter) { instance_double(Datadog::Core::Transport::HTTP::Adapters::Net, post: response) } - let(:env) { instance_double(Datadog::Core::Telemetry::Http::Env, body: payload, path: path) } + let(:env) { instance_double(Datadog::Core::Transport::HTTP::Env, body: payload, path: path) } let(:headers) do { 'Content-Type' => 'application/json', @@ -82,7 +82,7 @@ Datadog.configuration.agent.host = hostname Datadog.configuration.agent.port = port - allow(Datadog::Core::Telemetry::Http::Env).to receive(:new).and_return(env) + allow(Datadog::Core::Transport::HTTP::Env).to receive(:new).and_return(env) allow(env).to receive(:path=).with(path) allow(env).to receive(:body=).with(payload) allow(env).to receive(:headers=).with(headers) From 19fe1a1000b2602fc1a24d5f840740376e1cdd0c Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Apr 2025 10:49:54 -0400 Subject: [PATCH 03/10] delete telemetry Response --- lib/datadog/core/telemetry/emitter.rb | 5 +- lib/datadog/core/telemetry/http/response.rb | 70 ------------------ spec/datadog/core/telemetry/emitter_spec.rb | 4 +- .../core/telemetry/http/response_spec.rb | 71 ------------------- spec/datadog/core/telemetry/worker_spec.rb | 3 +- 5 files changed, 7 insertions(+), 146 deletions(-) delete mode 100644 lib/datadog/core/telemetry/http/response.rb delete mode 100644 spec/datadog/core/telemetry/http/response_spec.rb diff --git a/lib/datadog/core/telemetry/emitter.rb b/lib/datadog/core/telemetry/emitter.rb index 78d33ef21c5..91616e32797 100644 --- a/lib/datadog/core/telemetry/emitter.rb +++ b/lib/datadog/core/telemetry/emitter.rb @@ -2,6 +2,7 @@ require_relative 'request' require_relative 'http/transport' +require_relative '../transport/response' require_relative '../utils/sequence' require_relative '../utils/forking' @@ -25,11 +26,11 @@ def request(event) seq_id = self.class.sequence.next payload = Request.build_payload(event, seq_id) res = @http_transport.request(request_type: event.type, payload: payload.to_json) - Datadog.logger.debug { "Telemetry sent for event `#{event.type}` (code: #{res.code.inspect})" } + Datadog.logger.debug { "Telemetry sent for event `#{event.type}` (response: #{res})" } res rescue => e Datadog.logger.debug("Unable to send telemetry request for event `#{event.type rescue 'unknown'}`: #{e}") - Telemetry::Http::InternalErrorResponse.new(e) + Core::Transport::InternalErrorResponse.new(e) end # Initializes a Sequence object to track seq_id if not already initialized; else returns stored diff --git a/lib/datadog/core/telemetry/http/response.rb b/lib/datadog/core/telemetry/http/response.rb deleted file mode 100644 index 696ecd1432d..00000000000 --- a/lib/datadog/core/telemetry/http/response.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -module Datadog - module Core - module Telemetry - module Http - # Module for base HTTP response - module Response - def payload - nil - end - - def ok? - nil - end - - def unsupported? - nil - end - - def not_found? - nil - end - - def client_error? - nil - end - - def server_error? - nil - end - - def internal_error? - nil - end - - def code - nil - end - - def inspect - "#{self.class} ok?:#{ok?} unsupported?:#{unsupported?}, " \ - "not_found?:#{not_found?}, client_error?:#{client_error?}, " \ - "server_error?:#{server_error?}, internal_error?:#{internal_error?}, " \ - "payload:#{payload}" - end - end - - # A generic error response for internal errors - class InternalErrorResponse - include Response - - attr_reader :error - - def initialize(error) - @error = error - end - - def internal_error? - true - end - - def inspect - "#{super}, error_type:#{error.class} error:#{error}" - end - end - end - end - end -end diff --git a/spec/datadog/core/telemetry/emitter_spec.rb b/spec/datadog/core/telemetry/emitter_spec.rb index 2b33409c71b..caa6863dab2 100644 --- a/spec/datadog/core/telemetry/emitter_spec.rb +++ b/spec/datadog/core/telemetry/emitter_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' require 'datadog/core/telemetry/emitter' -require 'datadog/core/telemetry/http/response' +require 'datadog/core/transport/response' RSpec.describe Datadog::Core::Telemetry::Emitter do subject(:emitter) { described_class.new(http_transport: http_transport) } @@ -70,7 +70,7 @@ context 'when call is not successful and debug logging is enabled' do let(:response) do - Datadog::Core::Telemetry::Http::InternalErrorResponse.new(StandardError.new('Failed call')) + Datadog::Core::Transport::InternalErrorResponse.new(StandardError.new('Failed call')) end it 'logs the request correctly' do diff --git a/spec/datadog/core/telemetry/http/response_spec.rb b/spec/datadog/core/telemetry/http/response_spec.rb deleted file mode 100644 index 744700b40b1..00000000000 --- a/spec/datadog/core/telemetry/http/response_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -require 'spec_helper' - -require 'datadog/core/telemetry/http/response' - -RSpec.describe Datadog::Core::Telemetry::Http::Response do - context 'when implemented by a class' do - subject(:response) { response_class.new } - - let(:response_class) do - stub_const('TestResponse', Class.new { include Datadog::Core::Telemetry::Http::Response }) - end - - describe '#payload' do - subject(:payload) { response.payload } - - it { is_expected.to be nil } - end - - describe '#ok?' do - subject(:ok?) { response.ok? } - - it { is_expected.to be nil } - end - - describe '#unsupported?' do - subject(:unsupported?) { response.unsupported? } - - it { is_expected.to be nil } - end - - describe '#not_found?' do - subject(:not_found?) { response.not_found? } - - it { is_expected.to be nil } - end - - describe '#client_error?' do - subject(:client_error?) { response.client_error? } - - it { is_expected.to be nil } - end - - describe '#server_error?' do - subject(:server_error?) { response.server_error? } - - it { is_expected.to be nil } - end - - describe '#internal_error?' do - subject(:internal_error?) { response.internal_error? } - - it { is_expected.to be nil } - end - end -end - -RSpec.describe Datadog::Core::Telemetry::Http::InternalErrorResponse do - subject(:response) { described_class.new(error) } - - let(:error) { instance_double(StandardError) } - - describe '#initialize' do - it { is_expected.to have_attributes(error: error) } - end - - describe '#internal_error?' do - subject(:internal_error?) { response.internal_error? } - - it { is_expected.to be true } - end -end diff --git a/spec/datadog/core/telemetry/worker_spec.rb b/spec/datadog/core/telemetry/worker_spec.rb index 6957711cb89..1cf4515bfbf 100644 --- a/spec/datadog/core/telemetry/worker_spec.rb +++ b/spec/datadog/core/telemetry/worker_spec.rb @@ -2,6 +2,7 @@ require 'datadog/core/telemetry/worker' require 'datadog/core/transport/http/adapters/net' +require 'datadog/core/transport/response' RSpec.describe Datadog::Core::Telemetry::Worker do subject(:worker) do @@ -265,7 +266,7 @@ end context 'when internal error returned by emitter' do - let(:response) { Datadog::Core::Telemetry::Http::InternalErrorResponse.new('error') } + let(:response) { Datadog::Core::Transport::InternalErrorResponse.new('error') } it 'does not send heartbeat event' do worker.start From 4f7e4ec2093a28bd4cfc47a5689f44d94202f433 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Apr 2025 13:14:21 -0400 Subject: [PATCH 04/10] rubocop --- lib/datadog/core/telemetry/http/transport.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/datadog/core/telemetry/http/transport.rb b/lib/datadog/core/telemetry/http/transport.rb index 0d441a3f852..d3c97530cb5 100644 --- a/lib/datadog/core/telemetry/http/transport.rb +++ b/lib/datadog/core/telemetry/http/transport.rb @@ -86,7 +86,7 @@ def adapter ssl: @ssl, hostname: @host, port: @port, - # TODO get timeout_seconds from somewhere + # TODO: get timeout_seconds from somewhere ) Core::Transport::HTTP::Adapters::Net.new(agent_settings) end From a18f4a7d7f8719ec0a09c8ac5092b6cf6f351e04 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Apr 2025 13:15:30 -0400 Subject: [PATCH 05/10] types --- .../core/telemetry/http/adapters/net.rbs | 53 ------------------- sig/datadog/core/telemetry/http/env.rbs | 17 ------ sig/datadog/core/telemetry/http/response.rbs | 38 ------------- 3 files changed, 108 deletions(-) delete mode 100644 sig/datadog/core/telemetry/http/adapters/net.rbs delete mode 100644 sig/datadog/core/telemetry/http/env.rbs delete mode 100644 sig/datadog/core/telemetry/http/response.rbs diff --git a/sig/datadog/core/telemetry/http/adapters/net.rbs b/sig/datadog/core/telemetry/http/adapters/net.rbs deleted file mode 100644 index 311c5989f95..00000000000 --- a/sig/datadog/core/telemetry/http/adapters/net.rbs +++ /dev/null @@ -1,53 +0,0 @@ -module Datadog - module Core - module Telemetry - module Http - module Adapters - class Net - type response = Datadog::Core::Telemetry::Http::Adapters::Net::Response | ::Datadog::Core::Telemetry::Http::InternalErrorResponse - - attr_reader hostname: String - - attr_reader port: Integer? - - attr_reader timeout: Float | Integer - - attr_reader ssl: bool - - DEFAULT_TIMEOUT: 2 - - def initialize: (hostname: String, ?port: Integer?, ?timeout: Float | Integer, ?ssl: bool?) -> void - - def open: () { (::Net::HTTP http) -> ::Net::HTTPResponse } -> untyped - - def post: (untyped env) -> response - - class Response - include Datadog::Core::Telemetry::Http::Response - - attr_reader http_response: untyped - - def initialize: (untyped http_response) -> void - - def payload: () -> untyped - - def code: () -> untyped - - def ok?: () -> untyped - - def unsupported?: () -> untyped - - def not_found?: () -> untyped - - def client_error?: () -> untyped - - def server_error?: () -> untyped - - def inspect: () -> ::String - end - end - end - end - end - end -end diff --git a/sig/datadog/core/telemetry/http/env.rbs b/sig/datadog/core/telemetry/http/env.rbs deleted file mode 100644 index 6ac89163b00..00000000000 --- a/sig/datadog/core/telemetry/http/env.rbs +++ /dev/null @@ -1,17 +0,0 @@ -module Datadog - module Core - module Telemetry - module Http - class Env - attr_accessor path: untyped - - attr_accessor body: untyped - - attr_writer headers: untyped - - def headers: () -> untyped - end - end - end - end -end diff --git a/sig/datadog/core/telemetry/http/response.rbs b/sig/datadog/core/telemetry/http/response.rbs deleted file mode 100644 index 4113c007214..00000000000 --- a/sig/datadog/core/telemetry/http/response.rbs +++ /dev/null @@ -1,38 +0,0 @@ -module Datadog - module Core - module Telemetry - module Http - module Response - def payload: () -> nil - - def ok?: () -> nil - - def unsupported?: () -> nil - - def code: () -> nil - - def not_found?: () -> nil - - def client_error?: () -> nil - - def server_error?: () -> nil - - def internal_error?: () -> nil - - def inspect: () -> ::String - end - class InternalErrorResponse - include Response - - attr_reader error: untyped - - def initialize: (untyped error) -> void - - def internal_error?: () -> true - - def inspect: () -> ::String - end - end - end - end -end From dbf28d2a8a5443493a1c4d35d6ec35e3d0a4add8 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Apr 2025 13:20:23 -0400 Subject: [PATCH 06/10] fix types --- sig/datadog/core/configuration/agent_settings_resolver.rbs | 2 +- sig/datadog/core/telemetry/emitter.rbs | 2 +- sig/datadog/core/telemetry/http/transport.rbs | 6 +++--- sig/datadog/core/telemetry/worker.rbs | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sig/datadog/core/configuration/agent_settings_resolver.rbs b/sig/datadog/core/configuration/agent_settings_resolver.rbs index e3a2472abf4..e06b3533762 100644 --- a/sig/datadog/core/configuration/agent_settings_resolver.rbs +++ b/sig/datadog/core/configuration/agent_settings_resolver.rbs @@ -3,7 +3,7 @@ module Datadog module Configuration class AgentSettingsResolver class AgentSettings - def initialize: (adapter: untyped, ssl: untyped, hostname: untyped, port: untyped, uds_path: untyped, timeout_seconds: untyped) -> void + def initialize: (?adapter: untyped, ?ssl: untyped, ?hostname: untyped, ?port: untyped, ?uds_path: untyped, ?timeout_seconds: untyped) -> void attr_reader adapter: untyped attr_reader ssl: untyped diff --git a/sig/datadog/core/telemetry/emitter.rbs b/sig/datadog/core/telemetry/emitter.rbs index 5a72c55071f..bbf1bcd573f 100644 --- a/sig/datadog/core/telemetry/emitter.rbs +++ b/sig/datadog/core/telemetry/emitter.rbs @@ -8,7 +8,7 @@ module Datadog extend Core::Utils::Forking def initialize: (http_transport: Datadog::Core::Telemetry::Http::Transport) -> void - def request: (Datadog::Core::Telemetry::Event::Base event) -> (Datadog::Core::Telemetry::Http::Adapters::Net::Response | Datadog::Core::Telemetry::Http::InternalErrorResponse) + def request: (Datadog::Core::Telemetry::Event::Base event) -> (Datadog::Core::Transport::HTTP::Adapters::Net::Response | Datadog::Core::Transport::InternalErrorResponse) def self.sequence: () -> Datadog::Core::Utils::Sequence end end diff --git a/sig/datadog/core/telemetry/http/transport.rbs b/sig/datadog/core/telemetry/http/transport.rbs index 7a50a6941e5..4dffbabe3ef 100644 --- a/sig/datadog/core/telemetry/http/transport.rbs +++ b/sig/datadog/core/telemetry/http/transport.rbs @@ -3,7 +3,7 @@ module Datadog module Telemetry module Http class Transport - @adapter: Http::Adapters::Net + @adapter: Core::Transport::HTTP::Adapters::Net def self.build_agentless_transport: (api_key: String?, dd_site: String, ?url_override: String?) -> Transport @@ -21,13 +21,13 @@ module Datadog def initialize: (host: String, port: Integer, path: String, ?ssl: bool, ?api_key: String?) -> void - def request: (request_type: String, payload: String) -> Datadog::Core::Telemetry::Http::Adapters::Net::response + def request: (request_type: String, payload: String) -> Datadog::Core::Transport::HTTP::Adapters::Net::Response private def headers: (request_type: untyped, ?api_version: untyped) -> ::Hash[untyped, untyped] - def adapter: () -> Http::Adapters::Net + def adapter: () -> Core::Transport::HTTP::Adapters::Net end end end diff --git a/sig/datadog/core/telemetry/worker.rbs b/sig/datadog/core/telemetry/worker.rbs index a88657d349f..e4bd6d0ccd8 100644 --- a/sig/datadog/core/telemetry/worker.rbs +++ b/sig/datadog/core/telemetry/worker.rbs @@ -46,11 +46,11 @@ module Datadog def flush_events: (Array[Event::Base] events) -> void - def send_event: (Event::Base event) -> (Http::Adapters::Net::Response | Telemetry::Http::InternalErrorResponse) + def send_event: (Event::Base event) -> (Core::Transport::HTTP::Adapters::Net::Response | Core::Transport::InternalErrorResponse) def disable!: () -> void - def disable_on_not_found!: ((Http::Adapters::Net::Response | Telemetry::Http::InternalErrorResponse) response) -> void + def disable_on_not_found!: ((Core::Transport::HTTP::Adapters::Net::Response | Core::Transport::InternalErrorResponse) response) -> void def buffer_klass: () -> untyped end From 8390051ba1b89867987cced8037f3f75608e6399 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Apr 2025 13:23:08 -0400 Subject: [PATCH 07/10] type --- sig/datadog/core/configuration/agent_settings_resolver.rbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sig/datadog/core/configuration/agent_settings_resolver.rbs b/sig/datadog/core/configuration/agent_settings_resolver.rbs index e06b3533762..7ad438e25a2 100644 --- a/sig/datadog/core/configuration/agent_settings_resolver.rbs +++ b/sig/datadog/core/configuration/agent_settings_resolver.rbs @@ -5,7 +5,7 @@ module Datadog class AgentSettings def initialize: (?adapter: untyped, ?ssl: untyped, ?hostname: untyped, ?port: untyped, ?uds_path: untyped, ?timeout_seconds: untyped) -> void - attr_reader adapter: untyped + attr_reader adapter: :net_http | :unix attr_reader ssl: untyped attr_reader hostname: untyped attr_reader port: untyped From bf387ae2b932936cbb17f13be519a1c191f2fc12 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 28 Apr 2025 11:06:12 -0400 Subject: [PATCH 08/10] compat for datadog-ci-rb --- .../core/telemetry/http/adapters/net.rb | 26 +++++++++++++++++++ .../core/telemetry/http/adapters/net.rbs | 12 +++++++++ 2 files changed, 38 insertions(+) create mode 100644 lib/datadog/core/telemetry/http/adapters/net.rb create mode 100644 sig/datadog/core/telemetry/http/adapters/net.rbs diff --git a/lib/datadog/core/telemetry/http/adapters/net.rb b/lib/datadog/core/telemetry/http/adapters/net.rb new file mode 100644 index 00000000000..b3fef26ea68 --- /dev/null +++ b/lib/datadog/core/telemetry/http/adapters/net.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +# datadog-ci-rb versions 1.15.0 and lower require this file and guard +# the require with a rescue of StandardError. Unfortunately LoadError, +# which would be raised if the file is missing, is not a subclass of +# StandardError and thus would not be caught by the rescue. +# We provide this file with a dummy class in it to avoid exceptions +# in datadog-ci-rb until version 2.0 is released. +# +# Note that datadog-ci-rb patches telemetry transport to be "real" even when +# webmock is used; this patching won't work with datadog-ci-rb versions +# 1.15.0 and older and dd-trace-rb 2.16.0 and newer. There will be no +# errors/exceptions reported but telemetry events will not be sent. + +module Datadog + module Core + module Telemetry + module Http + module Adapters + class Net + end + end + end + end + end +end diff --git a/sig/datadog/core/telemetry/http/adapters/net.rbs b/sig/datadog/core/telemetry/http/adapters/net.rbs new file mode 100644 index 00000000000..ab5721aa9d6 --- /dev/null +++ b/sig/datadog/core/telemetry/http/adapters/net.rbs @@ -0,0 +1,12 @@ +module Datadog + module Core + module Telemetry + module Http + module Adapters + class Net + end + end + end + end + end +end From 10fdb16a8137c22a7a7014d0cf6b2b5f2b2fd080 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 29 Apr 2025 13:53:27 -0400 Subject: [PATCH 09/10] rubocop --- lib/datadog/core/telemetry/http/adapters/net.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/datadog/core/telemetry/http/adapters/net.rb b/lib/datadog/core/telemetry/http/adapters/net.rb index b3fef26ea68..afefdf9e427 100644 --- a/lib/datadog/core/telemetry/http/adapters/net.rb +++ b/lib/datadog/core/telemetry/http/adapters/net.rb @@ -17,7 +17,7 @@ module Core module Telemetry module Http module Adapters - class Net + class Net # rubocop:disable Lint/EmptyClass end end end From 53466aee912b2c6e7325045550fc56a60b648f60 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 29 Apr 2025 13:56:32 -0400 Subject: [PATCH 10/10] retest