From b2ac8fb7a4b4350975c938cb7666a5a575b7d169 Mon Sep 17 00:00:00 2001 From: Doug Smith Date: Wed, 8 Nov 2023 11:14:57 -0500 Subject: [PATCH 1/2] fix(datadog_agent source): return 200 on empty object payload --- src/sources/datadog_agent/logs.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sources/datadog_agent/logs.rs b/src/sources/datadog_agent/logs.rs index 8be7cb8a391f3..67eff4b19c07f 100644 --- a/src/sources/datadog_agent/logs.rs +++ b/src/sources/datadog_agent/logs.rs @@ -67,8 +67,9 @@ pub(crate) fn decode_log_body( api_key: Option>, source: &DatadogAgentSource, ) -> Result, ErrorMessage> { - if body.is_empty() { + if body.is_empty() || body.as_ref() == b"{}" { // The datadog agent may send an empty payload as a keep alive + // https://github.com/DataDog/datadog-agent/blob/5a6c5dd75a2233fbf954e38ddcc1484df4c21a35/pkg/logs/client/http/destination.go#L52 debug!( message = "Empty payload ignored.", internal_log_rate_limit = true From 819f0552f82d9ea99d0ccac918693c4dc2047596 Mon Sep 17 00:00:00 2001 From: Doug Smith Date: Wed, 8 Nov 2023 11:23:46 -0500 Subject: [PATCH 2/2] add test --- src/sources/datadog_agent/tests.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/sources/datadog_agent/tests.rs b/src/sources/datadog_agent/tests.rs index 657a59c8067db..0c569340e5c02 100644 --- a/src/sources/datadog_agent/tests.rs +++ b/src/sources/datadog_agent/tests.rs @@ -120,6 +120,27 @@ fn test_decode_log_body() { QuickCheck::new().quickcheck(inner as fn(Vec) -> TestResult); } +#[test] +fn test_decode_log_body_empty_object() { + let body = Bytes::from("{}"); + let api_key = None; + let decoder = crate::codecs::Decoder::new( + Framer::Bytes(BytesDecoder::new()), + Deserializer::Bytes(BytesDeserializer), + ); + + let source = DatadogAgentSource::new( + true, + decoder, + "http", + test_logs_schema_definition(), + LogNamespace::Legacy, + ); + + let events = decode_log_body(body, api_key, &source).unwrap(); + assert_eq!(events.len(), 0); +} + #[test] fn generate_config() { crate::test_util::test_generate_config::();