Skip to content

Commit 621b6d4

Browse files
authored
Merge pull request #15 from Moesif/fix-non-gateway-trigger
Fix: Missing fields when not triggered via API Gateway
2 parents b934acd + 79c3d7d commit 621b6d4

File tree

4 files changed

+33
-18
lines changed

4 files changed

+33
-18
lines changed

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ You can always find your Moesif Application Id at any time by logging
5555
into the [_Moesif Portal_](https://www.moesif.com/), click on the top right menu,
5656
and then clicking _Installation_.
5757

58+
### 3. Trigger your API
59+
Grab the URL to your API Gateway or LB and make some calls using a tool like Postman or CURL.
60+
61+
> In order for your event to log to Moesif, you must test using the Amazon API Gateway trigger. Do not invoke your lambda directly using AWS Console as the payload won't contain a valid HTTP payload.
62+
5863
## Repo file structure
5964

6065
- `moesif_aws_lambda/middleware.py` the middleware library

moesif_aws_lambda/client_ip.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def get_client_address(self, headers, default_source_ip):
9393
return default_source_ip
9494
else:
9595
return None
96-
except KeyError:
96+
except Exception:
9797
if default_source_ip:
9898
return default_source_ip
9999
else:

moesif_aws_lambda/middleware.py

+26-16
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def update_companies_batch(companies_profiles, moesif_options):
7171
def MoesifLogger(moesif_options):
7272
class log_data(LambdaDecorator):
7373
def __init__(self, handler):
74+
7475
self.event_req = None
7576
self.handler = handler
7677
self.moesif_options = moesif_options
@@ -119,10 +120,10 @@ def get_user_id(self, event, context):
119120
username = rc_identity_id
120121
except:
121122
if self.DEBUG:
122-
print("[moesif] can not fetch apiKey from cognitoIdentityId event, setting userId to None.")
123+
print("[moesif] cannot fetch apiKey from cognitoIdentityId event, setting userId to None.")
123124
except Exception as e:
124125
if self.DEBUG:
125-
print("[moesif] can not execute identify_user function, please check moesif settings.")
126+
print("[moesif] cannot execute identify_user function, please check moesif settings.")
126127
print(e)
127128
end_time_get_user_id = datetime.utcnow()
128129
if self.DEBUG:
@@ -139,7 +140,7 @@ def get_company_id(self, event, context):
139140
company_id = identify_company(event, context)
140141
except Exception as e:
141142
if self.DEBUG:
142-
print("[moesif] can not execute identify_company function, please check moesif settings.")
143+
print("[moesif] cannot execute identify_company function, please check moesif settings.")
143144
print(e)
144145
end_time_get_company_id = datetime.utcnow()
145146
if self.DEBUG:
@@ -148,7 +149,13 @@ def get_company_id(self, event, context):
148149

149150
def build_uri(self, event, payload_format_version_1_0):
150151

151-
uri = event['headers'].get('X-Forwarded-Proto', event['headers'].get('x-forwarded-proto', 'http')) + '://' + event['headers'].get('Host', event['headers'].get('host', 'localhost'))
152+
uri = ''
153+
try:
154+
uri = event['headers'].get('X-Forwarded-Proto', event['headers'].get('x-forwarded-proto', 'http')) + '://' + event['headers'].get('Host', event['headers'].get('host', 'localhost'))
155+
except Exception as e:
156+
if self.DEBUG:
157+
print("[moesif] cannot read HTTP headers X-Forwarded-Proto or Host. Ensure event triggered via external URL")
158+
print(e)
152159

153160
if payload_format_version_1_0:
154161
uri = uri + event.get('path', '/')
@@ -204,6 +211,9 @@ def before(self, event, context):
204211
"""This function runs before the handler is invoked, is passed the event & context and must return an event & context too."""
205212

206213
start_time_before_handler_function = datetime.utcnow()
214+
if self.DEBUG:
215+
print('[moesif] : [before] Incoming Event:')
216+
print(json.dumps(event))
207217

208218
# Clear the state of the local variables
209219
self.clear_state()
@@ -235,7 +245,7 @@ def before(self, event, context):
235245
req_headers = APIHelper.json_deserialize(event['headers'])
236246
except Exception as e:
237247
if self.DEBUG:
238-
print('[moesif] Error while fetching request headers')
248+
print('[moesif] Error while fetching request headers')
239249
print(e)
240250

241251
# Request Time
@@ -269,10 +279,10 @@ def before(self, event, context):
269279
}
270280
except:
271281
if self.DEBUG:
272-
print("[moesif] can not fetch default function_name and request_context from aws context, setting metadata to None.")
282+
print("[moesif] cannot fetch default function_name and request_context from aws context, setting metadata to None.")
273283
except Exception as e:
274284
if self.DEBUG:
275-
print("[moesif] can not execute GET_METADATA function, please check moesif settings.")
285+
print("[moesif] cannot execute GET_METADATA function, please check moesif settings.")
276286
print(e)
277287
end_time_get_metadata = datetime.utcnow()
278288
if self.DEBUG:
@@ -305,10 +315,10 @@ def before(self, event, context):
305315
self.session_token = rc_api_key
306316
except KeyError:
307317
if self.DEBUG:
308-
print("[moesif] can not fetch apiKey from aws event, setting session_token to None.")
318+
print("[moesif] cannot fetch apiKey from aws event, setting session_token to None.")
309319
except Exception as e:
310320
if self.DEBUG:
311-
print("[moesif] can not execute GET_SESSION_TOKEN function, please check moesif settings.")
321+
print("[moesif] cannot execute GET_SESSION_TOKEN function, please check moesif settings.")
312322
print(e)
313323

314324
# Api Version
@@ -323,10 +333,10 @@ def before(self, event, context):
323333
api_version = context.function_version
324334
except KeyError:
325335
if self.DEBUG:
326-
print("[moesif] can not fetch default function_version from aws context, setting api_version to None.")
336+
print("[moesif] cannot fetch default function_version from aws context, setting api_version to None.")
327337
except Exception as e:
328338
if self.DEBUG:
329-
print("[moesif] can not execute GET_API_VERSION function, please check moesif settings.")
339+
print("[moesif] cannot execute GET_API_VERSION function, please check moesif settings.")
330340
print(e)
331341

332342
# IpAddress
@@ -353,7 +363,7 @@ def before(self, event, context):
353363

354364
def after(self, retval):
355365
"""This function runs after the handler is invoked, is passed the response and must return an response too."""
356-
366+
357367
start_time_after_handler_function = datetime.utcnow()
358368
event_send = None
359369
if self.event is not None:
@@ -382,26 +392,26 @@ def after(self, retval):
382392
event_model = mask_event_model(event_model)
383393
except Exception as e:
384394
if self.DEBUG:
385-
print("[moesif] Can not execute MASK_EVENT_MODEL function. Please check moesif settings.", e)
395+
print("[moesif] cannot execute MASK_EVENT_MODEL function. Please check moesif settings.", e)
386396

387397
# Skip Event
388398
try:
389399
skip_event = self.moesif_options.get('SKIP', None)
390400
if skip_event is not None:
391401
if skip_event(self.event, self.context):
392402
if self.DEBUG:
393-
print('[moesif] Skip sending event to Moesif')
403+
print('[moesif] Skip sending event to Moesif')
394404
return retval
395405
except Exception as e:
396406
if self.DEBUG:
397-
print("[moesif] Having difficulty executing skip_event function. Please check moesif settings.", e)
407+
print("[moesif] Having difficulty executing skip_event function. Please check moesif settings.", e)
398408

399409
# Add direction field
400410
event_model.direction = "Incoming"
401411

402412
# Send event to Moesif
403413
if self.DEBUG:
404-
print('Moesif Event Model:')
414+
print('[moesif] : [after] Moesif Event Model:')
405415
print(json.dumps(self.event))
406416

407417
# Sampling Rate

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
# Versions should comply with PEP440. For a discussion on single-sourcing
2929
# the version across setup.py and the project code, see
3030
# https://packaging.python.org/en/latest/single_source_version.html
31-
version='1.1.0',
31+
version='1.2.0',
3232

3333
description='Moesif Middleware to automatically log API calls from AWS Lambda functions',
3434
long_description=long_description,

0 commit comments

Comments
 (0)