mirror of
https://github.com/ansible/awx.git
synced 2026-01-15 11:50:42 -03:30
Split out dashboard graphs onto two endpoints, support actual query
parameters related to job type and implement per-inventory source success/failed breakdowns
This commit is contained in:
parent
c2473f9b12
commit
a36c43bd90
@ -177,7 +177,8 @@ v1_urls = patterns('awx.api.views',
|
||||
url(r'^authtoken/$', 'auth_token_view'),
|
||||
url(r'^me/$', 'user_me_list'),
|
||||
url(r'^dashboard/$', 'dashboard_view'),
|
||||
url(r'^dashboard/graphs/$', 'dashboard_graph_view'),
|
||||
url(r'^dashboard/graphs/jobs/$', 'dashboard_jobs_graph_view'),
|
||||
url(r'^dashboard/graphs/inventory/$', 'dashboard_inventory_graph_view'),
|
||||
url(r'^schedules/', include(schedule_urls)),
|
||||
url(r'^organizations/', include(organization_urls)),
|
||||
url(r'^users/', include(user_urls)),
|
||||
|
||||
@ -248,24 +248,32 @@ class DashboardView(APIView):
|
||||
'total': job_template_list.count()}
|
||||
return Response(data)
|
||||
|
||||
class DashboardGraphView(APIView):
|
||||
class DashboardJobsGraphView(APIView):
|
||||
|
||||
view_name = "Dashboard Graphs"
|
||||
view_name = "Dashboard Jobs Graphs"
|
||||
new_in_20 = True
|
||||
|
||||
def get(self, request, format=None):
|
||||
period = request.QUERY_PARAMS.get('period', 'month')
|
||||
job_type = request.QUERY_PARAMS.get('job_type', 'all')
|
||||
|
||||
qs = User.objects.all()
|
||||
user_unified_jobs = get_user_queryset(request.user, UnifiedJob)
|
||||
user_hosts = get_user_queryset(request.user, Host)
|
||||
|
||||
success_qss = qsstats.QuerySetStats(user_unified_jobs.filter(status='successful'), 'finished')
|
||||
failed_qss = qsstats.QuerySetStats(user_unified_jobs.filter(status='failed'), 'finished')
|
||||
success_query = user_unified_jobs.filter(status='successful')
|
||||
failed_query = user_unified_jobs.filter(status='failed')
|
||||
|
||||
created_hosts = qsstats.QuerySetStats(user_hosts, 'created')
|
||||
count_hosts = user_hosts.all().count()
|
||||
if job_type == 'inv_sync':
|
||||
success_query.filter(instance_of=InventoryUpdate)
|
||||
failed_query.filter(instance_of=InventoryUpdate)
|
||||
elif job_type == 'playbook_run':
|
||||
success_query.filter(instance_of=Job)
|
||||
failed_query.filter(instance_of=Job)
|
||||
elif job_type == 'scm_update':
|
||||
success_query.filter(instance_of=ProjectUpdate)
|
||||
failed_query.filter(instance_of=ProjectUpdate)
|
||||
|
||||
success_qss = qsstats.QuerySetStats(success_query, 'finished')
|
||||
failed_qss = qsstats.QuerySetStats(failed_query, 'finished')
|
||||
|
||||
start_date = datetime.datetime.now()
|
||||
if period == 'month':
|
||||
@ -277,15 +285,44 @@ class DashboardGraphView(APIView):
|
||||
elif period == 'day':
|
||||
end_date = start_date - dateutil.relativedelta.relativedelta(days=1)
|
||||
interval = 'hours'
|
||||
else:
|
||||
return Response({'error': 'Unknown period "%s"' % str(period)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
dashboard_data = {"jobs": {"successful": [], "failed": []}, "hosts": [],
|
||||
"inventory": []}
|
||||
dashboard_data = {"jobs": {"successful": [], "failed": []}}
|
||||
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]])
|
||||
for element in failed_qss.time_series(end_date, start_date, interval=interval):
|
||||
dashboard_data['jobs']['failed'].append([time.mktime(element[0].timetuple()),
|
||||
element[1]])
|
||||
return Response(dashboard_data)
|
||||
|
||||
class DashboardInventoryGraphView(APIView):
|
||||
|
||||
view_name = "Dashboard Inventory Graphs"
|
||||
new_in_20 = True
|
||||
|
||||
def get(self, request, format=None):
|
||||
period = request.QUERY_PARAMS.get('period', 'month')
|
||||
|
||||
start_date = datetime.datetime.now()
|
||||
if period == 'month':
|
||||
end_date = start_date - dateutil.relativedelta.relativedelta(months=1)
|
||||
interval = 'days'
|
||||
elif period == 'week':
|
||||
end_date = start_date - dateutil.relativedelta.relativedelta(weeks=1)
|
||||
interval = 'days'
|
||||
elif period == 'day':
|
||||
end_date = start_date - dateutil.relativedelta.relativedelta(days=1)
|
||||
interval = 'hours'
|
||||
else:
|
||||
return Response({'error': 'Unknown period "%s"' % str(period)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
user_hosts = get_user_queryset(request.user, Host)
|
||||
created_hosts = qsstats.QuerySetStats(user_hosts, 'created')
|
||||
count_hosts = user_hosts.all().count()
|
||||
|
||||
dashboard_data = {'hosts': [], 'inventory': []}
|
||||
last_delta = 0
|
||||
host_data = []
|
||||
for element in created_hosts.time_series(end_date, start_date, interval=interval)[::-1]:
|
||||
@ -293,6 +330,7 @@ class DashboardGraphView(APIView):
|
||||
count_hosts - last_delta])
|
||||
count_hosts -= last_delta
|
||||
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"))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user