Skip to content

Commit

Permalink
implement endpoint_payload.events_serialization_ms metric
Browse files Browse the repository at this point in the history
  • Loading branch information
anmarchenko committed Jul 25, 2024
1 parent e757ec1 commit d2bf692
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 9 deletions.
14 changes: 10 additions & 4 deletions lib/datadog/ci/transport/event_platform_transport.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

require "datadog/core/encoding"
require "datadog/core/chunker"
require "datadog/core/utils/time"

require_relative "telemetry"

Expand All @@ -26,12 +27,17 @@ def send_events(events)

Datadog.logger.debug { "[#{self.class.name}] Sending #{events.count} events..." }

encoded_events = encode_events(events)
if encoded_events.empty?
Datadog.logger.debug { "[#{self.class.name}] Empty encoded events list, skipping send" }
return []
encoded_events = []
# @type var serialization_duration_ms: Float
serialization_duration_ms = Core::Utils::Time.measure(:float_millisecond) do
encoded_events = encode_events(events)
if encoded_events.empty?
Datadog.logger.debug { "[#{self.class.name}] Empty encoded events list, skipping send" }
return []
end
end

Telemetry.endpoint_payload_serialization_ms(serialization_duration_ms, telemetry_endpoint_tag)
Telemetry.events_enqueued_for_serialization(encoded_events.count)

responses = []
Expand Down
8 changes: 8 additions & 0 deletions lib/datadog/ci/transport/telemetry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ def self.endpoint_payload_events_count(count, endpoint)
{Ext::Telemetry::TAG_ENDPOINT => endpoint}
)
end

def self.endpoint_payload_serialization_ms(duration_ms, endpoint)
Utils::Telemetry.distribution(
Ext::Telemetry::METRIC_ENDPOINT_PAYLOAD_EVENTS_SERIALIZATION_MS,
duration_ms,
{Ext::Telemetry::TAG_ENDPOINT => endpoint}
)
end
end
end
end
Expand Down
2 changes: 2 additions & 0 deletions sig/datadog/ci/transport/telemetry.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ module Datadog
def self.events_enqueued_for_serialization: (Integer count) -> void

def self.endpoint_payload_events_count: (Integer count, String endpoint) -> void

def self.endpoint_payload_serialization_ms: (Float duration_ms, String endpoint) -> void
end
end
end
Expand Down
5 changes: 5 additions & 0 deletions spec/datadog/ci/test_visibility/transport_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@

it_behaves_like "emits telemetry metric", :inc, "events_enqueued_for_serialization", 1
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_count", 1
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_serialization_ms"

it "tags event with test_cycle endpoint" do
subject
Expand Down Expand Up @@ -138,6 +139,7 @@

it_behaves_like "emits telemetry metric", :inc, "events_enqueued_for_serialization", 4
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_count", 4
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_serialization_ms"

context "when some spans are broken" do
let(:expected_events_count) { 3 }
Expand Down Expand Up @@ -173,6 +175,7 @@

it_behaves_like "emits telemetry metric", :inc, "events_enqueued_for_serialization", 3
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_count", 3
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_serialization_ms"
end

context "when chunking is used" do
Expand All @@ -188,6 +191,8 @@
end

it_behaves_like "emits telemetry metric", :inc, "events_enqueued_for_serialization", 4
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_count"
it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_serialization_ms"
end

context "when max_payload-size is too small" do
Expand Down
27 changes: 22 additions & 5 deletions spec/datadog/ci/transport/telemetry_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@

RSpec.describe Datadog::CI::Transport::Telemetry do
describe ".events_enqueued_for_serialization" do
subject(:events_enqueued_for_serialization) { described_class.events_enqueued_for_serialization(count) }
subject { described_class.events_enqueued_for_serialization(count) }

let(:count) { 1 }

it "increments the events enqueued metric" do
expect(Datadog::CI::Utils::Telemetry).to receive(:inc).with(Datadog::CI::Ext::Telemetry::METRIC_EVENTS_ENQUEUED, count)

events_enqueued_for_serialization
subject
end
end

describe ".endpoint_payload_events_count" do
subject(:endpoint_payload_events_count) { described_class.endpoint_payload_events_count(count, endpoint) }
subject { described_class.endpoint_payload_events_count(count, endpoint) }

let(:count) { 1 }
let(:endpoint) { "citestcycle" }
let(:endpoint) { "test_cycle" }

it "tracks the endpoint payload events count distribution" do
expect(Datadog::CI::Utils::Telemetry).to receive(:distribution).with(
Expand All @@ -28,7 +28,24 @@
{Datadog::CI::Ext::Telemetry::TAG_ENDPOINT => endpoint}
)

endpoint_payload_events_count
subject
end
end

describe ".endpoint_payload_serialization_ms" do
subject { described_class.endpoint_payload_serialization_ms(duration_ms, endpoint) }

let(:duration_ms) { 1.5 }
let(:endpoint) { "test_cycle" }

it "tracks the endpoint payload events serialization duration distribution" do
expect(Datadog::CI::Utils::Telemetry).to receive(:distribution).with(
Datadog::CI::Ext::Telemetry::METRIC_ENDPOINT_PAYLOAD_EVENTS_SERIALIZATION_MS,
duration_ms,
{Datadog::CI::Ext::Telemetry::TAG_ENDPOINT => endpoint}
)

subject
end
end
end

0 comments on commit d2bf692

Please sign in to comment.