cc-4105: further refactored error handling. generalized handling of events

This commit is contained in:
Rudi Grinberg 2012-08-02 14:26:13 -04:00
parent 7c85acac98
commit 82656408c9
2 changed files with 18 additions and 9 deletions

View file

@ -6,13 +6,16 @@ from media.monitor.pure import LazyProperty
logger = logging.getLogger('mediamonitor2') logger = logging.getLogger('mediamonitor2')
logging.basicConfig(filename='/home/rudi/throwaway/mm2.log', level=logging.DEBUG) logging.basicConfig(filename='/home/rudi/throwaway/mm2.log', level=logging.DEBUG)
appname = 'mediamonitor2'
class Loggable(object): class Loggable(object):
__metaclass__ = abc.ABCMeta __metaclass__ = abc.ABCMeta
@LazyProperty @LazyProperty
def logger(self): def logger(self):
# TODO : Clean this up # TODO : Clean this up
if not hasattr(self,"_logger"): self._logger = logging.getLogger('mediamonitor2') if not hasattr(self,"_logger"): self._logger = logging.getLogger(appname)
return self._logger return self._logger
def unexpected_exception(self,e): def unexpected_exception(self,e):
self.fatal_exception("'Unexpected' exception has occured:", e) self.fatal_exception("'Unexpected' exception has occured:", e)
@ -21,6 +24,8 @@ class Loggable(object):
self.logger.error( str(e) ) self.logger.error( str(e) )
self.logger.error( traceback.format_exc() ) self.logger.error( traceback.format_exc() )
def get_logger(): def get_logger():
return logging.getLogger('mediamonitor2') """
in case we want to use the common logger from a procedural interface
"""
return logging.getLogger(appname)

View file

@ -5,7 +5,6 @@ import copy
import traceback import traceback
from media.monitor.handler import ReportHandler from media.monitor.handler import ReportHandler
from media.monitor.events import NewFile, DeleteFile, ModifyFile
from media.monitor.log import Loggable from media.monitor.log import Loggable
from media.monitor.listeners import FileMediator from media.monitor.listeners import FileMediator
from media.monitor.exceptions import BadSongFile from media.monitor.exceptions import BadSongFile
@ -42,15 +41,19 @@ class RequestSync(threading.Thread,Loggable):
except Exception as e: except Exception as e:
self.logger.info("An evil exception occured to packing '%s'" % request.path) self.logger.info("An evil exception occured to packing '%s'" % request.path)
self.logger.error( traceback.format_exc() ) self.logger.error( traceback.format_exc() )
# Remove when finished debugging
def send_one(x): self.apiclient.send_media_monitor_requests( [x] )
def make_req(): self.apiclient.send_media_monitor_requests( packed_requests ) def make_req(): self.apiclient.send_media_monitor_requests( packed_requests )
# Is this retry shit even necessary? Consider getting rid of this.
for try_index in range(0,self.retries): for try_index in range(0,self.retries):
try: make_req() try: make_req()
# most likely we did not get json response as we expected
except ValueError: except ValueError:
self.logger.info("Api Controller is a piece of shit... will fix once I setup the damn debugger") self.logger.info("Api Controller is a piece of shit\n \
it's not returning json when it should\n \
... will fix once I setup the damn debugger")
self.logger.info("Trying again after %f seconds" % self.request_wait) self.logger.info("Trying again after %f seconds" % self.request_wait)
time.sleep( self.request_wait ) time.sleep( self.request_wait )
except Exception as e:
self.logger.unexpected_exception(e)
else: else:
self.logger.info("Request worked on the '%d' try" % (try_index + 1)) self.logger.info("Request worked on the '%d' try" % (try_index + 1))
break break
@ -111,11 +114,12 @@ class WatchSyncer(ReportHandler,Loggable):
self.logger.info("Received event '%s'. Path: '%s'" % ( "", getattr(event,'path','No path exists') )) self.logger.info("Received event '%s'. Path: '%s'" % ( "", getattr(event,'path','No path exists') ))
try: self.push_queue( event ) try: self.push_queue( event )
except BadSongFile as e: except BadSongFile as e:
self.logger.info("...") self.fatal_exception("Received bas song file '%s'" % e.path, e)
except Exception as e: except Exception as e:
self.unexpected_exception(e) self.unexpected_exception(e)
else: else:
self.logger.info("Received event that cannot be packed. Printing its representation:") self.logger.info("Received event that does not implement packing.\
Printing its representation:")
self.logger.info( repr(event) ) self.logger.info( repr(event) )
def requests_left_count(self): return len(self.__requests) def requests_left_count(self): return len(self.__requests)