55from moesifapi .exceptions .api_exception import *
66from moesifapi .models import *
77from .client_ip import ClientIp
8+ from .update_companies import Company
9+ from .update_users import User
810from datetime import *
911import base64
1012import json
1618except ImportError :
1719 from urllib .parse import urlencode
1820
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+
1940def MoesifLogger (moesif_options ):
2041 class log_data (LambdaDecorator ):
2142 def __init__ (self , handler ):
@@ -31,14 +52,23 @@ def __init__(self, handler):
3152 self .DEBUG = self .moesif_options .get ('DEBUG' , False )
3253 self .event = None
3354 self .context = None
34- self .start_time = datetime .utcnow ()
3555
3656 # Intialized the client
3757 if os .environ .get ("MOESIF_APPLICATION_ID" ):
3858 self .api_client = MoesifAPIClient (os .environ ["MOESIF_APPLICATION_ID" ]).api
3959 else :
4060 raise Exception ('Moesif Application ID is required in settings' )
4161
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+
4272 def get_user_id (self , event , context ):
4373 """Function to fetch UserId"""
4474 username = None
@@ -109,10 +139,19 @@ def process_body(self, body_wrapper):
109139 def before (self , event , context ):
110140 """This function runs before the handler is invoked, is passed the event & context and must return an event & context too."""
111141
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+
112149 # Request Method
113150 request_verb = event .get ('httpMethod' )
114151 if request_verb is None :
115152 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
116155 return event , context
117156
118157 # Request headers
@@ -128,9 +167,9 @@ def before(self, event, context):
128167 # Request Time
129168 epoch = event and event .get ('request_context' , {}).get ('requestTimeEpoch' )
130169 if epoch is not None :
131- request_time = datetime .utcfromtimestamp (epoch )
170+ request_time = datetime .utcfromtimestamp (epoch )
132171 else :
133- request_time = self . start_time
172+ request_time = datetime . utcnow ()
134173
135174 # Request Body
136175 req_body , req_transfer_encoding = self .process_body (event )
@@ -213,66 +252,64 @@ def before(self, event, context):
213252 body = req_body ,
214253 transfer_encoding = req_transfer_encoding )
215254
216- # Set/Save event and context for use Skip Event function
217- self .event = event
218- self .context = context
219-
220255 # Return event, context
221256 return event , context
222257
223258 def after (self , retval ):
224259 """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 )
227264
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 )
234271
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." )
251288
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." )
263300
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 ))
266312
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-
276313 # Send response
277314 return retval
278315
0 commit comments