Skip to content

Commit

Permalink
add support for xray trace header passthrough
Browse files Browse the repository at this point in the history
  • Loading branch information
ljacobsson committed Jul 14, 2022
1 parent afd86ba commit 65fa2da
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 98 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mhlabs/events-client",
"version": "0.0.18",
"version": "0.0.19",
"description": "Thin client for Amazon EventBridge with support for a metadata/data message pattern",
"main": "index.js",
"scripts": {
Expand Down
7 changes: 7 additions & 0 deletions src/events-client.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ class Client {
event.metadata.correlationId = event.data.new._correlation_id;
delete event.data.new._correlation_id;
}

let traceId;
if (event.data && event.data.new && event.data.new._xray_trace_id) {
traceId = event.data.new._xray_trace_id;
delete event.data.new._xray_trace_id;
}

this.jsonDiff(event);
if (largeNodes) {
Expand All @@ -37,6 +43,7 @@ class Client {
DetailType: detailType,
Detail: JSON.stringify(event),
EventBusName: this.busName,
TraceHeader: traceId
};
}

Expand Down
202 changes: 107 additions & 95 deletions tests/dynamodb.json
Original file line number Diff line number Diff line change
@@ -1,99 +1,111 @@
{
"Records": [
{
"eventID": "1",
"eventName": "INSERT",
"eventVersion": "1.0",
"eventSource": "aws:dynamodb",
"awsRegion": "us-east-1",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
},
"_correlation_id": {
"S": "abc123"
}
},
"SequenceNumber": "111",
"SizeBytes": 26,
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"eventSourceARN": "stream-ARN"
"Records": [
{
"eventID": "1",
"eventName": "INSERT",
"eventVersion": "1.0",
"eventSource": "aws:dynamodb",
"awsRegion": "us-east-1",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
{
"eventID": "2",
"eventName": "MODIFY",
"eventVersion": "1.0",
"eventSource": "aws:dynamodb",
"awsRegion": "us-east-1",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
},
"_correlation_id": {
"S": "abc123"
}
},
"OldImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"SequenceNumber": "222",
"SizeBytes": 59,
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"eventSourceARN": "stream-ARN"
"NewImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
},
"_correlation_id": {
"S": "abc123"
},
"_xray_trace_id": {
"S": "abc123"
}
},
{
"eventID": "3",
"eventName": "REMOVE",
"eventVersion": "1.0",
"eventSource": "aws:dynamodb",
"awsRegion": "us-east-1",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"OldImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
},
"_correlation_id": {
"S": "abc123"
}
},
"SequenceNumber": "333",
"SizeBytes": 38,
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"eventSourceARN": "stream-ARN"
}
]
"SequenceNumber": "111",
"SizeBytes": 26,
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"eventSourceARN": "stream-ARN"
},
{
"eventID": "2",
"eventName": "MODIFY",
"eventVersion": "1.0",
"eventSource": "aws:dynamodb",
"awsRegion": "us-east-1",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
},
"_correlation_id": {
"S": "abc123"
},
"_xray_trace_id": {
"S": "abc123"
}
},
"OldImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
},
"_xray_trace_id": {
"S": "abc123"
}
},
"SequenceNumber": "222",
"SizeBytes": 59,
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"eventSourceARN": "stream-ARN"
},
{
"eventID": "3",
"eventName": "REMOVE",
"eventVersion": "1.0",
"eventSource": "aws:dynamodb",
"awsRegion": "us-east-1",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"OldImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
},
"_correlation_id": {
"S": "abc123"
},
"_xray_trace_id": {
"S": "abc123"
}
},
"SequenceNumber": "333",
"SizeBytes": 38,
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"eventSourceARN": "stream-ARN"
}
]
}
23 changes: 21 additions & 2 deletions tests/events-client.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ test("large should be stripped from pathDiff", async () => {
});


test("Corretaltion ID should be moved to metadata", async () => {
test("Correlation ID should be moved to metadata", async () => {
const client = new events.Client({
eventBridgeClient: eventBridgeClient,
s3Client: s3Client,
Expand All @@ -440,7 +440,7 @@ test("Corretaltion ID should be moved to metadata", async () => {
});

const testEvent = require("./dynamodb");

const response = await client.send("test", testEvent);
const request = eventBridgeMock.mock.calls[0][0];
const created = JSON.parse(request.Entries[0].Detail);
Expand All @@ -453,3 +453,22 @@ test("Corretaltion ID should be moved to metadata", async () => {
expect(updated.metadata.correlationId).toBeTruthy();
expect(deleted.metadata.correlationId).not.toBeTruthy();
});

test("X-Ray trace id should be removed", async () => {
const client = new events.Client({
eventBridgeClient: eventBridgeClient,
s3Client: s3Client,
eventBusName: "testbus",
source: "test",
});

const testEvent = require("./dynamodb");
const response = await client.send("test", testEvent);
const request = eventBridgeMock.mock.calls[0][0];
const created = JSON.parse(request.Entries[0].Detail);
const updated = JSON.parse(request.Entries[1].Detail);
const deleted = JSON.parse(request.Entries[2].Detail);
expect(created.data.new._xray_trace_id).not.toBeTruthy();
expect(updated.data.new._xray_trace_id).not.toBeTruthy();
expect(deleted.data.new._xray_trace_id).not.toBeTruthy();
});

0 comments on commit 65fa2da

Please sign in to comment.