summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tuskar_ui/infrastructure/nodes/views.py16
-rw-r--r--tuskar_ui/infrastructure/roles/views.py29
-rw-r--r--tuskar_ui/utils/metering.py21
-rw-r--r--tuskar_ui/utils/tests.py4
4 files changed, 38 insertions, 32 deletions
diff --git a/tuskar_ui/infrastructure/nodes/views.py b/tuskar_ui/infrastructure/nodes/views.py
index 6596a773..eece7bfb 100644
--- a/tuskar_ui/infrastructure/nodes/views.py
+++ b/tuskar_ui/infrastructure/nodes/views.py
@@ -179,15 +179,21 @@ class PerformanceView(base.TemplateView):
node_uuid = kwargs.get('node_uuid', None)
if node_uuid:
node = api.node.Node.get(request, node_uuid)
- instance_uuid = node.instance_uuid
+ instance_uuids = [node.instance_uuid]
else:
# Aggregated stats for all nodes
- instance_uuid = None
+ instance_uuids = []
json_output = metering_utils.get_nodes_stats(
- request, node_uuid, instance_uuid, image_uuid=None, meter=meter,
- date_options=date_options, date_from=date_from, date_to=date_to,
- stats_attr=stats_attr, barchart=barchart)
+ request=request,
+ node_uuid=node_uuid,
+ instance_uuids=instance_uuids,
+ meter=meter,
+ date_options=date_options,
+ date_from=date_from,
+ date_to=date_to,
+ stats_attr=stats_attr,
+ barchart=barchart)
return django.http.HttpResponse(
json.dumps(json_output), content_type='application/json')
diff --git a/tuskar_ui/infrastructure/roles/views.py b/tuskar_ui/infrastructure/roles/views.py
index 9c7baa1e..78a73065 100644
--- a/tuskar_ui/infrastructure/roles/views.py
+++ b/tuskar_ui/infrastructure/roles/views.py
@@ -168,21 +168,24 @@ class PerformanceView(base.TemplateView, views.RoleMixin, views.StackMixin):
stats_attr = request.GET.get('stats_attr', 'avg')
barchart = bool(request.GET.get('barchart'))
- plan = api.tuskar.Plan.get_the_plan(self.request)
- role = self.get_role(None)
- role.image(plan)
+ role = self.get_role()
+ stack = self.get_stack()
+ instances = stack.resources(role=role, with_joins=True)
- try:
- image = role.image(plan)
- image_uuid = image.id
- except AttributeError:
- json_output = None
- else:
+ if instances:
+ instance_uuids = [i.physical_resource_id for i in instances]
json_output = metering_utils.get_nodes_stats(
- request, node_uuid=None, instance_uuid=None,
- image_uuid=image_uuid, meter=meter, date_options=date_options,
- date_from=date_from, date_to=date_to, stats_attr=stats_attr,
- barchart=barchart, group_by='image_id')
+ request=request,
+ node_uuid=None,
+ instance_uuids=instance_uuids,
+ meter=meter,
+ date_options=date_options,
+ date_from=date_from,
+ date_to=date_to,
+ stats_attr=stats_attr,
+ barchart=barchart)
+ else:
+ json_output = None
return http.HttpResponse(json.dumps(json_output),
content_type='application/json')
diff --git a/tuskar_ui/utils/metering.py b/tuskar_ui/utils/metering.py
index 41231056..2f9927ef 100644
--- a/tuskar_ui/utils/metering.py
+++ b/tuskar_ui/utils/metering.py
@@ -177,13 +177,13 @@ def create_json_output(series, barchart, unit, date_from, date_to):
return json_output
-def get_nodes_stats(request, node_uuid, instance_uuid, image_uuid, meter,
+def get_nodes_stats(request, node_uuid, instance_uuids, meter,
date_options=None, date_from=None, date_to=None,
stats_attr=None, barchart=None, group_by=None):
series = []
meter_list, unit = get_meter_list_and_unit(request, meter)
- if instance_uuid or image_uuid:
+ if instance_uuids:
if 'ipmi' in meter:
# For IPMI metrics, a resource ID is made of node UUID concatenated
# with the metric description. E.g:
@@ -199,17 +199,12 @@ def get_nodes_stats(request, node_uuid, instance_uuid, image_uuid, meter,
else:
# For SNMP metrics, a resource ID matches exactly the UUID of the
# associated instance
- if group_by == "image_id":
- query = {}
- image_query = [{"field": "metadata.%s" % group_by,
- "op": "eq",
- "value": image_uuid}]
- query[instance_uuid] = image_query
- else:
- query = [{'field': 'resource_id',
- 'op': 'eq',
- 'value': instance_uuid}]
- queries = [query]
+ queries = [
+ [{'field': 'resource_id',
+ 'op': 'eq',
+ 'value': instance_uuid}]
+ for instance_uuid in instance_uuids
+ ]
else:
# query will be aggregated across all resources
group_by = "all"
diff --git a/tuskar_ui/utils/tests.py b/tuskar_ui/utils/tests.py
index 2bba88f2..71a59e30 100644
--- a/tuskar_ui/utils/tests.py
+++ b/tuskar_ui/utils/tests.py
@@ -288,7 +288,9 @@ class MeteringTests(helpers.TestCase):
return_value=('from date', 'to date'),
):
ret = metering.get_nodes_stats(
- request, node_uuid='abc', instance_uuid='def', image_uuid=None,
+ request=request,
+ node_uuid='abc',
+ instance_uuids=['def'],
meter='foo.bar')
self.assertEqual(ret, '')
self.assertEqual(create_json_output.call_args_list, [