Skip to content

Commit 232dd85

Browse files
authored
Skip masking for DDB stream Keys (#180)
1 parent f2493b8 commit 232dd85

File tree

2 files changed

+84
-15
lines changed

2 files changed

+84
-15
lines changed

src/lumigo_tracer/event/event_dumper.py

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,19 @@
7474
]
7575

7676

77+
class Event:
78+
def __init__(self, event):
79+
"""
80+
Cache propeties of the event in order improve performance.
81+
"""
82+
self.raw_event = event
83+
self.record_event_source = safe_get(event, ["Records", 0, "eventSource"])
84+
85+
7786
class EventParseHandler(ABC):
7887
@staticmethod
7988
@abstractmethod
80-
def is_supported(event) -> bool:
89+
def is_supported(event: Event) -> bool:
8190
raise NotImplementedError()
8291

8392
@staticmethod
@@ -92,8 +101,8 @@ def get_omit_skip_path() -> Optional[List[str]]:
92101

93102
class S3Handler(EventParseHandler):
94103
@staticmethod
95-
def is_supported(event) -> bool:
96-
return safe_get(event, ["Records", 0, "eventSource"]) == "aws:s3"
104+
def is_supported(event: Event) -> bool:
105+
return event.record_event_source == "aws:s3"
97106

98107
@staticmethod
99108
def parse(event) -> OrderedDict:
@@ -125,8 +134,8 @@ def get_omit_skip_path() -> Optional[List[str]]:
125134

126135
class CloudfrontHandler(EventParseHandler):
127136
@staticmethod
128-
def is_supported(event) -> bool:
129-
return bool(safe_get(event, ["Records", 0, "cf", "config", "distributionId"], {}))
137+
def is_supported(event: Event) -> bool:
138+
return bool(safe_get(event.raw_event, ["Records", 0, "cf", "config", "distributionId"], {}))
130139

131140
@staticmethod
132141
def parse(event) -> OrderedDict:
@@ -153,8 +162,8 @@ def parse(event) -> OrderedDict:
153162

154163
class ApiGWHandler(EventParseHandler):
155164
@staticmethod
156-
def is_supported(event) -> bool:
157-
return is_api_gw_event(event=event)
165+
def is_supported(event: Event) -> bool:
166+
return is_api_gw_event(event=event.raw_event)
158167

159168
@staticmethod
160169
def parse(event) -> OrderedDict:
@@ -182,8 +191,8 @@ def parse(event) -> OrderedDict:
182191

183192
class SNSHandler(EventParseHandler):
184193
@staticmethod
185-
def is_supported(event) -> bool:
186-
return safe_get(event, ["Records", 0, "EventSource"]) == "aws:sns"
194+
def is_supported(event: Event) -> bool:
195+
return safe_get(event.raw_event, ["Records", 0, "EventSource"]) == "aws:sns"
187196

188197
@staticmethod
189198
def parse(event) -> OrderedDict:
@@ -201,8 +210,8 @@ def parse(event) -> OrderedDict:
201210

202211
class SQSHandler(EventParseHandler):
203212
@staticmethod
204-
def is_supported(event) -> bool:
205-
return safe_get(event, ["Records", 0, "eventSource"]) == "aws:sqs"
213+
def is_supported(event: Event) -> bool:
214+
return event.record_event_source == "aws:sqs"
206215

207216
@staticmethod
208217
def parse(event) -> OrderedDict:
@@ -218,6 +227,20 @@ def parse(event) -> OrderedDict:
218227
return new_sqs_event
219228

220229

230+
class DDBHandler(EventParseHandler):
231+
@staticmethod
232+
def is_supported(event: Event) -> bool:
233+
return event.record_event_source == "aws:dynamodb"
234+
235+
@staticmethod
236+
def parse(event) -> OrderedDict:
237+
return event
238+
239+
@staticmethod
240+
def get_omit_skip_path() -> Optional[List[str]]:
241+
return ["Records", "dynamodb", "Keys"]
242+
243+
221244
class EventDumper:
222245
@staticmethod
223246
def dump_event(
@@ -230,10 +253,12 @@ def dump_event(
230253
SQSHandler(),
231254
S3Handler(),
232255
CloudfrontHandler(),
256+
DDBHandler(),
233257
]
258+
event_obj = Event(event)
234259
for handler in handlers:
235260
try:
236-
if handler.is_supported(event):
261+
if handler.is_supported(event_obj):
237262
return lumigo_dumps(
238263
handler.parse(event),
239264
max_size,

src/test/unit/event/test_event_dumper.py

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
EventParseHandler,
88
CloudfrontHandler,
99
S3Handler,
10+
Event,
1011
)
1112
from lumigo_tracer.lumigo_utils import lumigo_dumps, Configuration
1213

1314

1415
class ExceptionHandler(EventParseHandler):
1516
@staticmethod
16-
def is_supported(event) -> bool:
17+
def is_supported(event, record_event_source=None) -> bool:
1718
raise Exception()
1819

1920
@staticmethod
@@ -413,7 +414,7 @@ def test_parse_event_sqs():
413414

414415

415416
def test_is_s3_event(s3_event):
416-
assert S3Handler().is_supported(s3_event) is True
417+
assert S3Handler().is_supported(Event(s3_event)) is True
417418

418419

419420
def test_parse_s3_event(s3_event):
@@ -443,7 +444,7 @@ def test_parse_s3_event(s3_event):
443444

444445

445446
def test_is_cloudfront_event(cloudfront_event):
446-
assert CloudfrontHandler().is_supported(cloudfront_event) is True
447+
assert CloudfrontHandler().is_supported(Event(cloudfront_event)) is True
447448

448449

449450
def test_parse_cloudfront_event(cloudfront_event):
@@ -577,3 +578,46 @@ def cloudfront_event():
577578
}
578579
]
579580
}
581+
582+
583+
def test_parse_ddb_event():
584+
ddb_event = {
585+
"Records": [
586+
{
587+
"eventID": "22222222222222222222222222222222",
588+
"eventName": "INSERT",
589+
"eventVersion": "1.1",
590+
"eventSource": "aws:dynamodb",
591+
"awsRegion": "us-west-2",
592+
"dynamodb": {
593+
"ApproximateCreationDateTime": 1613301976,
594+
"Keys": {"k": {"S": "val0"}},
595+
"NewImage": {"v": {"S": "This is a realistic test!"}, "k": {"S": "val0"}},
596+
"SequenceNumber": "111111111111111111111111111",
597+
"SizeBytes": 64,
598+
"StreamViewType": "NEW_AND_OLD_IMAGES",
599+
},
600+
"eventSourceARN": "arn:aws:dynamodb:us-west-2:111111111111:table/table-with-stream/stream/2020-08-25T09:03:34.809",
601+
},
602+
{
603+
"eventID": "22222222222222222222222222222223",
604+
"eventName": "INSERT",
605+
"eventVersion": "1.1",
606+
"eventSource": "aws:dynamodb",
607+
"awsRegion": "us-west-2",
608+
"dynamodb": {
609+
"ApproximateCreationDateTime": 1613302000,
610+
"Keys": {"k": {"S": "val1"}},
611+
"NewImage": {"v": {"S": "This is a realistic test!"}, "k": {"S": "val1"}},
612+
"SequenceNumber": "111111111111111111111111112",
613+
"SizeBytes": 64,
614+
"StreamViewType": "NEW_AND_OLD_IMAGES",
615+
},
616+
"eventSourceARN": "arn:aws:dynamodb:us-west-2:111111111111:table/table-with-stream/stream/2020-08-25T09:03:34.809",
617+
},
618+
]
619+
}
620+
621+
parsed_event = EventDumper.dump_event(event=ddb_event)
622+
623+
assert parsed_event == json.dumps(ddb_event)

0 commit comments

Comments
 (0)