5
5
from moesifapi .exceptions .api_exception import *
6
6
from moesifapi .models import *
7
7
from .client_ip import ClientIp
8
+ from .update_companies import Company
9
+ from .update_users import User
8
10
from datetime import *
9
11
import base64
10
12
import json
16
18
except ImportError :
17
19
from urllib .parse import urlencode
18
20
21
+ # Initialized the client
22
+ if os .environ ["MOESIF_APPLICATION_ID" ]:
23
+ api_client = MoesifAPIClient (os .environ ["MOESIF_APPLICATION_ID" ]).api
24
+ else :
25
+ raise Exception ('Moesif Application ID is required in settings' )
26
+
27
+ def update_user (user_profile , moesif_options ):
28
+ User ().update_user (user_profile , api_client , moesif_options )
29
+
30
+ def update_users_batch (user_profiles , moesif_options ):
31
+ User ().update_users_batch (user_profiles , api_client , moesif_options )
32
+
33
+ def update_company (company_profile , moesif_options ):
34
+ Company ().update_company (company_profile , api_client , moesif_options )
35
+
36
+ def update_companies_batch (companies_profiles , moesif_options ):
37
+ Company ().update_companies_batch (companies_profiles , api_client , moesif_options )
38
+
39
+
19
40
def MoesifLogger (moesif_options ):
20
41
class log_data (LambdaDecorator ):
21
42
def __init__ (self , handler ):
@@ -31,14 +52,23 @@ def __init__(self, handler):
31
52
self .DEBUG = self .moesif_options .get ('DEBUG' , False )
32
53
self .event = None
33
54
self .context = None
34
- self .start_time = datetime .utcnow ()
35
55
36
56
# Intialized the client
37
57
if os .environ .get ("MOESIF_APPLICATION_ID" ):
38
58
self .api_client = MoesifAPIClient (os .environ ["MOESIF_APPLICATION_ID" ]).api
39
59
else :
40
60
raise Exception ('Moesif Application ID is required in settings' )
41
61
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
+
42
72
def get_user_id (self , event , context ):
43
73
"""Function to fetch UserId"""
44
74
username = None
@@ -109,10 +139,19 @@ def process_body(self, body_wrapper):
109
139
def before (self , event , context ):
110
140
"""This function runs before the handler is invoked, is passed the event & context and must return an event & context too."""
111
141
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
+
112
149
# Request Method
113
150
request_verb = event .get ('httpMethod' )
114
151
if request_verb is None :
115
152
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
116
155
return event , context
117
156
118
157
# Request headers
@@ -128,9 +167,9 @@ def before(self, event, context):
128
167
# Request Time
129
168
epoch = event and event .get ('request_context' , {}).get ('requestTimeEpoch' )
130
169
if epoch is not None :
131
- request_time = datetime .utcfromtimestamp (epoch )
170
+ request_time = datetime .utcfromtimestamp (epoch )
132
171
else :
133
- request_time = self . start_time
172
+ request_time = datetime . utcnow ()
134
173
135
174
# Request Body
136
175
req_body , req_transfer_encoding = self .process_body (event )
@@ -213,66 +252,64 @@ def before(self, event, context):
213
252
body = req_body ,
214
253
transfer_encoding = req_transfer_encoding )
215
254
216
- # Set/Save event and context for use Skip Event function
217
- self .event = event
218
- self .context = context
219
-
220
255
# Return event, context
221
256
return event , context
222
257
223
258
def after (self , retval ):
224
259
"""This function runs after the handler is invoked, is passed the response and must return an response too."""
225
- # Response body
226
- 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 )
227
264
228
- # Event Response object
229
- event_rsp = EventResponseModel (time = datetime .utcnow ().strftime ("%Y-%m-%dT%H:%M:%S.%f" )[:- 3 ],
230
- status = retval .get ('statusCode' , 599 ),
231
- headers = retval .get ('headers' , {}),
232
- body = resp_body ,
233
- 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 )
234
271
235
- # Event object
236
- event_model = EventModel (request = self .event_req ,
237
- response = event_rsp ,
238
- user_id = self .user_id ,
239
- company_id = self .company_id ,
240
- session_token = self .session_token ,
241
- metadata = self .metadata )
242
-
243
- # Mask Event Model
244
- try :
245
- mask_event_model = self .moesif_options .get ('MASK_EVENT_MODEL' , None )
246
- if mask_event_model is not None :
247
- event_model = mask_event_model (event_model )
248
- except :
249
- if self .DEBUG :
250
- 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." )
251
288
252
- # Skip Event
253
- try :
254
- skip_event = self .moesif_options .get ('SKIP' , None )
255
- if skip_event is not None :
256
- if skip_event (self .event , self .context ):
257
- if self .DEBUG :
258
- print ('MOESIF Skip sending event to Moesif' )
259
- return retval
260
- except :
261
- if self .DEBUG :
262
- 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." )
263
300
264
- # Add direction field
265
- 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 ))
266
312
267
- # Send event to Moesif
268
- if self .DEBUG :
269
- print ('Moesif Event Model:' )
270
- pprint (self .event )
271
-
272
- event_send = self .api_client .create_event (event_model )
273
- if self .DEBUG :
274
- print ('MOESIF ' + str (event_send ))
275
-
276
313
# Send response
277
314
return retval
278
315
0 commit comments