From 854e31e2182bddf0f440d57f3f6e035bc8a8f4e9 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Mon, 7 Jul 2014 14:02:02 -0400 Subject: [PATCH] Adding some graph data, will be splitting this out in the near future --- awx/api/views.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/awx/api/views.py b/awx/api/views.py index 191a9a6086..7fdea4b508 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -282,7 +282,8 @@ class DashboardGraphView(APIView): end_date = start_date - dateutil.relativedelta.relativedelta(days=1) interval = 'hours' - dashboard_data = {"jobs": {"successful": [], "failed": []}, "hosts": []} + dashboard_data = {"jobs": {"successful": [], "failed": []}, "hosts": [], + "inventory": []} for element in success_qss.time_series(end_date, start_date, interval=interval): dashboard_data['jobs']['successful'].append([time.mktime(element[0].timetuple()), element[1]]) @@ -298,6 +299,29 @@ class DashboardGraphView(APIView): last_delta = element[1] dashboard_data['hosts'] = host_data[::-1] + hosts_by_inventory = user_hosts.all().values('inventory__id', 'inventory__name', 'has_active_failures', 'inventory_sources__id').annotate(Count("id")) + inventories = {} + for aggreg in hosts_by_inventory: + if (aggreg['inventory__id'], aggreg['inventory__name']) not in inventories: + inventories[(aggreg['inventory__id'], aggreg['inventory__name'])] = {} + if aggreg['inventory_sources__id'] not in inventories[(aggreg['inventory__id'], aggreg['inventory__name'])]: + inventories[(aggreg['inventory__id'], aggreg['inventory__name'])][aggreg['inventory_sources__id']] = {'successful': 0, 'failed': 0} + if aggreg['has_active_failures']: + inventories[(aggreg['inventory__id'], aggreg['inventory__name'])][aggreg['inventory_sources__id']]['failed'] = aggreg['id__count'] + else: + inventories[(aggreg['inventory__id'], aggreg['inventory__name'])][aggreg['inventory_sources__id']]['successful'] = aggreg['id__count'] + for inventory_id, inventory_name in inventories: + this_inventory = {'id': inventory_id, 'name': inventory_name, 'sources': []} + for source_id in inventories[(inventory_id, inventory_name)]: + if source_id is None: + continue + i = InventorySource.objects.get(id=source_id) + this_source = {'name': i.name, 'source': i.source, + 'successful': inventories[(inventory_id, inventory_name)][source_id]['successful'], + 'failed': inventories[(inventory_id, inventory_name)][source_id]['failed']} + this_inventory['sources'].append(this_source) + dashboard_data['inventory'].append(this_inventory) + # Setting it back settings.USE_TZ = True