From 3cbb9f855c5ab3c8d680308df43e5ab274383baa Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 25 Jul 2024 12:57:25 +0200 Subject: [PATCH] implement endpoint_payload.requests metric --- .../ci/transport/event_platform_transport.rb | 7 +++- lib/datadog/ci/transport/telemetry.rb | 17 +++++++-- sig/datadog/ci/transport/telemetry.rbs | 4 ++- .../coverage/transport_spec.rb | 4 +++ .../ci/test_visibility/transport_spec.rb | 4 +++ spec/datadog/ci/transport/telemetry_spec.rb | 35 +++++++++++++++++++ 6 files changed, 67 insertions(+), 4 deletions(-) diff --git a/lib/datadog/ci/transport/event_platform_transport.rb b/lib/datadog/ci/transport/event_platform_transport.rb index 738b9285..c20c888c 100644 --- a/lib/datadog/ci/transport/event_platform_transport.rb +++ b/lib/datadog/ci/transport/event_platform_transport.rb @@ -37,8 +37,8 @@ def send_events(events) end end - Telemetry.endpoint_payload_serialization_ms(serialization_duration_ms, endpoint: telemetry_endpoint_tag) Telemetry.events_enqueued_for_serialization(encoded_events.count) + Telemetry.endpoint_payload_serialization_ms(serialization_duration_ms, endpoint: telemetry_endpoint_tag) responses = [] @@ -51,6 +51,11 @@ def send_events(events) response = send_payload(encoded_payload) + Telemetry.endpoint_payload_requests( + 1, + endpoint: telemetry_endpoint_tag, compressed: response.request_compressed + ) + # HTTP layer could send events and exhausted retries (if any) unless response.ok? Telemetry.endpoint_payload_dropped(chunk.count, endpoint: telemetry_endpoint_tag) diff --git a/lib/datadog/ci/transport/telemetry.rb b/lib/datadog/ci/transport/telemetry.rb index f9a32a25..1a6d455b 100644 --- a/lib/datadog/ci/transport/telemetry.rb +++ b/lib/datadog/ci/transport/telemetry.rb @@ -35,8 +35,21 @@ def self.endpoint_payload_dropped(count, endpoint:) ) end - def self.tags(endpoint:) - {Ext::Telemetry::TAG_ENDPOINT => endpoint} + def self.endpoint_payload_requests(count, endpoint:, compressed:) + Utils::Telemetry.inc( + Ext::Telemetry::METRIC_ENDPOINT_PAYLOAD_REQUESTS, + count, + tags(endpoint: endpoint, request_compressed: compressed) + ) + end + + def self.tags(endpoint:, request_compressed: false) + # @type var tags: Hash[String, String] + tags = {Ext::Telemetry::TAG_ENDPOINT => endpoint} + + tags[Ext::Telemetry::TAG_REQUEST_COMPRESSED] = "true" if request_compressed + + tags end end end diff --git a/sig/datadog/ci/transport/telemetry.rbs b/sig/datadog/ci/transport/telemetry.rbs index 0280def3..0ec6363c 100644 --- a/sig/datadog/ci/transport/telemetry.rbs +++ b/sig/datadog/ci/transport/telemetry.rbs @@ -10,7 +10,9 @@ module Datadog def self.endpoint_payload_dropped: (Integer count, endpoint: String) -> void - def self.tags: (endpoint: String) -> Hash[String, String] + def self.endpoint_payload_requests: (Integer count, endpoint: String, compressed: bool) -> void + + def self.tags: (endpoint: String, ?request_compressed: bool) -> Hash[String, String] end end end diff --git a/spec/datadog/ci/test_optimisation/coverage/transport_spec.rb b/spec/datadog/ci/test_optimisation/coverage/transport_spec.rb index 6d25e4c8..17e55c2b 100644 --- a/spec/datadog/ci/test_optimisation/coverage/transport_spec.rb +++ b/spec/datadog/ci/test_optimisation/coverage/transport_spec.rb @@ -51,6 +51,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_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" it "tags event with code_coverage endpoint" do subject @@ -96,6 +97,7 @@ it_behaves_like "emits telemetry metric", :inc, "events_enqueued_for_serialization", 2 it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_count", 2 it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_serialization_ms" + it_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" context "when some events are invalid" do let(:events) do @@ -135,6 +137,7 @@ 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_behaves_like "emits telemetry metric", :inc, "endpoint_payload.dropped", 1 + it_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" end context "when chunking is used" do @@ -151,6 +154,7 @@ it_behaves_like "emits telemetry metric", :inc, "events_enqueued_for_serialization", 2 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_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" end context "when max_payload-size is too small" do diff --git a/spec/datadog/ci/test_visibility/transport_spec.rb b/spec/datadog/ci/test_visibility/transport_spec.rb index c42e7804..dcef0762 100644 --- a/spec/datadog/ci/test_visibility/transport_spec.rb +++ b/spec/datadog/ci/test_visibility/transport_spec.rb @@ -65,6 +65,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_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" context "when HTTP response is not OK" do before do @@ -148,6 +149,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" + it_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" context "when HTTP response is not OK" do before do @@ -193,6 +195,7 @@ it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_count", 3 it_behaves_like "emits telemetry metric", :distribution, "endpoint_payload.events_serialization_ms" it_behaves_like "emits telemetry metric", :inc, "endpoint_payload.dropped" + it_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" end context "when chunking is used" do @@ -210,6 +213,7 @@ 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" + it_behaves_like "emits telemetry metric", :inc, "endpoint_payload.requests" end context "when max_payload-size is too small" do diff --git a/spec/datadog/ci/transport/telemetry_spec.rb b/spec/datadog/ci/transport/telemetry_spec.rb index 8eee3003..8547e2c3 100644 --- a/spec/datadog/ci/transport/telemetry_spec.rb +++ b/spec/datadog/ci/transport/telemetry_spec.rb @@ -65,4 +65,39 @@ subject end end + + describe ".endpoint_payload_requests" do + subject { described_class.endpoint_payload_requests(count, endpoint: endpoint, compressed: compressed) } + + let(:count) { 1 } + let(:endpoint) { "test_cycle" } + let(:compressed) { true } + + it "increments the endpoint payload requests metric" do + expect(Datadog::CI::Utils::Telemetry).to receive(:inc).with( + Datadog::CI::Ext::Telemetry::METRIC_ENDPOINT_PAYLOAD_REQUESTS, + count, + { + Datadog::CI::Ext::Telemetry::TAG_ENDPOINT => endpoint, + Datadog::CI::Ext::Telemetry::TAG_REQUEST_COMPRESSED => "true" + } + ) + + subject + end + + context "when not compressed" do + let(:compressed) { false } + + it "incremenets metric without request compressed tag" do + expect(Datadog::CI::Utils::Telemetry).to receive(:inc).with( + Datadog::CI::Ext::Telemetry::METRIC_ENDPOINT_PAYLOAD_REQUESTS, + count, + {Datadog::CI::Ext::Telemetry::TAG_ENDPOINT => endpoint} + ) + + subject + end + end + end end