summaryrefslogtreecommitdiffstats
path: root/reports
diff options
context:
space:
mode:
authorJoey Hagedorn <hagedorn@mcs.anl.gov>2006-06-27 19:35:34 +0000
committerJoey Hagedorn <hagedorn@mcs.anl.gov>2006-06-27 19:35:34 +0000
commitc0bc3f9c41c89265758e7ab6837d84313d9e23e6 (patch)
tree55dc1602162a3109fcd2d929226228e832e65285 /reports
parent95a341711ac172671bf4d4d5ada0a5162fad0eeb (diff)
downloadbcfg2-c0bc3f9c41c89265758e7ab6837d84313d9e23e6.tar.gz
bcfg2-c0bc3f9c41c89265758e7ab6837d84313d9e23e6.tar.bz2
bcfg2-c0bc3f9c41c89265758e7ab6837d84313d9e23e6.zip
Changed Client schema to cache current interaction.
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1897 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'reports')
-rw-r--r--reports/brpt/reports/models.py28
-rw-r--r--reports/brpt/reports/templatetags/django_templating_sigh.py2
-rw-r--r--reports/brpt/reports/views.py48
3 files changed, 59 insertions, 19 deletions
diff --git a/reports/brpt/reports/models.py b/reports/brpt/reports/models.py
index 3330189b0..2960a9669 100644
--- a/reports/brpt/reports/models.py
+++ b/reports/brpt/reports/models.py
@@ -33,7 +33,9 @@ REASON_CHOICES = (
class Client(models.Model):
#This exists for clients that are no longer in the repository even! (timeless)
creation = models.DateTimeField()
- name = models.CharField(maxlength=128)
+ name = models.CharField(maxlength=128, core=True)
+ current_interaction = models.ForeignKey('Interaction')
+
def __str__(self):
return self.name
@@ -54,6 +56,20 @@ class Repository(models.Model):
def __str__(self):
return self.timestamp
+class InteractiveManager(models.Manager):
+ def interaction_per_client(self, maxdate):
+ from django.db import connection
+ cursor = connection.cursor()
+ if maxdate == 'now':
+ cursor.execute("select id, client_id, MAX(timestamp) AS maxtimestamp from reports_interaction GROUP BY client_id")
+ else:
+ cursor.execute("select id, client_id, timestamp, MAX(timestamp) AS maxtimestamp from reports_interaction where timestamp < %s GROUP BY client_id", [maxdate])
+ #rows = cursor.fetchall()
+ #return rows
+ in_idents = [item[0] for item in cursor.fetchall()]
+ return self.filter(id__in = in_idents)
+
+ '2006-01-01 00:00:00'
#models each client-interaction
class Interaction(models.Model):
@@ -96,7 +112,13 @@ class Interaction(models.Model):
return True
else:
return False
-
+ def _post_save(self):
+ self.client.latest_interaction = self.client.interactions.latest()
+ self.client.save()
+ #do i need to save the self.client manually?
+
+
+ objects = InteractiveManager()
class Admin:
list_display = ('client', 'timestamp', 'state')
@@ -104,8 +126,6 @@ class Interaction(models.Model):
pass
class Meta:
get_latest_by = 'timestamp'
-
-
class Modified(models.Model):
diff --git a/reports/brpt/reports/templatetags/django_templating_sigh.py b/reports/brpt/reports/templatetags/django_templating_sigh.py
index 0765d272b..321881891 100644
--- a/reports/brpt/reports/templatetags/django_templating_sigh.py
+++ b/reports/brpt/reports/templatetags/django_templating_sigh.py
@@ -1,5 +1,5 @@
from django import template
-from brpt.reports.models import Client, Interaction, Bad, Modified, Extra
+#from brpt.reports.models import Client, Interaction, Bad, Modified, Extra
register = template.Library()
diff --git a/reports/brpt/reports/views.py b/reports/brpt/reports/views.py
index fe6842f1b..40a1323dd 100644
--- a/reports/brpt/reports/views.py
+++ b/reports/brpt/reports/views.py
@@ -3,7 +3,7 @@
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
+from brpt.reports.models import Client, Interaction, Bad, Modified, Extra, Performance
from datetime import datetime
@@ -26,10 +26,21 @@ def client_detail(request, hostname = -1, pk = -1):
def display_sys_view(request):
client_lists = prepare_client_lists(request)
+
+ 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)
+
+ 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):
@@ -41,10 +52,10 @@ def display_timing(request):
stats_list = []
#if we have stats for a client, go ahead and add it to the list(wrap in TRY)
for client in client_list:#Go explicitly to an interaction ID! (new item in dictionary)
-# performance_items = client.interactions.latest().performance_items.all()#allow this to be selectable(hist)
+ #performance_items = client.interactions.latest().performance_items.all()#allow this to be selectable(hist)
d = {}
- #Best List Comprehension Ever!
- [d.update({x:y}) for x,y in [a.values() for a in client.interactions.latest().performance_items.all().values('metric','value')]]
+ #[d.update({x:y}) for x,y in [a.values() for a in client.interactions.latest().performance_items.all().values('metric','value')]]
+ [d.update({x["metric"]:x["value"]}) for x in client.interactions.latest().performance_items.all().values('metric','value')]
dict_unit = {}
try:
@@ -79,10 +90,17 @@ def display_timing(request):
#make sure all is formatted as such: #.##
stats_list.append(dict_unit)
+
+
from django.db import connection
for q in connection.queries:
print q
+
+
+
+
+
return render_to_response('displays/timing.html',{'client_list': client_list, 'stats_list': stats_list})
def display_index(request):
@@ -98,26 +116,28 @@ def prepare_client_lists(request):
stale_up_client_list = []
stale_all_client_list = []
down_client_list = []
- for client in client_list:#but we need clientlist for more than just this loop
- i = client.interactions.latest('timestamp')
- client_interaction_dict[client.id] = i
-# if i.state == 'good':
- if i.isclean():
+
+ [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 i.isstale():
- if i.pingable:
+ 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 i.pingable:
+ if not client_interaction_dict[client.id].pingable:
down_client_list.append(client)
- if len(i.modified_items.all()) > 0:
+ if len(client_interaction_dict[client.id].modified_items.all()) > 0:
modified_client_list.append(client)
- if len(i.extra_items.all()) > 0:
+ if len(client_interaction_dict[client.id].extra_items.all()) > 0:
extra_client_list.append(client)
#if the list is empty set it to None?