Browse Source

New Module Into Tools

pull/81/head
SHEREEF PT 8 years ago
parent
commit
26741fbe1a
  1. 31
      cron_failure_notification/README.rst
  2. 23
      cron_failure_notification/__init__.py
  3. 48
      cron_failure_notification/__openerp__.py
  4. 19
      cron_failure_notification/demo/ir_cron_demo.xml
  5. 23
      cron_failure_notification/models/__init__.py
  6. 115
      cron_failure_notification/models/logs_scheduled_actions.py
  7. BIN
      cron_failure_notification/static/description/banner.jpg
  8. BIN
      cron_failure_notification/static/description/cybro_logo.png
  9. BIN
      cron_failure_notification/static/description/icon.png
  10. 71
      cron_failure_notification/static/description/index.html
  11. BIN
      cron_failure_notification/static/description/logs_form_view.png
  12. BIN
      cron_failure_notification/static/description/logs_mail_template.png
  13. BIN
      cron_failure_notification/static/description/logs_pdf_report.png
  14. 54
      cron_failure_notification/views/error_log_report_template.xml
  15. 25
      cron_failure_notification/views/error_mail_template.xml
  16. 77
      cron_failure_notification/views/logs_scheduled_actions_view.xml
  17. 12
      cron_failure_notification/views/report.xml

31
cron_failure_notification/README.rst

@ -0,0 +1,31 @@
Cron Job Failure Notifications v9
=================================
This module will generate error Logs for Scheduled Actions / Cron jobs running in backend server.
Purpose of module to have creating history & PDF reports of failure of all jobs in backend.
Features
========
* Any failure will automatically logged.
* PDF Report for error logs.
* Custom Error Logs Scheduled Actions Email Template.
Installation
============
No other requirements.
To test the module:
- Activate Developer mode
- Go to Settings --> Technical --> Automation --> Scheduled actions.
- Select the record "Test Cron Failure Notification" and check active button.
- Click the button 'Run Manually'.
- A log of scheduler failure will be created under the menu 'Logs Scheduled Actions'.
Configuration
=============
To analyse/test the log history of cron failure,
Go to Settings --> Technical --> Automation --> Logs Scheduled Actions.
Credits
=======
Developer: Mufeeda C K @ cybrosys
Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in

23
cron_failure_notification/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import models

48
cron_failure_notification/__openerp__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': "Cron Job Failure Notification",
'summary': """Cron jobs/Scheduled Actions failure Log Notification & Its PDF Reports""",
'description': """
This module will generate error Logs for Scheduled
Actions / Cron jobs running in backend server
""",
'author': "Cybrosys Techno Solution",
'website': "http://www.cybrosys.com",
'category': 'Extra Tools',
'depends': ['base', 'mail', 'web', 'base_setup'],
'data': [
'views/logs_scheduled_actions_view.xml',
'views/error_log_report_template.xml',
'views/report.xml',
'views/error_mail_template.xml',
],
'demo': [
'demo/ir_cron_demo.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

19
cron_failure_notification/demo/ir_cron_demo.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="test_scheduler_error_mailer" model="ir.cron">
<field name="name">Test Cron Failure Notification</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="model">ir.cron</field>
<field name="function">_test_scheduler_failure</field>
<field name="email_template_id" ref="cron_failure_notification.scheduler_error_mailer"/>
</record>
</data>
</openerp>

23
cron_failure_notification/models/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import logs_scheduled_actions

115
cron_failure_notification/models/logs_scheduled_actions.py

@ -0,0 +1,115 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import datetime
import logging
from openerp import models, fields, api, _
from openerp.exceptions import UserError
class LogsScheduledActions(models.Model):
_description = "Error log"
_name = 'logs.action'
_inherit = ['mail.thread', 'ir.needaction_mixin', 'ir.cron']
name = fields.Char(string="Name", required=True, track_visibility='always')
method = fields.Char(string="Method", track_visibility='always')
created_by = fields.Many2one('res.users', string="Created by", default=lambda self: self.env.user, index=True)
object_action = fields.Char(string="Object", track_visibility='always')
exec_date = fields.Datetime(string="Execution Date Time")
company_name = fields.Many2one('res.company', string="Company", default=lambda self: self.env.user.company_id,
index=True)
stages_id = fields.Selection(
[('new', 'New'), ('confirm', 'Confirmed'), ('resolved', 'Resolved'), ('cancelled', 'Cancelled')], string="State", default='new')
error_details = fields.Char(string="Error details", track_visibility='always')
@api.multi
def action_mail_send(self):
self.ensure_one()
ir_model_data = self.env['ir.model.data']
template_id = ir_model_data.get_object_reference('cron_failure_notification',
'scheduler_error_mailer')[1]
try:
compose_form_id = ir_model_data.get_object_reference('mail', 'email_compose_message_wizard_form')[1]
except ValueError:
compose_form_id = False
ctx = dict(self.env.context or {})
ctx.update({
'default_model': 'logs.action',
'default_res_id': self.ids[0],
'default_use_template': bool(template_id),
'default_template_id': template_id,
'default_composition_mode': 'comment',
})
return {
'name': _('Compose Email'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
@api.multi
def button_confirm_action(self):
self.write({'stages_id': 'confirm'})
@api.multi
def button_resolved_action(self):
self.write({'stages_id': 'resolved'})
@api.multi
def button_cancel_action(self):
self.write({'stages_id': 'cancelled'})
_logger = logging.getLogger(__name__)
class IrCron(models.Model):
_inherit = "ir.cron"
@api.model
def _handle_callback_exception(
self, model_name, method_name, args, job_id, job_exception):
res = super(IrCron, self)._handle_callback_exception(
model_name, method_name, args, job_id, job_exception)
my_cron = self.browse(job_id)
self.env['logs.action'].create({
'name': my_cron.name,
'method': my_cron.model,
'object_action': my_cron.function,
'exec_date': datetime.datetime.now(),
'error_details': str(job_exception),
})
return res
@api.model
def _test_scheduler_failure(self):
"""This function is used to test and debug this module"""
raise UserError(
_("Task failure with UID = %d.") % self._uid)

BIN
cron_failure_notification/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

BIN
cron_failure_notification/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
cron_failure_notification/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

71
cron_failure_notification/static/description/index.html

@ -0,0 +1,71 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Cron Job Failure Notification</h2>
<h3 class="oe_slogan"><center>Error Logs for Scheduled Actions/Cron jobs running in backend server.</center></h3>
<h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4>
</div>
<div>
<h4><p>Major Features:</p></h4>
<ul>
<li style="list-style:none !important;"><span style="color:green;"> &#8594;</span>&nbsp;&nbsp; Creating Failure History for All Jobs in Backend.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#8594;</span>&nbsp;&nbsp; Failure Report Will Automatically Logged.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#8594;</span>&nbsp;&nbsp; Administrator Can Review Logs.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#8594;</span>&nbsp;&nbsp; Send Report to Support/Technical Team by Email Button.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#8594;</span>&nbsp;&nbsp; Custom Email Template for Sending Mail with Failure Details.</li>
</ul>
</div>
</section>
<section class="oe_container oe_dark">
<h3 class="oe_slogan">Error Logs Scheduled Actions - Form View</h3>
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot" src="logs_form_view.png">
</div>
</section>
<section class="oe_container">
<h3 class="oe_slogan">Print PDF Report- Error Logs Scheduled</h3>
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot" src="logs_pdf_report.png">
</div>
</section>
<section class="oe_container oe_dark">
<h3 class="oe_slogan">Send By Email - Error Logs Scheduled Actions Attaching PDF Report</h3>
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot" src="logs_mail_template.png">
</div>
</section>
<section class="oe_container">
<h3 class="oe_slogan" style="text-align:left;padding-left: 23px;">How to test this module ?</h3>
<div>
<p>
<ul>
<li>Activate Developer mode.</li>
<li>Go to Settings --> Technical --> Automation --> Scheduled actions.</li>
<li>Select the record "Test Cron Failure Notification" and check active button.</li>
<li>Click the button 'Run Manually'.</li>
<li>A log of scheduler failure will be created under the menu 'Logs Scheduled Actions'.</li>
<li>For more details, Please see the README.rst file with this module.</li>
</ul>
</p>
</div>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</section>

BIN
cron_failure_notification/static/description/logs_form_view.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
cron_failure_notification/static/description/logs_mail_template.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
cron_failure_notification/static/description/logs_pdf_report.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

54
cron_failure_notification/views/error_log_report_template.xml

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_log_error">
<t t-call="report.html_container">
<t t-call="report.internal_layout">
<div class="page">
<p t-esc="res_company.name"/>
<h2>
<span t-field="doc.name"/>
</h2>
<table class="table">
<tbody>
<tr t-if="doc.object_action">
<th>Object:</th>
<td><span t-field="doc.object_action"/></td>
</tr>
<tr t-if="doc.method">
<th>Method:</th>
<td><span t-field="doc.method"/></td>
</tr>
<tr t-if="doc.created_by">
<th>Responsible user:</th>
<td><span t-field="doc.created_by"/></td>
</tr>
<tr t-if="doc.exec_date">
<th>Execution Date Time:</th>
<td><span t-field="doc.exec_date"/></td>
</tr>
<tr t-if="doc.company_name">
<th>Company:</th>
<td><span t-field="doc.company_name"/></td>
</tr>
</tbody>
</table>
<br/><br/>
<strong><p>Error: </p></strong>
<p t-field="doc.error_details"/>
<div class="oe_structure"/>
</div>
</t>
</t>
</template>
<template id="report_logs_details">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="cron_failure_notification.report_log_error" />
</t>
</t>
</template>
</data>
</openerp>

25
cron_failure_notification/views/error_mail_template.xml

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<!-- Error Email template -->
<record id="scheduler_error_mailer" model="mail.template">
<field name="name">Scheduler Error</field>
<field name="email_from">${object.user_id.email}</field>
<field name="subject">'${object.name}' FAILED</field>
<field name="report_template" ref="action_report_logs"/>
<field name="model_id" ref="cron_failure_notification.model_logs_action"/>
<field name="auto_delete" eval="True"/>
<field name="body_html">
<![CDATA[
Dear Support team,<br>
<p>Here we are attaching error logs from scheduled cron jobs on our server, so please
urgently take action.<br> If you have any question, don't hesitate to contact us.<br></p><br>
Thank You.
]]>
</field>
</record>
</data>
</openerp>

77
cron_failure_notification/views/logs_scheduled_actions_view.xml

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="developer_mode_active_form">
<field name="name">DeveloperMode</field>
<field name="model"></field>
<field name="inherit_id" ref="web.login"/>
<field name="arch" type="xml">
<xpath expr="//input[@name='redirect']" position='attributes'>
<attribute name="t-att-value">'%s%sdebug=1' % (redirect or '/web', redirect and '?' in redirect and '&amp;' or '?')</attribute>
</xpath>
</field>
</record>
<record id="logs_form_view" model="ir.ui.view">
<field name="name">logs.action.form</field>
<field name="model">logs.action</field>
<field name="view_type">form</field>
<field name="view_type">form</field>
<field name="arch" type="xml">
<form string="Logs">
<header>
<button name="button_confirm_action" string="Confirm" type="object" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'new')]}"/>
<button name="button_cancel_action" string="Cancel" type="object" attrs="{'invisible': [('stages_id', '!=', 'new')]}"/>
<button name="button_resolved_action" string="Resolve" type="object" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'confirm')]}"/>
<button name="action_mail_send" string="Send By Email" type="object" context="{'send_mail':True}" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'confirm')]}"/>
<field name="stages_id" widget="statusbar"/>
</header>
<sheet string="Logs">
<group>
<group>
<field name="name"/>
<field name="method"/>
<field name="created_by"/>
</group>
<group>
<field name="object_action"/>
<field name="exec_date"/>
<field name="company_name"/>
</group>
</group>
<notebook>
<page name="error_info" string="Error">
<field name="error_details"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="logs_tree_view">
<field name="name">logs.action.tree</field>
<field name="model">logs.action</field>
<field name="arch" type="xml">
<tree string="Logs">
<field name="name"/>
<field name="exec_date"/>
<field name="stages_id"/>
</tree>
</field>
</record>
<record id="ir_cron_act_logs" model="ir.actions.act_window">
<field name="name">Logs Scheduled Actions</field>
<field name="res_model">logs.action</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
<field name="view_id" ref="logs_tree_view"/>
</record>
<menuitem id="menu_ir_cron_logs" action="ir_cron_act_logs" parent="base.menu_automation"/>
</data>
</openerp>

12
cron_failure_notification/views/report.xml

@ -0,0 +1,12 @@
<openerp>
<data>
<report id="action_report_logs"
model="logs.action"
string="Print Log Scheduled"
report_type="qweb-pdf"
file="cron_failure_notification.report_logs_details"
name="cron_failure_notification.report_logs_details"
menu="True"
/>
</data>
</openerp>
Loading…
Cancel
Save