Skip to content

Commit 788da4c

Browse files
author
Matt George
committed
added begining of failure backend
1 parent 663269d commit 788da4c

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

src/pyres/failure/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+

src/pyres/failure/base.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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'))

src/pyres/failure/redis.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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)

0 commit comments

Comments
 (0)