summaryrefslogtreecommitdiffstats
path: root/reports/brpt/reports/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'reports/brpt/reports/views.py')
-rw-r--r--reports/brpt/reports/views.py90
1 files changed, 54 insertions, 36 deletions
diff --git a/reports/brpt/reports/views.py b/reports/brpt/reports/views.py
index 695e91ab2..a8cf08276 100644
--- a/reports/brpt/reports/views.py
+++ b/reports/brpt/reports/views.py
@@ -4,8 +4,9 @@ from django.template import Context, loader
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from brpt.reports.models import Client, Interaction, Bad, Modified, Extra, Performance
-from datetime import datetime
-
+from datetime import datetime, timedelta
+from time import strptime
+from django.db import connection
def index(request):
return render_to_response('index.html')
@@ -22,28 +23,32 @@ def client_detail(request, hostname = None, pk = None):
else:
interaction = client.interactions.get(pk=pk)#can this be a get object or 404?
+ for q in connection.queries:
+ print q
+
+
+
return render_to_response('clients/detail.html',{'client': client, 'interaction': interaction})
-def display_sys_view(request):
- client_lists = prepare_client_lists(request)
+def display_sys_view(request, timestamp = 'now'):
+ client_lists = prepare_client_lists(request, timestamp)
- from django.db import connection
for q in connection.queries:
print q
return render_to_response('displays/sys_view.html', client_lists)
-def display_summary(request):
- client_lists = prepare_client_lists(request)
+def display_summary(request, timestamp = 'now'):
+
+ client_lists = prepare_client_lists(request, timestamp)
- from django.db import connection
for q in connection.queries:
print q
return render_to_response('displays/summary.html', client_lists)
-def display_timing(request, timestamp = None):
+def display_timing(request, timestamp = 'now'):
#We're going to send a list of dictionaries. Each dictionary will be a row in the table
#+------+-------+----------------+-----------+---------+----------------+-------+
#| name | parse | probe download | inventory | install | cfg dl & parse | total |
@@ -51,7 +56,7 @@ def display_timing(request, timestamp = None):
client_list = Client.objects.all().order_by('name')
stats_list = []
- if not timestamp == None:
+ if not timestamp == 'now':
results = Performance.objects.performance_per_client(timestamp.replace("@"," "))
else:
results = Performance.objects.performance_per_client()
@@ -104,41 +109,51 @@ def display_timing(request, timestamp = None):
def display_index(request):
return render_to_response('displays/index.html')
-def prepare_client_lists(request):
- client_list = Client.objects.all().order_by('name')#change this to order by interaction's state
+def prepare_client_lists(request, timestamp = 'now'):
+ timestamp = timestamp.replace("@"," ")
+ #client_list = Client.objects.all().order_by('name')#change this to order by interaction's state
client_interaction_dict = {}
clean_client_list = []
bad_client_list = []
extra_client_list = []
modified_client_list = []
stale_up_client_list = []
- stale_all_client_list = []
+ #stale_all_client_list = []
down_client_list = []
- [client_interaction_dict.__setitem__(x.client_id,x) for x in Interaction.objects.interaction_per_client('now')]# or you can specify a time like this: '2007-01-01 00:00:00'
-
- for client in client_list:
- #i = client_interaction_dict[client.id]
-
- if client_interaction_dict[client.id].isclean():
- clean_client_list.append(client)
- else:
- bad_client_list.append(client)
- if client_interaction_dict[client.id].isstale():
- if client_interaction_dict[client.id].pingable:
- stale_up_client_list.append(client)
- stale_all_client_list.append(client)
- else:
- stale_all_client_list.append(client)
- if not client_interaction_dict[client.id].pingable:
- down_client_list.append(client)
+ cursor = connection.cursor()
+
+ interact_queryset = Interaction.objects.interaction_per_client(timestamp)
+ # or you can specify a time like this: '2007-01-01 00:00:00'
+ [client_interaction_dict.__setitem__(x.client_id,x) for x in interact_queryset]
+ client_list = Client.objects.filter(id__in=client_interaction_dict.keys()).order_by('name')
+
+ [clean_client_list.append(x) for x in Client.objects.filter(id__in=[y.client_id for y in interact_queryset.filter(state='clean')])]
+ [bad_client_list.append(x) for x in Client.objects.filter(id__in=[y.client_id for y in interact_queryset.filter(state='dirty')])]
+ [down_client_list.append(x) for x in Client.objects.filter(id__in=[y.client_id for y in interact_queryset.filter(pingable='N')])]#need to change the PINGING data structure
+
+ if (timestamp == 'now' or timestamp == None):
+ cursor.execute("select client_id, MAX(timestamp) as timestamp from reports_interaction GROUP BY client_id")
+ stale_all_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall() if datetime.now() - x[1]>timedelta(days=1)])
+ else:
+ cursor.execute("select client_id, timestamp, MAX(timestamp) as timestamp from reports_interaction "+
+ "WHERE timestamp < %s GROUP BY client_id", [timestamp])
+ t = strptime(timestamp,"%Y-%m-%d %H:%M:%S")
+ datetimestamp = datetime(t[0],t[1],t[2],t[3],t[4],t[5])
+ stale_all_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall() if datetimestamp - x[1] > timedelta(days=1)])
- if len(client_interaction_dict[client.id].modified_items.all()) > 0:
- modified_client_list.append(client)
- if len(client_interaction_dict[client.id].extra_items.all()) > 0:
- extra_client_list.append(client)
+ [stale_up_client_list.append(x) for x in stale_all_client_list if client_interaction_dict[x.id].pingable=='Y']
+
+
+ cursor.execute("SELECT reports_client.id FROM reports_client, reports_interaction, reports_modified_interactions WHERE reports_client.id=reports_interaction.client_id AND reports_interaction.id = reports_modified_interactions.interaction_id GROUP BY reports_client.id")
+ modified_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall()])
+
+ cursor.execute("SELECT reports_client.id FROM reports_client, reports_interaction, reports_extra_interactions WHERE reports_client.id=reports_interaction.client_id AND reports_interaction.id = reports_extra_interactions.interaction_id GROUP BY reports_client.id")
+ extra_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall()])
+
+ if timestamp == 'now':
+ timestamp = datetime.now().isoformat('@')
- #if the list is empty set it to None?
return {'client_list': client_list,
'client_interaction_dict':client_interaction_dict,
'clean_client_list': clean_client_list,
@@ -147,4 +162,7 @@ def prepare_client_lists(request):
'modified_client_list': modified_client_list,
'stale_up_client_list': stale_up_client_list,
'stale_all_client_list': stale_all_client_list,
- 'down_client_list': down_client_list}
+ 'down_client_list': down_client_list,
+ 'timestamp' : timestamp,
+ 'timestamp_date' : timestamp[:10],
+ 'timestamp_time' : timestamp[11:19]}