33# This file is part of the Ingram Micro Cloud Blue Connect SDK.
44# Copyright (c) 2019-2020 Ingram Micro. All Rights Reserved.
55
6- import copy
76import logging
8- from typing import Any , Dict
7+ from typing import Any , Dict , Optional
98
10- from connect .logger import function_log , logger as global_logger
9+ from connect .logger import function_log , LoggerAdapter
1110from connect .models .activation_tile_response import ActivationTileResponse
1211from connect .models .base import BaseModel
1312from .base import BaseResource
1615
1716class AutomationEngine (BaseResource ):
1817 limit = 1000 # type: int
19- logger = logging .getLogger ()
18+
19+ def __init__ (self , config = None ):
20+ super (AutomationEngine , self ).__init__ (config )
21+ self ._current_request = None
22+ self ._logger_adapter = None
2023
2124 def filters (self , status = 'pending' , ** kwargs ):
2225 # type: (str, Dict[str, Any]) -> Dict[str, Any]
2326 return super (AutomationEngine , self ).filters (status = status , ** kwargs )
2427
25- @function_log ( custom_logger = logger )
28+ @function_log
2629 def process (self , filters = None ):
27- '''
28- # type: (Dict[str, Any]) -> None
29- '''
30+ # # type: (Dict[str, Any]) -> None
3031 for request in self .list (filters ):
32+ self ._set_current_request (request )
3133 self .dispatch (request )
34+ self ._set_current_request (None )
3235
3336 def dispatch (self , request ):
3437 # type: (BaseModel) -> str
@@ -39,34 +42,40 @@ def process_request(self, request):
3942 raise NotImplementedError ('Please implement `{}.process_request` method'
4043 .format (self .__class__ .__name__ ))
4144
42- @function_log ( custom_logger = logger )
45+ @function_log
4346 def approve (self , pk , data ):
4447 # type: (str, dict) -> str
4548 return self ._api .post (path = pk + '/approve/' , json = data )[0 ]
4649
47- @function_log ( custom_logger = logger )
50+ @function_log
4851 def inquire (self , pk ):
4952 # type: (str) -> str
5053 return self ._api .post (path = pk + '/inquire/' , json = {})[0 ]
5154
52- @function_log ( custom_logger = logger )
55+ @function_log
5356 def fail (self , pk , reason ):
5457 # type: (str, str) -> str
5558 return self ._api .post (path = pk + '/fail/' , json = {'reason' : reason })[0 ]
5659
57- @function_log ( custom_logger = logger )
60+ @function_log
5861 def render_template (self , pk , template_id ):
5962 # type: (str, str) -> ActivationTileResponse
6063 return TemplateResource (self .config ).render (template_id , pk )
6164
62- def _set_custom_logger (self , * args ):
63- handlers = [copy .copy (hdlr ) for hdlr in global_logger .handlers ]
64- log_level = global_logger .level
65- self .__class__ .logger .setLevel (log_level )
66- self .__class__ .logger .propagate = False
67- self .__class__ .logger .handlers = handlers
68- base = " %(levelname)-6s; %(asctime)s; %(name)-6s; %(module)s:%(funcName)s:line" \
69- "-%(lineno)d: %(message)s"
70- sformat = " " .join (args ) + base
71- [handler .setFormatter (logging .Formatter (sformat ))
72- for handler in self .__class__ .logger .handlers ]
65+ @property
66+ def logger (self ):
67+ # type: () -> logging.LoggerAdapter
68+ request_id = self ._current_request .id if self ._current_request else 'global'
69+ name = self .__class__ .__name__ + '.' + request_id
70+ if not self ._logger_adapter or self ._logger_adapter .logger .name != name :
71+ self ._logger_adapter = LoggerAdapter (logging .getLogger (name ))
72+ return self ._logger_adapter
73+
74+ def _set_current_request (self , request ):
75+ # type: (Optional[BaseModel]) -> None
76+ self ._current_request = request
77+ self ._set_logger_prefix (request )
78+
79+ def _set_logger_prefix (self , request ):
80+ # type: (Optional[BaseModel]) -> None
81+ pass
0 commit comments