summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLadislav Smola <lsmola@redhat.com>2013-07-26 15:12:07 +0200
committerTomas Sedovic <tomas@sedovic.cz>2013-08-01 16:18:57 +0200
commit5fdd46427671753abd17a323a12d997b09726e05 (patch)
tree3dbd66bc1daaac69984a596052c5a500866f475f
parent7be5c16f3d7a5f3f1eaaccc20a72ded8871238cb (diff)
downloadtuskar-ui-5fdd46427671753abd17a323a12d997b09726e05.tar.gz
Polling of status on rack detail
- added polling of status when rack detai lis in provisioning state - added gif loader - after it changes state from provisioning, the page will be reloaded - it can be fully tested after provisioning will be working Change-Id: Icbf89dca7ab57c259b237c4884efa8fb565eaa71
-rw-r--r--openstack_dashboard/api/tuskar.py6
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/racks/urls.py1
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/racks/views.py10
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html56
-rw-r--r--openstack_dashboard/static/dashboard/img/horizontal_loader.gifbin0 -> 22580 bytes
5 files changed, 69 insertions, 4 deletions
diff --git a/openstack_dashboard/api/tuskar.py b/openstack_dashboard/api/tuskar.py
index c49609ee..da2cef0e 100644
--- a/openstack_dashboard/api/tuskar.py
+++ b/openstack_dashboard/api/tuskar.py
@@ -501,7 +501,11 @@ class Rack(StringIdAPIResourceWrapper):
return 100 - self.total_instances
def is_provisioned(self):
- return (self.state == 'provisioned')
+ return (self.state == 'active') or (self.state == 'error')
+
+ @property
+ def is_provisioning(self):
+ return (self.state == 'provisioning')
@classmethod
def provision(cls, request, rack_id):
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/racks/urls.py b/openstack_dashboard/dashboards/infrastructure/resource_management/racks/urls.py
index 0ade63a0..b41e6660 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/racks/urls.py
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/racks/urls.py
@@ -35,4 +35,5 @@ urlpatterns = patterns(VIEW_MOD,
url(RACKS % 'top_communicating.json', 'top_communicating',
name='top_communicating'),
url(RACKS % 'node_health.json', 'node_health', name='node_health'),
+ url(RACKS % 'check_state.json', 'check_state', name='check_state'),
)
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/racks/views.py b/openstack_dashboard/dashboards/infrastructure/resource_management/racks/views.py
index b3bf1872..8b66bc11 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/racks/views.py
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/racks/views.py
@@ -241,3 +241,13 @@ def node_health(request, rack_id=None):
res = {'data': data}
return HttpResponse(simplejson.dumps(res),
mimetype="application/json")
+
+
+def check_state(request, rack_id=None):
+ rack = api.tuskar.Rack.get(request, rack_id)
+
+ res = {'state': rack.state}
+
+ return HttpResponse(
+ simplejson.dumps(res),
+ mimetype="application/json")
diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html
index f6930dfd..8133baed 100644
--- a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html
+++ b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html
@@ -2,11 +2,21 @@
{% load url from future %}
{% load chart_helpers %}
-{% if not rack.is_provisioned %}
+{% if not rack.is_provisioned or rack.is_provisioning %}
<div class="info row-fluid detail">
<div class="span12">
- <div class="well provision-block" style="text-align: center; margin: 2px;">
- <a class="btn btn-large btn-block btn-primary ajax-modal" href="{% url 'horizon:infrastructure:resource_management:racks:edit_status' rack.id %}?action=provision">{% trans "Provision Rack" %}</a>
+ <div data-state="{{rack.state}}"
+ data-url="{% url 'horizon:infrastructure:resource_management:racks:check_state' rack.id %}"
+ data-interval="20000"
+ class="overall-state well provision-block" style="text-align: center; margin: 2px;">
+ {% if rack.is_provisioning %}
+ <p>Provisioning</p><img src="/static/dashboard/img/horizontal_loader.gif" />
+ {% else %}
+ <a class="btn btn-large btn-block btn-primary ajax-modal"
+ href="{% url 'horizon:infrastructure:resource_management:racks:edit_status' rack.id %}?action=provision">
+ {% trans "Provision Rack" %}
+ </a>
+ {% endif %}
</div>
</div>
</div>
@@ -227,3 +237,43 @@
</div>
</div>
+
+<script type="text/javascript">
+/* polling of status. */
+horizon.detail_overview = {
+ update: function () {
+ var state_obj = $('.overall-state').first();
+ var state = state_obj.data('state');
+ var interval = state_obj.data('interval');
+ var url = state_obj.data('url');
+ if (state == 'provisioning') {
+ // Wait and try to update again in next interval instead
+ setTimeout(horizon.detail_overview.update, interval);
+
+ this.jqxhr = $.getJSON( url, function() {
+ state_obj.html('<p>Provisioning</p><img src="/static/dashboard/img/horizontal_loader.gif" />')
+ })
+ .done(function(data) {
+ // FIXME find a way how to only update graph with new data
+ // not delete and create
+ if (data['state'] != 'provisioning'){
+ window.location.reload();
+ }
+ })
+ .fail(function() {
+ // FIXME add proper fail message
+ console.log( "error" );
+ })
+ .always(function() {
+ // FIXME add behaviour that should be always done
+ });
+ }
+ }
+};
+
+
+horizon.addInitFunction(function () {
+ horizon.detail_overview.update();
+});
+
+</script>
diff --git a/openstack_dashboard/static/dashboard/img/horizontal_loader.gif b/openstack_dashboard/static/dashboard/img/horizontal_loader.gif
new file mode 100644
index 00000000..f2d08339
--- /dev/null
+++ b/openstack_dashboard/static/dashboard/img/horizontal_loader.gif
Binary files differ