From d187fa7bf82089905dba2572e2c0711c132b3236 Mon Sep 17 00:00:00 2001 From: "P. Christeas" Date: Mon, 17 Jan 2011 23:31:08 +0200 Subject: [PATCH 1/2] ir_cron: some port to pythonic logging bzr revid: p_christ@hol.gr-20110117213108-u0k7n9y4xmtudvnk --- bin/addons/base/ir/ir_cron.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/bin/addons/base/ir/ir_cron.py b/bin/addons/base/ir/ir_cron.py index e7b1a541f0c..aa95bacfb1d 100644 --- a/bin/addons/base/ir/ir_cron.py +++ b/bin/addons/base/ir/ir_cron.py @@ -41,6 +41,10 @@ _intervalTypes = { } class ir_cron(osv.osv, netsvc.Agent): + """ This is the ORM object that periodically executes actions. + + Note that we use the netsvc.Agent()._logger member. + """ _name = "ir.cron" _order = 'name' _columns = { @@ -74,7 +78,7 @@ class ir_cron(osv.osv, netsvc.Agent): try: for this in self.browse(cr, uid, ids, context): str2tuple(this.args) - except: + except Exception: return False return True @@ -90,8 +94,7 @@ class ir_cron(osv.osv, netsvc.Agent): try: f(cr, uid, *args) except Exception, e: - self._logger.notifyChannel('timers', netsvc.LOG_ERROR, "Job call of self.pool.get('%s').%s(cr, uid, *%r) failed" % (model, func, args)) - self._logger.notifyChannel('timers', netsvc.LOG_ERROR, tools.exception_to_unicode(e)) + self._logger.exception("Job call of self.pool.get('%s').%s(cr, uid, *%r) failed" % (model, func, args)) def _poolJobs(self, db_name, check=False): @@ -135,9 +138,7 @@ class ir_cron(osv.osv, netsvc.Agent): self.setAlarm(self._poolJobs, next_call, db_name, db_name) except Exception, ex: - logger = netsvc.Logger() - logger.notifyChannel('cron', netsvc.LOG_WARNING, - 'Exception in cron:'+str(ex)) + self._logger.warning('Exception in cron:', exc_info=True) finally: cr.commit() From 695f87fa6a8cec96be17618aa7a1c3441a9552bc Mon Sep 17 00:00:00 2001 From: "P. Christeas" Date: Mon, 17 Jan 2011 23:38:50 +0200 Subject: [PATCH 2/2] netsvc: fix Agent patch, w. daemon threads and py. logging. [1/2] Conflicts: bin/netsvc.py (kept only the pythonic logging part) bzr revid: p_christ@hol.gr-20110117213850-5pq5suu1rje6h2cd --- bin/netsvc.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bin/netsvc.py b/bin/netsvc.py index 62b427d5eb1..0d57b13241f 100644 --- a/bin/netsvc.py +++ b/bin/netsvc.py @@ -309,7 +309,7 @@ class Agent(object): """ __tasks = [] __tasks_by_db = {} - _logger = Logger() + _logger = logging.getLogger('netsvc.agent') @classmethod def setAlarm(cls, function, timestamp, db_name, *args, **kwargs): @@ -320,6 +320,7 @@ class Agent(object): @classmethod def cancel(cls, db_name): """Cancel all tasks for a given database. If None is passed, all tasks are cancelled""" + cls._logger.debug("Cancel timers for %s db", db_name or 'all') if db_name is None: cls.__tasks, cls.__tasks_by_db = [], {} else: @@ -334,7 +335,7 @@ class Agent(object): @classmethod def runner(cls): """Neverending function (intended to be ran in a dedicated thread) that - checks every 60 seconds tasks to run. + checks every 60 seconds tasks to run. TODO: make configurable """ current_thread = threading.currentThread() while True: @@ -346,7 +347,9 @@ class Agent(object): # null timestamp -> cancelled task continue current_thread.dbname = dbname # hack hack - cls._logger.notifyChannel('timers', LOG_DEBUG, "Run %s.%s(*%r, **%r)" % (function.im_class.__name__, function.func_name, args, kwargs)) + cls._logger.debug("Run %s.%s(%s)", + function.im_class.__name__, function.func_name, + pretty_args(args, kwargs, 120)) delattr(current_thread, 'dbname') task_thread = threading.Thread(target=function, name='netsvc.Agent.task', args=args, kwargs=kwargs) # force non-daemon task threads (the runner thread must be daemon, and this property is inherited by default) @@ -362,7 +365,6 @@ agent_runner = threading.Thread(target=Agent.runner, name="netsvc.Agent.runner") agent_runner.setDaemon(True) agent_runner.start() - import traceback class Server: