Exemple #1
0
def _trace_data(start, obj, cmd, vids, **kwargs):
    if not _get_trace_local():
        return None

    if not _trace_check_limits(obj, cmd, vids):
        return None

    elapse = time.time() - start

    if not coro.has_local(CORO_LOCAL_TDATA):
        coro.set_local(CORO_LOCAL_TDATA, {})
        
    data = coro.get_local(CORO_LOCAL_TDATA)
    data = data.setdefault(obj, {})

    look = not isinstance(vids, (list, tuple)) and 1 or len(vids)

    data[cmd] = sum_tuple(data.get(cmd, (0, 0, 0)), (elapse, look, 1))

    if _get_trace_local() > ACCESS_TRACE_DEBUG:
        stack = pyinfo.rawstack()
        stack = stack[:-5] # remove 5 levels of mod_python, publisher
        while stack and stack[0][0].startswith('access'):
            stack.pop(0)
        stack = ' @ %s' % '|'.join(['%s:%s:%s' % x for x in stack])
    else:
        stack = ''

    if _get_trace_local() < ACCESS_TRACE_DEBUG:
        return None

    print 'Access | %.4f | obj: %s cmd: %s vid: %s args: %s kwargs: %s%s' % (
        elapse, obj, cmd, vids,
        kwargs.get('args', ()), kwargs.get('kwargs', {}),
        stack)
Exemple #2
0
def _set_trace_local(value, clear):
    if not coro.has_local(CORO_LOCAL_TCTRL):
        coro.set_local(CORO_LOCAL_TCTRL, {})
        
    data = coro.get_local(CORO_LOCAL_TCTRL)
    data['value'] = value
    data['clear'] = clear
Exemple #3
0
    def execute(self, vid, call, seq, server, **kwargs):
        cmd      = call.get('command', None)
        args     = call.get('args', ())
        kwargs   = call.get('kwargs', {})
        tlb, tval = call.get('tlb', ('tlb-%s' % self._objname, False))
        slv, sval = call.get('slave', ('slave-read', False))
        source    = call.get('source')

        self.debug(
            'execute command %r id %r args %r kwargs %r tlb %s slv %s',
            cmd, vid, args, kwargs, (tlb,tval), (slv,sval))

        try:
            coro.set_local(tlb, tval)
            coro.set_local(slv, sval)
            if source: coro.set_local(access.CORO_LOCAL_SOURCE, source)
            try:
                result = self._execute(vid, cmd, args, kwargs)
            finally:
                coro.pop_local(slv)
                coro.pop_local(tlb)
                coro.pop_local(access.CORO_LOCAL_SOURCE)
        except error.AccessError, e:
            self.warn('AccessError: %r %r' % (e, e.args,))

            result = {
                'rc':   e.id,
                'msg':  e[0],
                'args': e.args,
                'envl': True}

            self.clear()
Exemple #4
0
def slave_read(status = None):
    if status is None:
        return coro.get_local('slave-read', False)
    else:
        return coro.set_local('slave-read', status)