diff options
author | Ladislav Smola <lsmola@redhat.com> | 2013-07-26 15:12:07 +0200 |
---|---|---|
committer | Tomas Sedovic <tomas@sedovic.cz> | 2013-08-01 16:18:57 +0200 |
commit | 5fdd46427671753abd17a323a12d997b09726e05 (patch) | |
tree | 3dbd66bc1daaac69984a596052c5a500866f475f | |
parent | 7be5c16f3d7a5f3f1eaaccc20a72ded8871238cb (diff) | |
download | tuskar-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
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 Binary files differnew file mode 100644 index 00000000..f2d08339 --- /dev/null +++ b/openstack_dashboard/static/dashboard/img/horizontal_loader.gif |