diff --git a/dead_mans_switch_client/README.rst b/dead_mans_switch_client/README.rst new file mode 100644 index 000000000..4dcc8cc99 --- /dev/null +++ b/dead_mans_switch_client/README.rst @@ -0,0 +1,74 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +========================== +Dead man's switch (client) +========================== + +This module is the client part of `dead_mans_switch_server`. It is responsible +of sending the server status updates, which in turn takes action if those +updates don't come in time. + +Configuration +============= + +After installing this module, you need to fill in the system parameter +``dead_mans_switch_client.url``. This must be the full URL to the server's +controller, usually of the form ``https://your.server/dead_mans_switch/alive``. + +This module attempts to send CPU and RAM statistics to the server. While this +is not mandatory, it's helpful for assessing a server's health. If you want +this, you need to install ``psutil``. + +You can also have the number of currently online users logged, but this only +works if the ``bus`` module is installed and longpolling configured correctly. + +Usage +===== + +This module doesn't have any visible effect on the client. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/149/9.0 + +For further information, please visit: + +* https://www.odoo.com/forum/help-1 + +Known issues / Roadmap +====================== + +* certificate pinning would be nice + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback +`here `_. + +Credits +======= + +Contributors +------------ + +* Holger Brunn +* Jairo Llopis + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/dead_mans_switch_client/__init__.py b/dead_mans_switch_client/__init__.py new file mode 100644 index 000000000..915f58d4d --- /dev/null +++ b/dead_mans_switch_client/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# © 2015 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import models diff --git a/dead_mans_switch_client/__openerp__.py b/dead_mans_switch_client/__openerp__.py new file mode 100644 index 000000000..f939a92a4 --- /dev/null +++ b/dead_mans_switch_client/__openerp__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# © 2015-2016 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Dead man's switch (client)", + "version": "9.0.1.0.1", + "author": "Therp BV,Odoo Community Association (OCA)", + "license": "AGPL-3", + "category": "Monitoring", + "summary": "Be notified when customers' odoo instances go down", + "depends": [ + 'base', + ], + "data": [ + "data/ir_actions.xml", + "data/ir_cron.xml", + ], + "demo": [ + "demo/dead_mans_switch_client_demo.yml", + ], +} diff --git a/dead_mans_switch_client/data/ir_actions.xml b/dead_mans_switch_client/data/ir_actions.xml new file mode 100644 index 000000000..5728882a5 --- /dev/null +++ b/dead_mans_switch_client/data/ir_actions.xml @@ -0,0 +1,13 @@ + + + + + + Configure the dead man's switch server + automatic + + + + diff --git a/dead_mans_switch_client/data/ir_cron.xml b/dead_mans_switch_client/data/ir_cron.xml new file mode 100644 index 000000000..fe786326d --- /dev/null +++ b/dead_mans_switch_client/data/ir_cron.xml @@ -0,0 +1,13 @@ + + + + + Dead man's switch client + 5 + minutes + -1 + dead.mans.switch.client + alive + + + diff --git a/dead_mans_switch_client/demo/dead_mans_switch_client_demo.yml b/dead_mans_switch_client/demo/dead_mans_switch_client_demo.yml new file mode 100644 index 000000000..5e21e60fa --- /dev/null +++ b/dead_mans_switch_client/demo/dead_mans_switch_client_demo.yml @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +- !function {model: dead.mans.switch.client, name: _install_default_url} diff --git a/dead_mans_switch_client/i18n/de.po b/dead_mans_switch_client/i18n/de.po new file mode 100644 index 000000000..d2a21cacc --- /dev/null +++ b/dead_mans_switch_client/i18n/de.po @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-19 14:44+0000\n" +"PO-Revision-Date: 2016-01-18 13:53+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-server-tools-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "Konfigurieren Sie den 'dead man's switch -Server'" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" diff --git a/dead_mans_switch_client/i18n/en.po b/dead_mans_switch_client/i18n/en.po new file mode 100644 index 000000000..ab859a5cb --- /dev/null +++ b/dead_mans_switch_client/i18n/en.po @@ -0,0 +1,38 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-06 02:41+0000\n" +"PO-Revision-Date: 2016-05-04 19:17+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-server-tools-8-0/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "Configure the dead man's switch server" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,display_name:0 +msgid "Display Name" +msgstr "Display Name" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,__last_update:0 +msgid "Last Modified on" +msgstr "Last Modified on" diff --git a/dead_mans_switch_client/i18n/es.po b/dead_mans_switch_client/i18n/es.po new file mode 100644 index 000000000..13a924a97 --- /dev/null +++ b/dead_mans_switch_client/i18n/es.po @@ -0,0 +1,47 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +# Carles Antoli , 2015 +# danimaribeiro , 2016 +# FIRST AUTHOR , 2012-2013 +# Hotellook, 2014 +# Matjaž Mozetič , 2015-2016 +# Paolo Valier, 2016 +# Pedro M. Baeza , 2015 +# Rudolf Schnapka , 2016 +# UAB "Draugiški sprendimai" , 2015 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-28 02:41+0000\n" +"PO-Revision-Date: 2016-05-27 15:24+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,display_name:0 +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,__last_update:0 +msgid "Last Modified on" +msgstr "Última actualización por" diff --git a/dead_mans_switch_client/i18n/fi.po b/dead_mans_switch_client/i18n/fi.po new file mode 100644 index 000000000..1ae08481f --- /dev/null +++ b/dead_mans_switch_client/i18n/fi.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +# Antonio Trueba, 2016 +# FIRST AUTHOR , 2010,2012-2014 +# Hotellook, 2014 +# Jarmo Kortetjärvi , 2016 +# Matjaž Mozetič , 2015-2016 +# Paolo Valier, 2016 +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-09 18:30+0000\n" +"PO-Revision-Date: 2016-06-06 13:35+0000\n" +"Last-Translator: Jarmo Kortetjärvi \n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "Konfiguroi \"kuolleen miehen kytkin\"-palvelin" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,display_name:0 +msgid "Display Name" +msgstr "Nimi" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,__last_update:0 +msgid "Last Modified on" +msgstr "Viimeksi muokattu" diff --git a/dead_mans_switch_client/i18n/fr.po b/dead_mans_switch_client/i18n/fr.po new file mode 100644 index 000000000..87579f7db --- /dev/null +++ b/dead_mans_switch_client/i18n/fr.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +# Ahmet Altınışık , 2015-2016 +# Antonio Trueba, 2016 +# Armando Vulcano Junior , 2015 +# Christophe CHAUVET , 2015 +# FIRST AUTHOR , 2013-2014 +# Matjaž Mozetič , 2016 +# Paolo Valier, 2016 +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-12 14:34+0000\n" +"PO-Revision-Date: 2016-05-08 15:26+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: French (http://www.transifex.com/oca/OCA-server-tools-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,display_name:0 +msgid "Display Name" +msgstr "Nom affiché" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,__last_update:0 +msgid "Last Modified on" +msgstr "Dernière modification le" diff --git a/dead_mans_switch_client/i18n/it.po b/dead_mans_switch_client/i18n/it.po new file mode 100644 index 000000000..2e97daff5 --- /dev/null +++ b/dead_mans_switch_client/i18n/it.po @@ -0,0 +1,28 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-11-27 14:01+0000\n" +"PO-Revision-Date: 2015-11-26 12:51+0000\n" +"Last-Translator: <>\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" diff --git a/dead_mans_switch_client/i18n/pt_BR.po b/dead_mans_switch_client/i18n/pt_BR.po new file mode 100644 index 000000000..ec360a74a --- /dev/null +++ b/dead_mans_switch_client/i18n/pt_BR.po @@ -0,0 +1,47 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +# Ahmet Altınışık , 2016 +# Antonio Trueba, 2016 +# Christophe CHAUVET , 2015 +# FIRST AUTHOR , 2012 +# Hotellook, 2014 +# Isabelle RICHARD , 2015 +# Jarmo Kortetjärvi , 2016 +# LS Development , 2016 +# Matjaž Mozetič , 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-12 14:34+0000\n" +"PO-Revision-Date: 2016-05-11 16:42+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,display_name:0 +msgid "Display Name" +msgstr "Nome para Mostrar" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "Identificação" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,__last_update:0 +msgid "Last Modified on" +msgstr "Última atualização em" diff --git a/dead_mans_switch_client/i18n/sl.po b/dead_mans_switch_client/i18n/sl.po new file mode 100644 index 000000000..c1599d6a6 --- /dev/null +++ b/dead_mans_switch_client/i18n/sl.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +# Ahmet Altınışık , 2016 +# Antonio Trueba, 2016 +# Carles Antoli , 2015 +# FIRST AUTHOR , 2013-2014 +# Giacomo , 2015 +# Hotellook, 2014 +# Matjaž Mozetič , 2015-2016 +# Miku Laitinen , 2015 +# Pedro M. Baeza , 2015 +# Rudolf Schnapka , 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-06 02:41+0000\n" +"PO-Revision-Date: 2016-05-05 05:57+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "Nastavitev strežnika varnostnega stikala" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,display_name:0 +msgid "Display Name" +msgstr "Prikazni naziv" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,__last_update:0 +msgid "Last Modified on" +msgstr "Zadnjič spremenjeno" diff --git a/dead_mans_switch_client/i18n/tr.po b/dead_mans_switch_client/i18n/tr.po new file mode 100644 index 000000000..c71b06f9c --- /dev/null +++ b/dead_mans_switch_client/i18n/tr.po @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +# Ahmet Altınışık , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-19 14:44+0000\n" +"PO-Revision-Date: 2016-01-31 14:58+0000\n" +"Last-Translator: Ahmet Altınışık \n" +"Language-Team: Turkish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "Ölü adam tetiği sunucusunu ayarla" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" diff --git a/dead_mans_switch_client/i18n/zh_CN.po b/dead_mans_switch_client/i18n/zh_CN.po new file mode 100644 index 000000000..c76803f1c --- /dev/null +++ b/dead_mans_switch_client/i18n/zh_CN.po @@ -0,0 +1,28 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dead_mans_switch_client +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-14 07:02+0000\n" +"PO-Revision-Date: 2015-11-26 12:51+0000\n" +"Last-Translator: <>\n" +"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: dead_mans_switch_client +#: model:ir.actions.act_window,name:dead_mans_switch_client.action_setup +msgid "Configure the dead man's switch server" +msgstr "" + +#. module: dead_mans_switch_client +#: field:dead.mans.switch.client,id:0 +msgid "ID" +msgstr "ID" diff --git a/dead_mans_switch_client/models/__init__.py b/dead_mans_switch_client/models/__init__.py new file mode 100644 index 000000000..a1f543c73 --- /dev/null +++ b/dead_mans_switch_client/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# © 2015 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import dead_mans_switch_client diff --git a/dead_mans_switch_client/models/dead_mans_switch_client.py b/dead_mans_switch_client/models/dead_mans_switch_client.py new file mode 100644 index 000000000..ac158db82 --- /dev/null +++ b/dead_mans_switch_client/models/dead_mans_switch_client.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# © 2015-2016 Therp BV +# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import json +import logging +import os +try: + import psutil +except ImportError: # pragma: no cover + psutil = None +import urllib2 +from openerp import api, models +from openerp.tools.config import config + +SEND_TIMEOUT = 60 + + +class DeadMansSwitchClient(models.AbstractModel): + _name = 'dead.mans.switch.client' + _register = True + + @api.model + def _get_data(self): + ram = 0 + cpu = 0 + if psutil: + process = psutil.Process(os.getpid()) + # psutil changed its api through versions + processes = [process] + if config.get('workers') and process.parent: # pragma: no cover + if hasattr(process.parent, '__call__'): + process = process.parent() + else: + process = process.parent + if hasattr(process, 'children'): + processes += process.children(True) + elif hasattr(process, 'get_children'): + processes += process.get_children(True) + for process in processes: + if hasattr(process, 'memory_percent'): + ram += process.memory_percent() + else: # pragma: no cover + ram = None + if hasattr(process, 'cpu_percent'): + cpu += process.cpu_percent() + else: # pragma: no cover + cpu = None + user_count = 0 + if 'bus.presence' in self.env.registry: + user_count = self.env['bus.presence'].search_count([ + ('status', '=', 'online'), + ]) + return { + 'database_uuid': self.env['ir.config_parameter'].get_param( + 'database.uuid'), + 'cpu': cpu, + 'ram': ram, + 'user_count': user_count, + } + + @api.model + def alive(self): + url = self.env['ir.config_parameter'].get_param( + 'dead_mans_switch_client.url') + logger = logging.getLogger(__name__) + if not url: + logger.error('No server configured!') + return + timeout = self.env['ir.config_parameter'].get_param( + 'dead_mans_switch_client.send_timeout', SEND_TIMEOUT) + data = self._get_data() + logger.debug('sending %s', data) + urllib2.urlopen( + urllib2.Request( + url, + json.dumps({ + 'jsonrpc': '2.0', + 'method': 'call', + 'params': data, + }), + { + 'Content-Type': 'application/json', + }), + timeout=timeout) + + @api.model + def _install_default_url(self): + """Set up a default URL.""" + conf = self.env["ir.config_parameter"] + name = "dead_mans_switch_client.url" + param = conf.get_param(name) + + if not param: + url = "{}/dead_mans_switch/alive".format( + conf.get_param( + "report.url", + conf.get_param( + "web.base.url", + "http://localhost"))) + conf.set_param(name, url) diff --git a/dead_mans_switch_client/static/description/icon.png b/dead_mans_switch_client/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/dead_mans_switch_client/static/description/icon.png differ diff --git a/dead_mans_switch_client/tests/__init__.py b/dead_mans_switch_client/tests/__init__.py new file mode 100644 index 000000000..ef8314b78 --- /dev/null +++ b/dead_mans_switch_client/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# © 2015 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import test_dead_mans_switch_client diff --git a/dead_mans_switch_client/tests/test_dead_mans_switch_client.py b/dead_mans_switch_client/tests/test_dead_mans_switch_client.py new file mode 100644 index 000000000..e4d849f93 --- /dev/null +++ b/dead_mans_switch_client/tests/test_dead_mans_switch_client.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# © 2015 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openerp.tests.common import TransactionCase + + +class TestDeadMansSwitchClient(TransactionCase): + def test_dead_mans_switch_client(self): + # test unconfigured case + self.env['ir.config_parameter'].search([ + ('key', '=', 'dead_mans_switch_client.url')]).unlink() + self.env['dead.mans.switch.client'].alive() + # test configured case + self.env['ir.config_parameter'].set_param( + 'dead_mans_switch_client.url', 'fake_url') + with self.assertRaises(ValueError): + self.env['dead.mans.switch.client'].alive()