Skip to content

Commit 6d382bd

Browse files
author
Keyur
committed
Fix: Handling Invalid events and reset state of local variables
Fix: Handling Invalid events and reset state of local variables
1 parent 5302e1f commit 6d382bd

File tree

1 file changed

+69
-53
lines changed

1 file changed

+69
-53
lines changed

moesif_aws_lambda/middleware.py

+69-53
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,23 @@ def __init__(self, handler):
5252
self.DEBUG = self.moesif_options.get('DEBUG', False)
5353
self.event = None
5454
self.context = None
55-
self.start_time = datetime.utcnow()
5655

5756
# Intialized the client
5857
if os.environ.get("MOESIF_APPLICATION_ID"):
5958
self.api_client = MoesifAPIClient(os.environ["MOESIF_APPLICATION_ID"]).api
6059
else:
6160
raise Exception('Moesif Application ID is required in settings')
6261

62+
def clear_state(self):
63+
"""Function to clear state of local variable"""
64+
self.event = None
65+
self.context = None
66+
self.event_req = None
67+
self.metadata = None
68+
self.session_token = None
69+
self.user_id = None
70+
self.company_id = None
71+
6372
def get_user_id(self, event, context):
6473
"""Function to fetch UserId"""
6574
username = None
@@ -130,10 +139,19 @@ def process_body(self, body_wrapper):
130139
def before(self, event, context):
131140
"""This function runs before the handler is invoked, is passed the event & context and must return an event & context too."""
132141

142+
# Clear the state of the local variables
143+
self.clear_state()
144+
145+
# Set/Save event and context for use Skip Event function
146+
self.event = event
147+
self.context = context
148+
133149
# Request Method
134150
request_verb = event.get('httpMethod')
135151
if request_verb is None:
136152
print('MOESIF: [before] AWS Lambda trigger must be a Load Balancer or API Gateway See https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html or https://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https.html.')
153+
self.event = None
154+
self.context = None
137155
return event, context
138156

139157
# Request headers
@@ -149,9 +167,9 @@ def before(self, event, context):
149167
# Request Time
150168
epoch = event and event.get('request_context', {}).get('requestTimeEpoch')
151169
if epoch is not None:
152-
request_time =datetime.utcfromtimestamp(epoch)
170+
request_time = datetime.utcfromtimestamp(epoch)
153171
else:
154-
request_time = self.start_time
172+
request_time = datetime.utcnow()
155173

156174
# Request Body
157175
req_body, req_transfer_encoding = self.process_body(event)
@@ -234,66 +252,64 @@ def before(self, event, context):
234252
body = req_body,
235253
transfer_encoding = req_transfer_encoding)
236254

237-
# Set/Save event and context for use Skip Event function
238-
self.event = event
239-
self.context = context
240-
241255
# Return event, context
242256
return event, context
243257

244258
def after(self, retval):
245259
"""This function runs after the handler is invoked, is passed the response and must return an response too."""
246-
# Response body
247-
resp_body, resp_transfer_encoding = self.process_body(retval)
260+
261+
if self.event is not None:
262+
# Response body
263+
resp_body, resp_transfer_encoding = self.process_body(retval)
248264

249-
# Event Response object
250-
event_rsp = EventResponseModel(time = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3],
251-
status = retval.get('statusCode', 599),
252-
headers = retval.get('headers', {}),
253-
body = resp_body,
254-
transfer_encoding = resp_transfer_encoding)
265+
# Event Response object
266+
event_rsp = EventResponseModel(time = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3],
267+
status = retval.get('statusCode', 599),
268+
headers = retval.get('headers', {}),
269+
body = resp_body,
270+
transfer_encoding = resp_transfer_encoding)
255271

256-
# Event object
257-
event_model = EventModel(request = self.event_req,
258-
response = event_rsp,
259-
user_id = self.user_id,
260-
company_id = self.company_id,
261-
session_token = self.session_token,
262-
metadata = self.metadata)
263-
264-
# Mask Event Model
265-
try:
266-
mask_event_model = self.moesif_options.get('MASK_EVENT_MODEL', None)
267-
if mask_event_model is not None:
268-
event_model = mask_event_model(event_model)
269-
except:
270-
if self.DEBUG:
271-
print("MOESIF Can not execute MASK_EVENT_MODEL function. Please check moesif settings.")
272+
# Event object
273+
event_model = EventModel(request = self.event_req,
274+
response = event_rsp,
275+
user_id = self.user_id,
276+
company_id = self.company_id,
277+
session_token = self.session_token,
278+
metadata = self.metadata)
279+
280+
# Mask Event Model
281+
try:
282+
mask_event_model = self.moesif_options.get('MASK_EVENT_MODEL', None)
283+
if mask_event_model is not None:
284+
event_model = mask_event_model(event_model)
285+
except:
286+
if self.DEBUG:
287+
print("MOESIF Can not execute MASK_EVENT_MODEL function. Please check moesif settings.")
272288

273-
# Skip Event
274-
try:
275-
skip_event = self.moesif_options.get('SKIP', None)
276-
if skip_event is not None:
277-
if skip_event(self.event, self.context):
278-
if self.DEBUG:
279-
print('MOESIF Skip sending event to Moesif')
280-
return retval
281-
except:
282-
if self.DEBUG:
283-
print("MOESIF Having difficulty executing skip_event function. Please check moesif settings.")
289+
# Skip Event
290+
try:
291+
skip_event = self.moesif_options.get('SKIP', None)
292+
if skip_event is not None:
293+
if skip_event(self.event, self.context):
294+
if self.DEBUG:
295+
print('MOESIF Skip sending event to Moesif')
296+
return retval
297+
except:
298+
if self.DEBUG:
299+
print("MOESIF Having difficulty executing skip_event function. Please check moesif settings.")
284300

285-
# Add direction field
286-
event_model.direction = "Incoming"
301+
# Add direction field
302+
event_model.direction = "Incoming"
303+
304+
# Send event to Moesif
305+
if self.DEBUG:
306+
print('Moesif Event Model:')
307+
print(json.dumps(self.event))
308+
309+
event_send = self.api_client.create_event(event_model)
310+
if self.DEBUG:
311+
print('MOESIF ' + str(event_send))
287312

288-
# Send event to Moesif
289-
if self.DEBUG:
290-
print('Moesif Event Model:')
291-
print(json.dumps(self.event))
292-
293-
event_send = self.api_client.create_event(event_model)
294-
if self.DEBUG:
295-
print('MOESIF ' + str(event_send))
296-
297313
# Send response
298314
return retval
299315

0 commit comments

Comments
 (0)