summaryrefslogtreecommitdiffstats
path: root/reports
diff options
context:
space:
mode:
authorJoey Hagedorn <hagedorn@mcs.anl.gov>2006-07-18 16:00:12 +0000
committerJoey Hagedorn <hagedorn@mcs.anl.gov>2006-07-18 16:00:12 +0000
commit053b7db0f0ef38cf72a27f5e20fcf3432fc9f11e (patch)
tree7f90b0065716a407bdb14ccc5af2c7746d58f5ae /reports
parent56d76f9dd8f23a96a2e89d55296d76797e90800c (diff)
downloadbcfg2-053b7db0f0ef38cf72a27f5e20fcf3432fc9f11e.tar.gz
bcfg2-053b7db0f0ef38cf72a27f5e20fcf3432fc9f11e.tar.bz2
bcfg2-053b7db0f0ef38cf72a27f5e20fcf3432fc9f11e.zip
New Reports: Summary view is now really fast 3 sec instead of 20; Summary enabled for historical view
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1966 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'reports')
-rwxr-xr-xreports/brpt/importscript.py4
-rw-r--r--reports/brpt/reports/templates/displays/summary.html17
-rw-r--r--reports/brpt/reports/templates/displays/timing.html2
-rw-r--r--reports/brpt/reports/templatetags/django_templating_sigh.py5
-rw-r--r--reports/brpt/reports/views.py90
5 files changed, 77 insertions, 41 deletions
diff --git a/reports/brpt/importscript.py b/reports/brpt/importscript.py
index 7e79b79e2..d588df806 100755
--- a/reports/brpt/importscript.py
+++ b/reports/brpt/importscript.py
@@ -32,11 +32,11 @@ if __name__ == '__main__':
opts, args = getopt(argv[1:], "hvudc:s:", ["help", "verbose", "updates" ,"debug", "clients=", "stats="])
except GetoptError, mesg:
# print help information and exit:
- print "%s\nUsage:\nStatReports.py [-h] [-v] [-u] [-d] -c <clients-file> -s <statistics-file>" % (mesg)
+ print "%s\nUsage:\nimportscript.py [-h] [-v] [-u] [-d] -c <clients-file> -s <statistics-file>" % (mesg)
raise SystemExit, 2
for o, a in opts:
if o in ("-h", "--help"):
- print "Usage:\nStatReports.py [-h] [-v] -c <clients-file> -s <statistics-file> \n"
+ print "Usage:\nimportscript.py [-h] [-v] -c <clients-file> -s <statistics-file> \n"
print "h : help; this message"
print "v : verbose; print messages on record insertion/skip"
print "u : updates; print status messages as items inserted semi-verbose"
diff --git a/reports/brpt/reports/templates/displays/summary.html b/reports/brpt/reports/templates/displays/summary.html
index f3c3c1339..cf253c25c 100644
--- a/reports/brpt/reports/templates/displays/summary.html
+++ b/reports/brpt/reports/templates/displays/summary.html
@@ -1,5 +1,8 @@
{% extends "base.html" %}
-
+{% block extra_header_info %}
+<script type="text/javascript" src="/site_media/CalendarPopup.js"></script>
+<script language="JavaScript">var cal = new CalendarPopup();</script>
+{% endblock%}
{% block title %}Display Index Listing{% endblock %}
{% block pagebanner %}
<div class="header">
@@ -10,5 +13,17 @@
{% endblock %}
{% block content %}
+<div>
+<span class="mini-date">
+<b>Enter date or use calendar popup: </b>
+<form name="timestamp-select">
+<input type="text" name="date1" value="{{timestamp_date}}" size=10>@
+<input type="text" name="time" value="{{timestamp_time}}" size=8>
+<a href="" onClick="cal.select(document.forms['timestamp-select'].date1,'anchor1','yyyy-MM-dd'); return false;"
+ name="anchor1" ID="anchor1">Calendar</A>
+<input type="button" name="go" value="Go" onClick="location.href='/displays/summary/'+document.forms['timestamp-select'].date1.value+'@'+document.forms['timestamp-select'].time.value;" />
+ | <input type="button" name="now" value="Now" onClick="location.href='/displays/summary/';"/>
+</form>
+</span><br/><br/><br/></div>
{% include "displays/summary-block-direct-links.html" %}
{% endblock %}
diff --git a/reports/brpt/reports/templates/displays/timing.html b/reports/brpt/reports/templates/displays/timing.html
index b734d9836..e951ff886 100644
--- a/reports/brpt/reports/templates/displays/timing.html
+++ b/reports/brpt/reports/templates/displays/timing.html
@@ -13,9 +13,9 @@
<span class="notebox">Report Run @ {% now "F j, Y P"%}</span>
</div>
<br/>
+
<div>
<span class="mini-date">
-
<b>Enter date or use calendar popup: </b>
<form name="timestamp-select">
<input type="text" name="date1" value="{{timestamp_date}}" size=10>@
diff --git a/reports/brpt/reports/templatetags/django_templating_sigh.py b/reports/brpt/reports/templatetags/django_templating_sigh.py
index 2d5f76e06..35378f444 100644
--- a/reports/brpt/reports/templatetags/django_templating_sigh.py
+++ b/reports/brpt/reports/templatetags/django_templating_sigh.py
@@ -18,7 +18,10 @@ class SetInteraction(template.Node):
def __init__(self, times):
self.times = times#do soemthing to select different interaction with host
def render(self, context):
- context['interaction'] = context['client_interaction_dict'][context['client'].id]
+ try:
+ context['interaction'] = context['client_interaction_dict'][context['client'].id]
+ except:#I don't fully know what the implications of this are.
+ pass
return ''
register.tag('set_interaction', set_interaction)
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]}