From a3a4a67e4af389542e14d00b591c6ea6c06e595d Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Mon, 17 Nov 2014 17:21:48 +0100 Subject: [PATCH] Update node status on progress page with ajax Change-Id: Icb67a6ff7416d50c2f0ebbb6ed5d5173e647baac --- tuskar_boxes/overview/views.py | 29 ++++++++++++++----- .../tuskar_boxes/js/tuskar.boxes_progress.js | 22 ++++++++++++++ .../tuskar_boxes/overview/index.html | 1 + .../overview/role_nodes_status.html | 11 +++++-- 4 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 tuskar_boxes/static/tuskar_boxes/js/tuskar.boxes_progress.js diff --git a/tuskar_boxes/overview/views.py b/tuskar_boxes/overview/views.py index cae0a40..ad194b6 100644 --- a/tuskar_boxes/overview/views.py +++ b/tuskar_boxes/overview/views.py @@ -12,6 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. +import django.utils.text + from tuskar_ui import api from tuskar_ui.infrastructure.overview import views from tuskar_boxes.overview import forms @@ -86,11 +88,24 @@ class IndexView(views.IndexView): for role in context['roles']: role['flavor_field'] = context['form'][role['id'] + '-flavor'] else: - context['nodes'] = [{ - 'uuid': node.uuid, - 'role': node_role(self.request, node), - 'state': node.state, - 'state_icon': NODE_STATE_ICON.get(node.state, - NODE_STATE_ICON[None]), - } for node in api.node.Node.list(self.request, maintenance=False)] + nodes = [] + for node in api.node.Node.list(self.request, maintenance=False): + role = node_role(self.request, node) + nodes.append({ + 'uuid': node.uuid, + 'role_name': role.name if role else '', + 'role_slug': django.utils.text.slugify(role.name) + if role else '', + 'state': node.state, + 'state_slug': django.utils.text.slugify( + unicode(node.state)), + 'state_icon': NODE_STATE_ICON.get(node.state, + NODE_STATE_ICON[None]), + }) + context['nodes'] = nodes return context + + def get_progress_update(self, request, data): + out = super(IndexView, self).get_progress_update(request, data) + out['nodes'] = data.get('nodes', []) + return out diff --git a/tuskar_boxes/static/tuskar_boxes/js/tuskar.boxes_progress.js b/tuskar_boxes/static/tuskar_boxes/js/tuskar.boxes_progress.js new file mode 100644 index 0000000..7cfc299 --- /dev/null +++ b/tuskar_boxes/static/tuskar_boxes/js/tuskar.boxes_progress.js @@ -0,0 +1,22 @@ +tuskar.boxes_progress = function () { + 'use static'; + var module = {}; + + module.init = function () { + module.nodes_template = Hogan.compile($('#nodes-template').html() || ''); + }; + + module.update_progress = function (data) { + $('div.boxes-nodes').html(module.nodes_template.render(data)); + }; + + // Attach to the original update procedure. + var orig_update_progress = tuskar.deployment_progress.update_progress; + tuskar.deployment_progress.update_progress = function () { + orig_update_progress.apply(tuskar.deployment_progress, arguments); + module.update_progress.apply(module, arguments); + }; + + horizon.addInitFunction(module.init); + return module; +} (); diff --git a/tuskar_boxes/templates/tuskar_boxes/overview/index.html b/tuskar_boxes/templates/tuskar_boxes/overview/index.html index 2d3b1b0..07981e3 100644 --- a/tuskar_boxes/templates/tuskar_boxes/overview/index.html +++ b/tuskar_boxes/templates/tuskar_boxes/overview/index.html @@ -14,6 +14,7 @@ {% block js %} {{ block.super }} + {% endblock %} diff --git a/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html b/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html index 2ac2da7..44518c0 100644 --- a/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html +++ b/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html @@ -22,7 +22,7 @@
{% for node in nodes %}{% spaceless %} -
+
{% endspaceless %}{% endfor %} @@ -31,7 +31,7 @@ +