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)
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
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()
def slave_read(status = None): if status is None: return coro.get_local('slave-read', False) else: return coro.set_local('slave-read', status)