Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/datadog/statsd.rb
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ def initialize(
origin_detection_enabled = origin_detection_enabled?(origin_detection)
container_id = get_container_id(container_id, origin_detection_enabled)

external_data = sanitize(ENV['DD_EXTERNAL_ENV'])
external_data = sanitize(ENV['DD_EXTERNAL_ENV']) if origin_detection_enabled

@serializer = Serialization::Serializer.new(prefix: @prefix,
container_id: container_id,
Expand Down
2 changes: 1 addition & 1 deletion lib/datadog/statsd/telemetry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def initialize(flush_interval, container_id, external_data, cardinality, global_
end

def would_fit_in?(max_buffer_payload_size)
MAX_TELEMETRY_MESSAGE_SIZE_WT_TAGS + serialized_tags.size < max_buffer_payload_size
MAX_TELEMETRY_MESSAGE_SIZE_WT_TAGS + serialized_tags.size + serialized_fields.size < max_buffer_payload_size
end

def reset
Expand Down
28 changes: 16 additions & 12 deletions spec/matchers/telemetry_matcher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,24 @@ def add_telemetry(text,
packets_dropped: 0,
packets_dropped_queue: 0,
packets_dropped_writer: 0,
transport: 'udp')
transport: 'udp',
external_env: '',
container: '')
external_env = "|e:#{external_env}" unless external_env.empty?
container = "|c:#{container}" unless container.empty?
[
text,
"datadog.dogstatsd.client.metrics:#{metrics}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.events:#{events}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.service_checks:#{service_checks}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.bytes_sent:#{bytes_sent}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.bytes_dropped:#{bytes_dropped}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.bytes_dropped_queue:#{bytes_dropped_queue}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.bytes_dropped_writer:#{bytes_dropped_writer}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.packets_sent:#{packets_sent}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.packets_dropped:#{packets_dropped}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.packets_dropped_queue:#{packets_dropped_queue}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.packets_dropped_writer:#{packets_dropped_writer}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}",
"datadog.dogstatsd.client.metrics:#{metrics}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.events:#{events}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.service_checks:#{service_checks}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.bytes_sent:#{bytes_sent}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.bytes_dropped:#{bytes_dropped}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.bytes_dropped_queue:#{bytes_dropped_queue}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.bytes_dropped_writer:#{bytes_dropped_writer}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.packets_sent:#{packets_sent}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.packets_dropped:#{packets_dropped}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.packets_dropped_queue:#{packets_dropped_queue}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
"datadog.dogstatsd.client.packets_dropped_writer:#{packets_dropped_writer}|c|#client:ruby,client_version:#{Datadog::Statsd::VERSION},client_transport:#{transport}#{container}#{external_env}",
].join("\n")
end

Expand Down
51 changes: 48 additions & 3 deletions spec/statsd_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
tags: tags,
logger: logger,
telemetry_flush_interval: -1,
# Only turn off origin detection for linux, other
# platforms should work as before even with it enabled.
origin_detection: !RUBY_PLATFORM.include?("linux"),
origin_detection: origin_detection,
container_id: container_id,
)
end

let(:container_id) { nil }
let(:namespace) { 'sample_ns' }
let(:sample_rate) { nil }
let(:tags) { %w[abc def] }
Expand All @@ -25,6 +25,11 @@
end
end
let(:log) { StringIO.new }
let(:origin_detection) do
# Only turn off origin detection for linux, other
# platforms should work as before even with it enabled.
!RUBY_PLATFORM.include?("linux")
end

before do
allow(Socket).to receive(:new).and_return(socket)
Expand Down Expand Up @@ -1295,4 +1300,44 @@ class Datadog::Statsd::SomeClass; end
expect(socket.recv[0]).to eq_with_telemetry 'stat:1|c|#yolo'
end
end

describe 'External env' do
let(:tags) { nil }

before do
ENV['DD_EXTERNAL_ENV'] = 'it-false,cn-nginx-webserver,pu-75a2b6d5-3949-4afb-ad0d-92ff0674e759'
end

context 'with origin detection configured on' do
let(:origin_detection) { true }
let(:container_id) { "container" }

it 'outputs the external env value' do
subject.gauge('thing', 42)
subject.flush(sync: true)

# With the lengthy external env being included in the telemetry payload, we send multiple payloads
# and need to capture them all.
packets = []
while (packet = socket.recv)
packets << packet[0]
end
combined_message = packets.join("\n")

expect(combined_message).to eq_with_telemetry('sample_ns.thing:42|g|c:container|e:it-false,cn-nginx-webserver,pu-75a2b6d5-3949-4afb-ad0d-92ff0674e759',
container: 'container', external_env: 'it-false,cn-nginx-webserver,pu-75a2b6d5-3949-4afb-ad0d-92ff0674e759')
end
end

context 'with origin detection configured off' do
let(:origin_detection) { false }

it 'does not output the external env value' do
subject.gauge('thing', 42)
subject.flush(sync: true)

expect(socket.recv[0]).to eq_with_telemetry 'sample_ns.thing:42|g'
end
end
end
end
Loading