From c0bc3f9c41c89265758e7ab6837d84313d9e23e6 Mon Sep 17 00:00:00 2001 From: Joey Hagedorn Date: Tue, 27 Jun 2006 19:35:34 +0000 Subject: 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 --- reports/brpt/reports/models.py | 28 +++++++++++-- .../reports/templatetags/django_templating_sigh.py | 2 +- reports/brpt/reports/views.py | 48 +++++++++++++++------- 3 files changed, 59 insertions(+), 19 deletions(-) (limited to 'reports/brpt') 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? -- cgit v1.2.3-1-g7c22