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