File tree Expand file tree Collapse file tree 3 files changed +52
-0
lines changed
Expand file tree Collapse file tree 3 files changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ import datetime
2+ from pyres import ResQ
3+ import sys , traceback
4+ from pyres .failure .redis import RedisBackend
5+ _backend = RedisBackend
6+ def create (options = {}):
7+ return _backend (* options ).save ()
8+
9+
10+
11+
Original file line number Diff line number Diff line change 1+ class BaseBackend (object ):
2+ def __init__ (self , exp , queue , payload ):
3+ excc , _ , tb = sys .exc_info ()
4+
5+ self ._exception = excc
6+ self ._traceback = tb
7+ #self._worker = worker
8+ self ._queue = queue
9+ self ._payload = payload
10+
11+
12+ def _parse_traceback (self , trace ):
13+ """Return the given traceback string formatted for a notification."""
14+ p_traceback = [ "%s:%d:in `%s'" % (filename , lineno , funcname )
15+ for filename , lineno , funcname , _
16+ in traceback .extract_tb (trace ) ]
17+ p_traceback .reverse ()
18+
19+ return p_traceback
20+
21+ def _parse_message (self , exc ):
22+ """Return a message for a notification from the given exception."""
23+ return '%s: %s' % (exc .__class__ .__name__ , str (exc ))
24+
25+ @classmethod
26+ def count (cls , resq ):
27+ return int (resq .redis .llen ('failed' ))
Original file line number Diff line number Diff line change 1+ from base import BaseBackend
2+ class RedisBackend (BaseBackend ):
3+ def save (self , resq = None ):
4+ if not resq :
5+ resq = ResQ ()
6+ data = {
7+ 'failed_at' : str (datetime .datetime .now ()),
8+ 'payload' : self ._payload ,
9+ 'error' : self ._parse_message (self ._exception ),
10+ 'backtrace' : self ._parse_traceback (self ._traceback ),
11+ 'queue' : self ._queue
12+ }
13+ data = ResQ .encode (data )
14+ resq .redis .push ('failed' , data )
You can’t perform that action at this time.
0 commit comments