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
17 changes: 16 additions & 1 deletion bottlecap/src/lifecycle/invocation/span_inferrer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,22 @@ impl SpanInferrer {
inferred_span.start - wrapped_inferred_span.start;

self.wrapped_inferred_span = Some(wrapped_inferred_span);
}
} else if let Ok(event_bridge_entity) =
serde_json::from_str::<EventBridgeEvent>(&t.body)
{
let mut wrapped_inferred_span = Span {
span_id: Self::generate_span_id(),
..Default::default()
};

event_bridge_entity.enrich_span(&mut wrapped_inferred_span);
inferred_span.meta.extend(event_bridge_entity.get_tags());

wrapped_inferred_span.duration =
inferred_span.start - wrapped_inferred_span.start;

self.wrapped_inferred_span = Some(wrapped_inferred_span);
};

trigger = Some(Box::new(t));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ mod tests {

let expected = DynamoDbRecord {
dynamodb: DynamoDbEntity {
approximate_creation_date_time: 1428537600.0,
approximate_creation_date_time: 1_428_537_600.0,
size_bytes: 26,
stream_view_type: String::from("NEW_AND_OLD_IMAGES"),
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ mod tests {

assert_eq!(span.resource, "testBus");
// Seconds resolution
assert_eq!(span.start, 1731140535000000000);
assert_eq!(span.start, 1_731_140_535_000_000_000);
}

#[test]
Expand Down
33 changes: 31 additions & 2 deletions bottlecap/src/lifecycle/invocation/triggers/sqs_event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use tracing::debug;
use crate::lifecycle::invocation::{
processor::MS_TO_NS,
triggers::{
event_bridge_event::EventBridgeEvent,
get_aws_partition_by_region,
sns_event::{SnsEntity, SnsRecord},
Trigger, DATADOG_CARRIER_KEY, FUNCTION_TRIGGER_EVENT_SOURCE_TAG,
Expand Down Expand Up @@ -180,8 +181,6 @@ impl Trigger for SqsRecord {
}
}

// TODO: Check for EventBridge event sent through SQS

// Check for SNS event sent through SQS
if let Ok(sns_entity) = serde_json::from_str::<SnsEntity>(&self.body) {
let sns_record = SnsRecord {
Expand All @@ -190,6 +189,8 @@ impl Trigger for SqsRecord {
};

return sns_record.get_carrier();
} else if let Ok(event) = serde_json::from_str::<EventBridgeEvent>(&self.body) {
return event.get_carrier();
}

// TODO: AWSTraceHeader
Expand Down Expand Up @@ -362,4 +363,32 @@ mod tests {

assert_eq!(carrier, expected);
}

#[test]
fn test_get_carrier_from_eventbridge() {
let json = read_json_file("eventbridge_sqs_event.json");
let payload = serde_json::from_str(&json).expect("Failed to deserialize into Value");
let event = SqsRecord::new(payload).expect("Failed to deserialize EventBridgeEvent");
let carrier = event.get_carrier();

let expected = HashMap::from([
(
"x-datadog-trace-id".to_string(),
"7379586022458917877".to_string(),
),
(
"traceparent".to_string(),
"00-000000000000000066698e63821a03f5-24b17e9b6476c018-01".to_string(),
),
("x-datadog-tags".to_string(), "_dd.p.dm=-0".to_string()),
(
"x-datadog-parent-id".to_string(),
"2644033662113726488".to_string(),
),
("tracestate".to_string(), "dd=t.dm:-0;s:1".to_string()),
("x-datadog-sampling-priority".to_string(), "1".to_string()),
]);

assert_eq!(carrier, expected);
}
}
21 changes: 21 additions & 0 deletions bottlecap/tests/payloads/eventbridge_sqs_event.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"Records": [
{
"messageId": "e995e54f-1724-41fa-82c0-8b81821f854e",
"receiptHandle": "AQEB4mIfRcyqtzn1X5Ss+ConhTejVGc+qnAcmu3/Z9ZvbNkaPcpuDLX/bzvPD/ZkAXJUXZcemGSJmd7L3snZHKMP2Ck8runZiyl4mubiLb444pZvdiNPuGRJ6a3FvgS/GQPzho/9nNMyOi66m8Viwh70v4EUCPGO4JmD3TTDAUrrcAnqU4WSObjfC/NAp9bI6wH2CEyAYEfex6Nxplbl/jBf9ZUG0I3m3vQd0Q4l4gd4jIR4oxQUglU2Tldl4Kx5fMUAhTRLAENri6HsY81avBkKd9FAuxONlsITB5uj02kOkvLlRGEcalqsKyPJ7AFaDLrOLaL3U+yReroPEJ5R5nwhLOEbeN5HROlZRXeaAwZOIN8BjqdeooYTIOrtvMEVb7a6OPLMdH1XB+ddevtKAH8K9Tm2ZjpaA7dtBGh1zFVHzBk=",
"body": "{\"version\":\"0\",\"id\":\"af718b2a-b987-e8c0-7a2b-a188fad2661a\",\"detail-type\":\"my.Detail\",\"source\":\"my.Source\",\"account\":\"425362996713\",\"time\":\"2023-08-03T22:49:03Z\",\"region\":\"us-east-1\",\"resources\":[],\"detail\":{\"text\":\"Hello, world!\",\"_datadog\":{\"x-datadog-trace-id\":\"7379586022458917877\",\"x-datadog-parent-id\":\"2644033662113726488\",\"x-datadog-sampling-priority\":\"1\",\"x-datadog-tags\":\"_dd.p.dm=-0\",\"traceparent\":\"00-000000000000000066698e63821a03f5-24b17e9b6476c018-01\",\"tracestate\":\"dd=t.dm:-0;s:1\"}}}",
"attributes": {
"ApproximateReceiveCount": "1",
"AWSTraceHeader": "Root=1-64cc2edd-112fbf1701d1355973a11d57;Parent=7d5a9776024b2d42;Sampled=0",
"SentTimestamp": "1691102943638",
"SenderId": "AIDAJXNJGGKNS7OSV23OI",
"ApproximateFirstReceiveTimestamp": "1691102943647"
},
"messageAttributes": {},
"md5OfBody": "93d9f0cd8886d1e000a1a0b7007bffc4",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-1:425362996713:lambda-eb-sqs-lambda-dev-demo-queue",
"awsRegion": "us-east-1"
}
]
}