diff --git a/scheduler_error_mailer/__init__.py b/scheduler_error_mailer/__init__.py index 82ee32f70..36504c54b 100644 --- a/scheduler_error_mailer/__init__.py +++ b/scheduler_error_mailer/__init__.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- ############################################################################## # -# Scheduler error mailer module for OpenERP -# Copyright (C) 2012 Akretion +# Scheduler Error Mailer module for OpenERP +# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/) # @author: Sébastien Beau +# @author Alexis de Lattre # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -20,6 +21,4 @@ # ############################################################################## -import ir_cron -# import test_fail_scheduler - +from . import ir_cron diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__openerp__.py index c477c4e64..b1cb4dfe6 100644 --- a/scheduler_error_mailer/__openerp__.py +++ b/scheduler_error_mailer/__openerp__.py @@ -1,8 +1,8 @@ # -*- encoding: utf-8 -*- ############################################################################## # -# Scheduler error mailer module for OpenERP -# Copyright (C) 2012 Akretion +# Scheduler Error Mailer module for OpenERP +# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/) # @author: Sébastien Beau # @author David Beal # @author Alexis de Lattre @@ -24,18 +24,25 @@ { - 'name': 'Scheduler error mailer', + 'name': 'Scheduler Error Mailer', + 'summary': 'Send an e-mail when a scheduler fails', 'version': '1.0', 'category': 'Extra Tools', 'license': 'AGPL-3', - 'description': """This module adds the possibility to send an e-mail when a scheduler raises an error""", + 'description': """ +Scheduler Error Mailer +====================== + +This module adds the possibility to send an e-mail when a scheduler raises an error.""", 'author': 'Akretion', 'website': 'http://www.akretion.com/', 'depends': ['email_template'], - 'init_xml': [], - 'update_xml': ['ir_cron.xml', 'ir_cron_email_tpl.xml'], - 'demo_xml': [], + 'data': [ + 'ir_cron.xml', + 'ir_cron_email_tpl.xml', + ], + 'demo': ['ir_cron_demo.xml'], + 'images': ['images/scheduler_error_mailer.jpg'], 'installable': True, 'active': False, } - diff --git a/scheduler_error_mailer/images/scheduler_error_mailer.jpg b/scheduler_error_mailer/images/scheduler_error_mailer.jpg new file mode 100644 index 000000000..a8a3af766 Binary files /dev/null and b/scheduler_error_mailer/images/scheduler_error_mailer.jpg differ diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py index 8782eb0b7..770a78fbb 100644 --- a/scheduler_error_mailer/ir_cron.py +++ b/scheduler_error_mailer/ir_cron.py @@ -1,8 +1,8 @@ # -*- encoding: utf-8 -*- ################################################################################# # -# Scheduler error mailer module for OpenERP -# Copyright (C) 2012 Akretion +# Scheduler Error Mailer module for OpenERP +# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/) # @author: Sébastien Beau # @author David Beal # @author Alexis de Lattre @@ -22,28 +22,45 @@ # ############################################################################## -from osv import osv, fields -from datetime import datetime +from openerp.osv import orm, fields +from openerp.tools.translate import _ +import logging +logger = logging.getLogger(__name__) -class ir_cron(osv.osv): +class ir_cron(orm.Model): _inherit = "ir.cron" _columns = { - 'email_template' : fields.many2one('email.template', 'E-mail template'), + 'email_template': fields.many2one('email.template', + 'Error E-mail Template', + help="Select the email template that will be sent when this scheduler fails."), } - def _handle_callback_exception(self, cr, uid, model, func, args, job_id, job_exception): + def _handle_callback_exception(self, cr, uid, model_name, method_name, args, job_id, job_exception): - res = super(ir_cron, self)._handle_callback_exception(cr, uid, model, func, args, job_id, job_exception) + res = super(ir_cron, self)._handle_callback_exception(cr, uid, + model_name, method_name, args, job_id, job_exception) my_cron = self.browse(cr, uid, job_id) - if my_cron.email_template.id: - # we put the job_exception in context to be able to get it inside the mail template + if my_cron.email_template: + # we put the job_exception in context to be able to print it inside + # the email template context = {'job_exception': job_exception} - id_mail_messsage = self.pool.get('email.template').send_mail(cr, uid, - my_cron.email_template.id, my_cron.id, force_send=True, context=context) + logger.debug("Sending scheduler error email with context=%s" % context) + self.pool['email.template'].send_mail(cr, uid, + my_cron.email_template.id, my_cron.id, force_send=True, + context=context) return res + + +class res_users(orm.Model): + _inherit = 'res.users' + + def test_scheduler_failure(self, cr, uid, context=None): + """This function is used to test and debug this module""" + raise orm.except_orm(_('Error :'), _("Task failure with UID = %d." % uid)) + diff --git a/scheduler_error_mailer/ir_cron.xml b/scheduler_error_mailer/ir_cron.xml index da3e844d8..ee1bcfd6d 100644 --- a/scheduler_error_mailer/ir_cron.xml +++ b/scheduler_error_mailer/ir_cron.xml @@ -1,24 +1,24 @@ - - - ir.cron.error.mailer.form - ir.cron - - form - - - - - - - - - - + + + + + ir.cron.error.mailer.form + ir.cron + + + + + + + + + + diff --git a/scheduler_error_mailer/ir_cron_demo.xml b/scheduler_error_mailer/ir_cron_demo.xml new file mode 100644 index 000000000..d8453b4bf --- /dev/null +++ b/scheduler_error_mailer/ir_cron_demo.xml @@ -0,0 +1,27 @@ + + + + + + + + + Test Scheduler Error Mailer + + + 1 + hours + -1 + + + + + + + + + diff --git a/scheduler_error_mailer/ir_cron_email_tpl.xml b/scheduler_error_mailer/ir_cron_email_tpl.xml index 5406d9aaf..8b4a0a7e0 100644 --- a/scheduler_error_mailer/ir_cron_email_tpl.xml +++ b/scheduler_error_mailer/ir_cron_email_tpl.xml @@ -1,32 +1,50 @@ - - + - - Scheduler error - ${object.user_id.user_email or ''} - [DB ${object._cr.dbname}] Scheduler '${object.name or ''}' FAILED - ${object.user_id.user_email or ''} - - - + + Scheduler Error + ${object.user_id.user_email or ''} + ${object.user_id.user_email or ''} + Scheduler '${object.name or ''}' FAILED + + + -${hasattr(context.get('ctx').get('job_exception'), 'value') and context.get('ctx').get('job_exception').value or context.get('ctx').get('job_exception')} +

OpenERP tried to run the scheduler ${object.name or ''} but it failed. Here is the error message :

-You may check the logs of OpenERP to get more information about this failure. + +${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'} + -The next action on this task is scheduled on ${object.nextcall or ''}. +

You may check the logs of the OpenERP server to get more information about this failure.

--- +

Properties of the scheduler ${object.name or ''} :

+
    +
  • Model : ${object.model or ''}
  • +
  • Method : ${object.function or ''}
  • +
  • Arguments : ${object.args or ''}
  • +
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • +
  • Number of calls : ${object.numbercall or '0'}
  • +
  • Repeat missed : ${object.doall}
  • +
  • User : ${object.user_id.name or ''}
  • +
+ +

+--
Automatic e-mail sent by OpenERP. Do not reply. - ]]> - - +

+ + ]]>
+
+ + +
diff --git a/scheduler_error_mailer/static/src/img/icon.png b/scheduler_error_mailer/static/src/img/icon.png new file mode 100644 index 000000000..6b22abf97 Binary files /dev/null and b/scheduler_error_mailer/static/src/img/icon.png differ diff --git a/scheduler_error_mailer/test_fail_scheduler.py b/scheduler_error_mailer/test_fail_scheduler.py deleted file mode 100644 index 937f88e6e..000000000 --- a/scheduler_error_mailer/test_fail_scheduler.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Scheduler error mailer module for OpenERP -# Copyright (C) 2012 Akretion -# @author David Beal -# @author Alexis de Lattre -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from osv import fields, osv -from tools.translate import _ - -class test_fail_scheduler(osv.osv_memory): - _name = "test.fail.scheduler" - _description = "Test scheduler failure" - - def test_fail(self, cr, uid, context=None): - """ This a test fail, only for debugging purpose - DO NOT UNCOMMENT IMPORT IN init.py IN PRODUCTION ENVIRONNEMENT - """ - - raise osv.except_osv(_('Error :'), _("task failure")) - # context['tytytyty'] - -test_fail_scheduler()