Port to OpenERP 7.0.
Add logo and screenshot. Add demo scheduler and test/debug function.pull/2602/head
parent
c599853fc3
commit
c3c5b0e7de
|
@ -1,9 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# Scheduler error mailer module for OpenERP
|
# Scheduler Error Mailer module for OpenERP
|
||||||
# Copyright (C) 2012 Akretion
|
# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
|
||||||
# @author: Sébastien Beau <sebastien.beau@akretion.com>
|
# @author: Sébastien Beau <sebastien.beau@akretion.com>
|
||||||
|
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
@ -20,6 +21,4 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import ir_cron
|
from . import ir_cron
|
||||||
# import test_fail_scheduler
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# -*- encoding: utf-8 -*-
|
# -*- encoding: utf-8 -*-
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# Scheduler error mailer module for OpenERP
|
# Scheduler Error Mailer module for OpenERP
|
||||||
# Copyright (C) 2012 Akretion
|
# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
|
||||||
# @author: Sébastien Beau <sebastien.beau@akretion.com>
|
# @author: Sébastien Beau <sebastien.beau@akretion.com>
|
||||||
# @author David Beal <bealdavid@gmail.com>
|
# @author David Beal <bealdavid@gmail.com>
|
||||||
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
@ -24,18 +24,25 @@
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Scheduler error mailer',
|
'name': 'Scheduler Error Mailer',
|
||||||
|
'summary': 'Send an e-mail when a scheduler fails',
|
||||||
'version': '1.0',
|
'version': '1.0',
|
||||||
'category': 'Extra Tools',
|
'category': 'Extra Tools',
|
||||||
'license': 'AGPL-3',
|
'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',
|
'author': 'Akretion',
|
||||||
'website': 'http://www.akretion.com/',
|
'website': 'http://www.akretion.com/',
|
||||||
'depends': ['email_template'],
|
'depends': ['email_template'],
|
||||||
'init_xml': [],
|
'data': [
|
||||||
'update_xml': ['ir_cron.xml', 'ir_cron_email_tpl.xml'],
|
'ir_cron.xml',
|
||||||
'demo_xml': [],
|
'ir_cron_email_tpl.xml',
|
||||||
|
],
|
||||||
|
'demo': ['ir_cron_demo.xml'],
|
||||||
|
'images': ['images/scheduler_error_mailer.jpg'],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'active': False,
|
'active': False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
|
@ -1,8 +1,8 @@
|
||||||
# -*- encoding: utf-8 -*-
|
# -*- encoding: utf-8 -*-
|
||||||
#################################################################################
|
#################################################################################
|
||||||
#
|
#
|
||||||
# Scheduler error mailer module for OpenERP
|
# Scheduler Error Mailer module for OpenERP
|
||||||
# Copyright (C) 2012 Akretion
|
# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
|
||||||
# @author: Sébastien Beau <sebastien.beau@akretion.com>
|
# @author: Sébastien Beau <sebastien.beau@akretion.com>
|
||||||
# @author David Beal <bealdavid@gmail.com>
|
# @author David Beal <bealdavid@gmail.com>
|
||||||
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
@ -22,28 +22,49 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from osv import osv, fields
|
from openerp.osv import orm, fields
|
||||||
from datetime import datetime
|
from openerp.tools.translate import _
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class ir_cron(osv.osv):
|
class ir_cron(orm.Model):
|
||||||
_inherit = "ir.cron"
|
_inherit = "ir.cron"
|
||||||
|
|
||||||
_columns = {
|
_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)
|
my_cron = self.browse(cr, uid, job_id)
|
||||||
|
|
||||||
if my_cron.email_template.id:
|
if my_cron.email_template:
|
||||||
# we put the job_exception in context to be able to get it inside the mail template
|
# we put the job_exception in context to be able to print it inside
|
||||||
context = {'job_exception': job_exception}
|
# the email template
|
||||||
id_mail_messsage = self.pool.get('email.template').send_mail(cr, uid,
|
context = {
|
||||||
my_cron.email_template.id, my_cron.id, force_send=True, context=context)
|
'job_exception': job_exception,
|
||||||
|
'dbname': cr.dbname,
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
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))
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
Copyright (C) 2012 Akretion
|
Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
|
||||||
The licence is in the file __openerp__.py
|
The licence is in the file __openerp__.py
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<openerp>
|
<openerp>
|
||||||
<data>
|
<data>
|
||||||
<record id="ir_cron_error_mailer_view" model="ir.ui.view">
|
|
||||||
<field name="name">ir.cron.error.mailer.form</field>
|
|
||||||
<field name="model">ir.cron</field>
|
<record id="ir_cron_error_mailer_view" model="ir.ui.view">
|
||||||
<field name="inherit_id" ref="base.ir_cron_view"/>
|
<field name="name">ir.cron.error.mailer.form</field>
|
||||||
<field name="type">form</field>
|
<field name="model">ir.cron</field>
|
||||||
<field name="arch" type="xml">
|
<field name="inherit_id" ref="base.ir_cron_view"/>
|
||||||
<field name="doall" position='after'>
|
<field name="arch" type="xml">
|
||||||
<group col="6" colspan="4">
|
<field name="doall" position="after">
|
||||||
<separator string="Error Mailer" colspan="6"/>
|
<field name="email_template" />
|
||||||
<field name="email_template" colspan="2"/>
|
</field>
|
||||||
</group>
|
</field>
|
||||||
</field>
|
</record>
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2013 Akretion (http://www.akretion.com/)
|
||||||
|
@author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
The licence is in the file __openerp__.py
|
||||||
|
-->
|
||||||
|
|
||||||
|
<openerp>
|
||||||
|
<data noupdate="1">
|
||||||
|
|
||||||
|
<record id="test_scheduler_error_mailer" model="ir.cron">
|
||||||
|
<field name="name">Test Scheduler Error Mailer</field>
|
||||||
|
<field name="active" eval="False"/>
|
||||||
|
<field name="user_id" ref="base.user_root"/>
|
||||||
|
<field name="interval_number">1</field>
|
||||||
|
<field name="interval_type">hours</field>
|
||||||
|
<field name="numbercall">-1</field> <!-- don't limit the number of calls -->
|
||||||
|
<field name="doall" eval="True"/>
|
||||||
|
<field name="email_template" ref="scheduler_error_mailer"/>
|
||||||
|
<field name="model" eval="'res.users'"/>
|
||||||
|
<field name="function" eval="'test_scheduler_failure'" />
|
||||||
|
<field name="args" eval="'()'"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -1,32 +1,50 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
Copyright (C) 2012 Akretion
|
Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
|
||||||
The licence is in the file __openerp__.py
|
The licence is in the file __openerp__.py
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<openerp>
|
<openerp>
|
||||||
<!-- Email template -->
|
<data noupdate="1">
|
||||||
<data noupdate="1">
|
|
||||||
|
|
||||||
<record id="scheduler_error_mailer" model="email.template">
|
<!-- Error Email template -->
|
||||||
<field name="name">Scheduler error</field>
|
<record id="scheduler_error_mailer" model="email.template">
|
||||||
<field name="email_from">${object.user_id.user_email or ''}</field>
|
<field name="name">Scheduler Error</field>
|
||||||
<field name="subject">[DB ${object._cr.dbname}] Scheduler '${object.name or ''}' FAILED</field>
|
<field name="email_from">${object.user_id.user_email or ''}</field>
|
||||||
<field name="email_to">${object.user_id.user_email or ''}</field>
|
<field name="email_to">${object.user_id.user_email or ''}</field>
|
||||||
<field name="model_id" ref="base.model_ir_cron"/>
|
<field name="subject">[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED</field>
|
||||||
<field name="auto_delete" eval="True"/>
|
<field name="model_id" ref="base.model_ir_cron"/>
|
||||||
<field name="body_text"><![CDATA[
|
<field name="auto_delete" eval="True"/>
|
||||||
On the database '${object._cr.dbname}', OpenERP has run the scheduler '${object.name or ''}' but it failed. Here is the error message :
|
<field name="body_html"><![CDATA[
|
||||||
|
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
|
||||||
|
|
||||||
${hasattr(context.get('ctx').get('job_exception'), 'value') and context.get('ctx').get('job_exception').value or context.get('ctx').get('job_exception')}
|
<p>OpenERP tried to run the scheduler <em>${object.name or ''}</em> in the database <em>${ctx.get('dbname')}</em> but it failed. Here is the error message :</p>
|
||||||
|
|
||||||
You may check the logs of OpenERP to get more information about this failure.
|
<strong>
|
||||||
|
${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}
|
||||||
|
</strong>
|
||||||
|
|
||||||
The next action on this task is scheduled on ${object.nextcall or ''}.
|
<p>You may check the logs of the OpenERP server to get more information about this failure.</p>
|
||||||
|
|
||||||
--
|
<p>Properties of the scheduler <em>${object.name or ''}</em> :</p>
|
||||||
Automatic e-mail sent by OpenERP. Do not reply.
|
<ul>
|
||||||
]]></field>
|
<li>Model : ${object.model or ''}</li>
|
||||||
</record>
|
<li>Method : ${object.function or ''}</li>
|
||||||
</data>
|
<li>Arguments : ${object.args or ''}</li>
|
||||||
|
<li>Interval : ${object.interval_number or '0'} ${object.interval_type or ''}</li>
|
||||||
|
<li>Number of calls : ${object.numbercall or '0'}</li>
|
||||||
|
<li>Repeat missed : ${object.doall}</li>
|
||||||
|
<li>User : ${object.user_id.name or ''}</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
-- <br/>
|
||||||
|
Automatic e-mail sent by OpenERP. Do not reply.<br/>
|
||||||
|
Database : ${ctx.get('dbname')}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
]]></field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.9 KiB |
|
@ -1,39 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# Scheduler error mailer module for OpenERP
|
|
||||||
# Copyright (C) 2012 Akretion
|
|
||||||
# @author David Beal <bealdavid@gmail.com>
|
|
||||||
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
|
||||||
#
|
|
||||||
# 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 <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
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()
|
|
Loading…
Reference in New Issue