Beispiel #1
0
    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
Beispiel #2
0
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
Beispiel #3
0
    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)