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: openerp.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 = openerp.service.common.dispatch elif service_name == 'db': dispatch = openerp.service.db.dispatch elif service_name == 'object': dispatch = openerp.service.model.dispatch elif service_name == 'report': dispatch = openerp.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: openerp.netsvc.log(rpc_response, logging.DEBUG, logline, result) else: openerp.netsvc.log(rpc_request, logging.DEBUG, logline, replace_request_password(params), depth=1) return result except NO_POSTMORTEM: raise except openerp.exceptions.DeferredException, e: _logger.exception(openerp.tools.exception_to_unicode(e)) openerp.tools.debugger.post_mortem(openerp.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)
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_vms = 0, 0 if psutil: _, start_vms = 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 is an istance of CResponse response = self._call_function(**self.params) result = response.payload if response else None if rpc_request_flag or rpc_response_flag: end_time = time.time() _, end_vms = 0, 0 if psutil: _, end_vms = memory_info(psutil.Process(os.getpid())) logline = '%s: %s %s: time:%.3fs mem: %sk -> %sk (diff: %sk)' % ( endpoint, model, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms) / 1024) if rpc_response_flag: rpc_response.debug('%s, %s', logline, pprint.pformat(result)) else: rpc_request.debug(logline) return self._json_response(response) except Exception, e: return self._handle_exception(e)