summaryrefslogtreecommitdiff
path: root/python/skytools/scripting.py
diff options
context:
space:
mode:
authorMarko Kreen2009-09-10 11:04:35 +0000
committerMarko Kreen2009-09-10 11:54:14 +0000
commit98fad9ed8c3943919673a8310754eb58f9d8b7d4 (patch)
tree6f11d4882049a8528992307f67982893f8a0ccad /python/skytools/scripting.py
parent56a66d8febc0dde91f29b6f74cc20635c418b625 (diff)
DBScript: exception_hook
Diffstat (limited to 'python/skytools/scripting.py')
-rw-r--r--python/skytools/scripting.py29
1 files changed, 22 insertions, 7 deletions
diff --git a/python/skytools/scripting.py b/python/skytools/scripting.py
index 2b2f7c50..78e725b3 100644
--- a/python/skytools/scripting.py
+++ b/python/skytools/scripting.py
@@ -589,10 +589,12 @@ class DBScript(object):
def run_func_safely(self, func, prefer_looping = False):
"Run users work function, safely."
+ cname = None
+ emsg = None
try:
return func()
- except UsageError, ex:
- self.log.error(str(ex))
+ except UsageError, d:
+ self.log.error(str(d))
sys.exit(1)
except SystemExit, d:
self.send_stats()
@@ -612,26 +614,39 @@ class DBScript(object):
cname = d.cursor.connection.my_name
dsn = d.cursor.connection.dsn
sql = d.cursor.query
+ emsg = str(d).strip()
self.log.error("Job %s got error on connection '%s': %s" % (
- self.job_name,
- d.cursor.connection.my_name,
- str(d).strip()))
+ self.job_name, cname, emsg))
else:
n = "psycopg2.%s" % d.__class__.__name__
+ emsg = str(d).rstrip()
self.log.exception("Job %s crashed: %s: %s" % (
- self.job_name, n, str(d).rstrip()))
+ self.job_name, n, emsg))
except Exception, d:
self.send_stats()
+ emsg = str(d).rstrip()
self.log.exception("Job %s crashed: %s" % (
- self.job_name, str(d).rstrip()))
+ self.job_name, emsg))
# reset and sleep
self.reset()
+ self.exception_hook(d, emsg, cname)
if prefer_looping and self.looping and not self.do_single_loop:
time.sleep(20)
return -1
sys.exit(1)
+ def exception_hook(self, det, emsg, cname):
+ """Called on after exception processing.
+
+ Can do additional logging.
+
+ @param det: exception details
+ @param emsg: exception msg
+ @param cname: connection name or None
+ """
+ pass
+
def work(self):
"""Here should user's processing happen.