[IMP] posbox: add a software upgrade page that allows to remotely update the posbox...
authorFrédéric van der Essen <fva@openerp.com>
Fri, 21 Mar 2014 16:23:36 +0000 (17:23 +0100)
committerFrédéric van der Essen <fva@openerp.com>
Fri, 21 Mar 2014 16:23:36 +0000 (17:23 +0100)
bzr revid: fva@openerp.com-20140321162336-n05c693ukz3awfyg

addons/hw_posbox_upgrade/__init__.py [new file with mode: 0644]
addons/hw_posbox_upgrade/__openerp__.py [new file with mode: 0644]
addons/hw_posbox_upgrade/controllers/__init__.py [new file with mode: 0644]
addons/hw_posbox_upgrade/controllers/main.py [new file with mode: 0644]

diff --git a/addons/hw_posbox_upgrade/__init__.py b/addons/hw_posbox_upgrade/__init__.py
new file mode 100644 (file)
index 0000000..a208bc1
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#    
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    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/>.     
+#
+##############################################################################
+
+import controllers
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/hw_posbox_upgrade/__openerp__.py b/addons/hw_posbox_upgrade/__openerp__.py
new file mode 100644 (file)
index 0000000..68f81c2
--- /dev/null
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    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/>.
+#
+##############################################################################
+
+
+{
+    'name': 'PosBox Software Upgrader',
+    'version': '1.0',
+    'category': 'Hardware Drivers',
+    'sequence': 6,
+    'summary': 'Allows to remotely upgrade the PosBox software',
+    'description': """
+PosBox Software Upgrader
+========================
+
+This module allows to remotely upgrade the PosBox software to a
+new version. This module is specific to the PosBox setup and environment
+and should not be installed on regular openerp servers.
+
+""",
+    'author': 'OpenERP SA',
+    'depends': ['hw_proxy'],
+    'test': [
+    ],
+    'installable':  False,
+    'auto_install': False,
+}
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hw_posbox_upgrade/controllers/__init__.py b/addons/hw_posbox_upgrade/controllers/__init__.py
new file mode 100644 (file)
index 0000000..b5f0bcc
--- /dev/null
@@ -0,0 +1,3 @@
+import main
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/hw_posbox_upgrade/controllers/main.py b/addons/hw_posbox_upgrade/controllers/main.py
new file mode 100644 (file)
index 0000000..b741a7a
--- /dev/null
@@ -0,0 +1,126 @@
+# -*- coding: utf-8 -*-
+import logging
+import os
+import time
+
+import openerp
+import openerp.addons.hw_proxy.controllers.main as hw_proxy
+import threading
+from openerp import http
+from openerp.http import request
+from openerp.tools.translate import _
+
+_logger = logging.getLogger(__name__)
+
+upgrade_template = """
+<!DOCTYPE HTML>
+<html>
+    <head>
+        <title>OpenERP's PosBox - Software Upgrade</title>
+        <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
+        <script>
+        $(function(){
+            var upgrading = false;
+            $('#upgrade').click(function(){
+                console.log('click');
+                if(!upgrading){
+                    upgrading = true;
+                    $('#upgrade').text('Upgrading, Please Wait');
+                    $.ajax({
+                        url:'/hw_proxy/perform_upgrade/'
+                    }).then(function(status){
+                        $('#upgrade').html('Upgrade Successful<br \\>Click to Restart the PosBox');
+                        $('#upgrade').off('click');
+                        $('#upgrade').click(function(){
+                            $.ajax({ url:'hw_proxy/perform_restart' })
+                            $('#upgrade').text('Restarting');
+                            $('#upgrade').off('click');
+                            setTimeout(function(){
+                                window.location = '/'
+                            },30*1000);
+                        });
+
+                    },function(){
+                        $('#upgrade').text('Upgrade Failed');
+                    });
+                }
+            });
+        });
+        </script>
+        <style>
+        body {
+            width: 480px;
+            margin: 60px auto;
+            font-family: sans-serif;
+            text-align: justify;
+            color: #6B6B6B;
+        }
+        .centering{
+            text-align: center;
+        }
+        #upgrade {
+            padding: 20px;
+            background: rgb(121, 197, 107);
+            color: white;
+            border-radius: 3px;
+            text-align: center;
+            margin: 30px; 
+            text-decoration: none;
+            display: inline-block;
+        }
+        </style>
+    </head>
+    <body>
+        <h1>PosBox Software Upgrade</h1>
+        <p>
+        This tool will help you perform an upgrade of the PosBox's software.
+        However the preferred method to upgrade the posbox is to flash the sd-card with
+        the <a href='http://nightly.openerp.com/trunk/posbox/'>latest image</a>. The upgrade
+        procedure is explained into to the <a href='/hw_proxy/static/doc/manual.pdf'>PosBox manual</a>
+        </p>
+        <p>
+        To upgrade the posbox, click on the upgrade button. The upgrade will take a few minutes. <b>Do not reboot</b> the PosBox during the upgrade.
+        </p>
+        <div class='centering'>
+            <a href='#' id='upgrade'>Upgrade</a>
+        </div>
+    </body>
+</html>
+
+"""
+
+class PosboxUpgrader(hw_proxy.Proxy):
+    def __init__(self):
+        super(PosboxUpgrader,self).__init__()
+        self.upgrading = threading.Lock()
+        self.last_upgrade = 0
+
+    @http.route('/hw_proxy/upgrade', type='http', auth='none', )
+    def upgrade(self):
+        return upgrade_template 
+    
+    @http.route('/hw_proxy/perform_upgrade', type='http', auth='none')
+    def perform_upgrade(self):
+        self.upgrading.acquire()
+        if time.time() - self.last_upgrade < 30:
+            self.upgrading.release()
+            return 'UPTODATE'
+        else:
+            os.system('/bin/bash /home/pi/openerp/update.sh')
+            self.last_upgrade = time.time()
+            self.upgrading.release()
+            return 'SUCCESS'
+
+    @http.route('/hw_proxy/perform_restart', type='http', auth='none')
+    def perform_restart(self):
+        self.upgrading.acquire()
+        if time.time() - self.last_upgrade < 30:
+            self.upgrading.release()
+            return 'RESTARTED'
+        else:
+            os.system('/bin/bash /home/pi/openerp/restart.sh')
+            self.last_upgrade = time.time()
+            self.upgrading.release()
+            return 'SUCCESS'
+
+