def new_dispatch_rpc(service_name, method, params): try: if service_name == 'metaweblog': rpc_request_flag = rpc_request.isEnabledFor(logging.DEBUG) rpc_response_flag = rpc_response.isEnabledFor(logging.DEBUG) if rpc_request_flag or rpc_response_flag: start_time = time.time() start_memory = 0 if psutil: start_memory = memory_info(psutil.Process(os.getpid())) if rpc_request and rpc_response_flag: netsvc.log(rpc_request, logging.DEBUG, '%s.%s' % (service_name, method), http.replace_request_password(params)) threading.current_thread().uid = None threading.current_thread().dbname = None dispatch = addons.website_metaweblog.services.metaweblog.dispatch result = dispatch(method, params) if rpc_request_flag or rpc_response_flag: end_time = time.time() end_memory = 0 if psutil: end_memory = memory_info(psutil.Process(os.getpid())) logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % ( service_name, method, end_time - start_time, start_memory / 1024, end_memory / 1024, (end_memory - start_memory) / 1024) if rpc_response_flag: netsvc.log(rpc_response, logging.DEBUG, logline, result) else: netsvc.log(rpc_request, logging.DEBUG, logline, http.replace_request_password(params), depth=1) return result else: return dispatch_rpc(service_name, method, params) except http.NO_POSTMORTEM: raise except exceptions.DeferredException as e: _logger.exception(tools.exception_to_unicode(e)) tools.debugger.post_mortem(tools.config, e.traceback) raise except Exception as e: _logger.exception(tools.exception_to_unicode(e)) tools.debugger.post_mortem(tools.config, sys.exc_info()) raise
def dispatch_rpc(service_name, method, params): """ Handle a RPC call. This is pure Python code, the actual marshalling (from/to XML-RPC) is done in a upper layer. """ try: rpc_request_flag = rpc_request.isEnabledFor(logging.DEBUG) rpc_response_flag = rpc_response.isEnabledFor(logging.DEBUG) if rpc_request_flag or rpc_response_flag: start_time = time.time() start_rss, start_vms = 0, 0 if psutil: start_rss, start_vms = memory_info(psutil.Process(os.getpid())) if rpc_request and rpc_response_flag: odoo.netsvc.log(rpc_request, logging.DEBUG, '%s.%s' % (service_name, method), replace_request_password(params)) threading.current_thread().uid = None threading.current_thread().dbname = None if service_name == 'common': dispatch = odoo.service.common.dispatch elif service_name == 'db': dispatch = odoo.service.db.dispatch elif service_name == 'object': dispatch = odoo.service.model.dispatch elif service_name == 'report': dispatch = odoo.service.report.dispatch result = dispatch(method, params) if rpc_request_flag or rpc_response_flag: end_time = time.time() end_rss, end_vms = 0, 0 if psutil: end_rss, end_vms = memory_info(psutil.Process(os.getpid())) logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (service_name, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024) if rpc_response_flag: odoo.netsvc.log(rpc_response, logging.DEBUG, logline, result) else: odoo.netsvc.log(rpc_request, logging.DEBUG, logline, replace_request_password(params), depth=1) return result except NO_POSTMORTEM: raise except odoo.exceptions.DeferredException, e: _logger.exception(odoo.tools.exception_to_unicode(e)) odoo.tools.debugger.post_mortem(odoo.tools.config, e.traceback) raise
def dispatch(self): if self.jsonp_handler: return self.jsonp_handler() try: rpc_request_flag = rpc_request.isEnabledFor(logging.DEBUG) rpc_response_flag = rpc_response.isEnabledFor(logging.DEBUG) if rpc_request_flag or rpc_response_flag: endpoint = self.endpoint.method.__name__ model = self.params.get("model") method = self.params.get("method") args = self.params.get("args", []) start_time = time.time() start_memory = 0 if psutil: start_memory = memory_info(psutil.Process(os.getpid())) if rpc_request and rpc_response_flag: rpc_request.debug( "%s: %s %s, %s", endpoint, model, method, pprint.pformat(args) ) result = self._call_function(**self.params) if rpc_request_flag or rpc_response_flag: end_time = time.time() end_memory = 0 if psutil: end_memory = memory_info(psutil.Process(os.getpid())) logline = "{}: {} {}: time:{:.3f}s mem: {}k -> {}k (diff: {}k)".format( endpoint, model, method, end_time - start_time, start_memory / 1024, end_memory / 1024, (end_memory - start_memory) / 1024, ) if rpc_response_flag: rpc_response.debug("%s, %s", logline, pprint.pformat(result)) else: rpc_request.debug(logline) return self._json_response(result) except Exception as e: return self._handle_exception(e)