From cd2303afbfe971d9a251768618c4e41d3a128654 Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Mon, 28 Apr 2014 23:58:36 -0400 Subject: [PATCH] Feed errors that occur in the back end in the backend_status field --- planetstack/observer/error_mapper.py | 25 +++++++++++++++++++++++++ planetstack/observer/syncstep.py | 13 ++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 planetstack/observer/error_mapper.py diff --git a/planetstack/observer/error_mapper.py b/planetstack/observer/error_mapper.py new file mode 100644 index 0000000..a7daa59 --- /dev/null +++ b/planetstack/observer/error_mapper.py @@ -0,0 +1,25 @@ +from planetstack.config import Config +from util.logger import Logger, logging, logger + +class ErrorMapper: + def __init__(self, error_map_file): + self.error_map = {} + try: + error_map_lines = open(error_map_file).read().splitlines() + for l in error_map_lines: + if (not l.startswith('#')): + splits = l.split('->') + k,v = map(lambda i:i.rstrip(),splits) + self.error_map[k]=v + except: + logging.info('Could not read error map') + + + def map(self, error): + return self.error_map[error] + + + + + + diff --git a/planetstack/observer/syncstep.py b/planetstack/observer/syncstep.py index fb8c77a..d367279 100644 --- a/planetstack/observer/syncstep.py +++ b/planetstack/observer/syncstep.py @@ -3,6 +3,8 @@ import base64 from datetime import datetime from planetstack.config import Config from util.logger import Logger, logging +from observer.steps import * +from observer.error_mapper import error_mapper logger = Logger(level=logging.INFO) @@ -33,6 +35,8 @@ class SyncStep: """ dependencies = [] self.driver = args.get('driver') + self.error_map = args.get('error_map') + try: self.soft_deadline = int(self.get_prop('soft_deadline_seconds')) except: @@ -59,7 +63,14 @@ class SyncStep: self.sync_record(o) o.enacted = datetime.now() # Is this the same timezone? XXX o.save(update_fields=['enacted']) - except: + except Exception,e: + try: + o.backend_status = self.error_map.map(str(e)) + except: + o.backend_status = str(e) + + o.save(update_fields=['backend_status']) + logger.log_exc("sync step failed!") failed.append(o) -- 2.43.0