diff options
3 files changed, 36 insertions, 137 deletions
diff --git a/openstack_dashboard/api/tuskar.py b/openstack_dashboard/api/tuskar.py index 3d4d7370..540168b2 100644 --- a/openstack_dashboard/api/tuskar.py +++ b/openstack_dashboard/api/tuskar.py @@ -16,6 +16,7 @@ import copy import logging import re from collections import namedtuple +import itertools from datetime import timedelta from random import randint @@ -472,6 +473,21 @@ class ResourceClass(StringIdAPIResourceWrapper): return self._racks @property + def capacities(self): + """Aggregates Rack capacities values + """ + if not hasattr(self, '_capacities'): + capacities = [rack.capacities for rack in self.list_racks] + + def add_capacities(c1, c2): + return [Capacity({'name': a.name, + 'value': int(a.value) + int(b.value), + 'unit': a.unit}) for a, b in zip(c1, c2)] + + self._capacities = reduce(add_capacities, capacities) + return self._capacities + + @property def all_racks(self): """ List of racks added to ResourceClass + list of free racks, meaning racks that don't belong to any ResourceClass""" @@ -560,91 +576,6 @@ class ResourceClass(StringIdAPIResourceWrapper): return len(self.racks) @property - def running_virtual_machines(self): - if not hasattr(self, '_running_virtual_machines'): - self._running_virtual_machines =\ - copy.deepcopy(self.list_flavors) - for vm in self._running_virtual_machines: - vm.max_vms /= (vm.max_vms % 7) + 1 - return self._running_virtual_machines - - @property - def cpu(self): - if not hasattr(self, '_cpu'): - try: - attrs = dummymodels.Capacity.objects\ - .filter(node__rack__resource_class=self._apiresource)\ - .values('name', 'unit').annotate(value=Sum('value'))\ - .filter(name='cpu')[0] - except: - attrs = {'name': 'cpu', - 'value': _('Unable to retrieve ' - '(Are the nodes configured properly?)'), - 'unit': ''} - cpu = dummymodels.Capacity(name=attrs['name'], - value=attrs['value'], - unit=attrs['unit']) - self._cpu = Capacity(cpu) - return self._cpu - - @property - def ram(self): - if not hasattr(self, '_ram'): - try: - attrs = dummymodels.Capacity.objects\ - .filter(node__rack__resource_class=self._apiresource)\ - .values('name', 'unit').annotate(value=Sum('value'))\ - .filter(name='ram')[0] - except: - attrs = {'name': 'ram', - 'value': _('Unable to retrieve ' - '(Are the nodes configured properly?)'), - 'unit': ''} - ram = dummymodels.Capacity(name=attrs['name'], - value=attrs['value'], - unit=attrs['unit']) - self._ram = Capacity(ram) - return self._ram - - @property - def storage(self): - if not hasattr(self, '_storage'): - try: - attrs = dummymodels.Capacity.objects\ - .filter(node__rack__resource_class=self._apiresource)\ - .values('name', 'unit').annotate(value=Sum('value'))\ - .filter(name='storage')[0] - except: - attrs = {'name': 'storage', - 'value': _('Unable to retrieve ' - '(Are the nodes configured properly?)'), - 'unit': ''} - storage = dummymodels.Capacity(name=attrs['name'], - value=attrs['value'], - unit=attrs['unit']) - self._storage = Capacity(storage) - return self._storage - - @property - def network(self): - if not hasattr(self, '_network'): - try: - attrs = dummymodels.Capacity.objects\ - .filter(node__rack__resource_class=self._apiresource)\ - .values('name', 'unit').annotate(value=Sum('value'))\ - .filter(name='network')[0] - except: - attrs = {'name': 'network', - 'value': _('Unable to retrieve ' - '(Are the nodes configured properly?)'), - 'unit': ''} - network = dummymodels.Capacity(name=attrs['name'], - value=attrs['value'], - unit=attrs['unit']) - self._network = Capacity(network) - return self._network - - @property def vm_capacity(self): """ Resource Class VM Capacity is maximum value from It's Flavors max_vms (considering flavor sizes are multiples), multipled by 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 9f3aebe2..2728f6e0 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 @@ -31,6 +31,7 @@ <div class="span4"> <h4>{% trans "Capacities" %}</h4> <hr class="header_rule"> + {% if rack.capacities %} <table class="capacities"> {% for capacity in rack.capacities %} <tr> @@ -50,6 +51,9 @@ </tr> {% endfor %} </table> + {% else %} + <p>No data available yet.</p> + {% endif %} </div> </div> @@ -91,7 +95,7 @@ <h4>Top Communicating Racks</h4> <hr class="header_rule"> <div class="clear"></div> - + {% if rack.nodes_count %} <div class="communication_charts_wrapper"> <div class="communication_chart_wrapper"> <h5>The most contacting</h5> @@ -115,6 +119,9 @@ </div> </div> </div> + {% else %} + <p>No data available yet.</p> + {% endif %} </div> <div class="span6"> <div class="circles_chart_time_picker"> diff --git a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html index 0d46999c..c4f2b546 100644 --- a/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html +++ b/openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html @@ -31,68 +31,29 @@ <div class="span4"> <h4>{% trans "Capacities" %}</h4> <hr class="header_rule"> + {% if resource_class.capacities %} <table class="capacities"> + {% for capacity in resource_class.capacities %} <tr> - <td class="capacity_label">{% trans "CPU" %}:</td> + <td class="capacity_label">{{ capacity.name }}:</td> <td> - <div id="cpu_capacity_usage" + <div id="{{ capacity.name }}_capacity_usage" class="capacity_bar" data-chart-type="capacity_bar_chart" - data-capacity-limit="{{ resource_class.cpu.value }}" - data-capacity-used="{{ resource_class.cpu.usage }}" - data-average-capacity-used="{{ 12 }}"> + data-capacity-limit="{{ capacity.value }}" + data-capacity-used="{{ capacity.usage }}" + data-average-capacity-used="{{ capacity.average }}"> </div> </td> <td> - <a href="#" data-chart-type="modal_line_chart" data-url="/infrastructure/resource_management/racks/usage_data" data-series="cpu">{{ resource_class.cpu.usage }}/{{ resource_class.cpu.value }} {{ resource_class.cpu.unit }}</a> - </td> - </tr> - <tr> - <td class="capacity_label">{% trans "RAM" %}:</td> - <td> - <div id="ram_capacity_usage" - class="capacity_bar" - data-chart-type="capacity_bar_chart" - data-capacity-limit="{{ resource_class.ram.value }}" - data-capacity-used="{{ resource_class.ram.usage }}" - data-average-capacity-used="{{ 12 }}"> - </div> - </td> - <td> - <a href="#" data-chart-type="modal_line_chart" data-url="/infrastructure/resource_management/racks/usage_data" data-series="ram">{{ resource_class.ram.usage }}/{{ resource_class.ram.value }} {{ resource_class.ram.unit }}</a> - </td> - </tr> - <tr> - <td class="capacity_label">{% trans "Storage" %}:</td> - <td> - <div id="storage_capacity_usage" - class="capacity_bar" - data-chart-type="capacity_bar_chart" - data-capacity-limit="{{ resource_class.storage.value }}" - data-capacity-used="{{ resource_class.storage.usage }}" - data-average-capacity-used="{{ 12 }}"> - </div> - </td> - <td> - <a href="#" data-chart-type="modal_line_chart" data-url="/infrastructure/resource_management/racks/usage_data" data-series="storage">{{ resource_class.storage.usage }}/{{ resource_class.storage.value }} {{ resource_class.storage.unit }}</a> - </td> - </tr> - <tr> - <td class="capacity_label">{% trans "Network" %}:</td> - <td> - <div id="network_capacity_usage" - class="capacity_bar" - data-chart-type="capacity_bar_chart" - data-capacity-limit="{{ resource_class.network.value }}" - data-capacity-used="{{ resource_class.network.usage }}" - data-average-capacity-used="{{ 12 }}"> - </div> - </td> - <td> - <a href="#" data-chart-type="modal_line_chart" data-url="/infrastructure/resource_management/racks/usage_data" data-series="network">{{ resource_class.network.usage }}/{{ resource_class.network.value }} {{ resource_class.network.unit }}</a> + <a href="#" class="modal_chart">{{ capacity.usage|default:_(" - ") }}/{{ capacity.value|default:_(" - ") }} {{ capacity.unit }}</a> </td> </tr> + {% endfor %} </table> + {% else %} + <p>No data available yet.</p> + {% endif %} </div> </div> |