summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiri Tomasek <jtomasek@redhat.com>2013-07-24 10:12:58 +0200
committerTomas Sedovic <tomas@sedovic.cz>2013-08-01 16:18:57 +0200
commitaabc4743d1b9627ebe13f7f4c2e01469290ad109 (patch)
treed946ce70624e94b3b84ea1ff81cf549da050694e
parent0f006e27a5f3eaeed065839d4615328defbae0c4 (diff)
downloadtuskar-ui-aabc4743d1b9627ebe13f7f4c2e01469290ad109.tar.gz
Resource Class capacities
added capacities aggregated from resource_class's hosts removed unused api methods on resource_class Change-Id: I107450d1e345f4d07849213ef0a0c1a7c07e8f97
-rw-r--r--openstack_dashboard/api/tuskar.py101
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html9
-rw-r--r--openstack_dashboard/dashboards/infrastructure/resource_management/templates/resource_management/resource_classes/_detail_overview.html63
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>