From 01317c38ca41e7ee9ea060f9e96e232999e2e734 Mon Sep 17 00:00:00 2001 From: Joey Hagedorn Date: Thu, 20 Jul 2006 15:39:02 +0000 Subject: New Reports: Finalized Reasons display for bad and modified config elements. Also displays of other hosts with the same problem. git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1973 ce84e21b-d406-0410-9b95-82705330c041 --- reports/brpt/reports/models.py | 3 +- .../brpt/reports/templates/config_items/index.html | 77 +++++++++++++++++++ .../brpt/reports/templates/displays/timing.html | 1 - reports/brpt/reports/views.py | 86 +++++++++++++++++----- reports/brpt/urls.py | 4 + 5 files changed, 152 insertions(+), 19 deletions(-) create mode 100644 reports/brpt/reports/templates/config_items/index.html diff --git a/reports/brpt/reports/models.py b/reports/brpt/reports/models.py index b6ac51005..3fc6525a3 100644 --- a/reports/brpt/reports/models.py +++ b/reports/brpt/reports/models.py @@ -45,11 +45,12 @@ class InteractiveManager(models.Manager): def interaction_per_client(self, maxdate = None): from django.db import connection cursor = connection.cursor() - if (maxdate == 'now' or maxdate == None): + if (maxdate == 'now' or maxdate == None): cursor.execute("select reports_interaction.id, x.client_id from (select client_id, MAX(timestamp) "+ "as timer from reports_interaction GROUP BY client_id) x, reports_interaction where "+ "reports_interaction.client_id = x.client_id AND reports_interaction.timestamp = x.timer") else: + #THIS TOTALLY BREAKS WHEN you go too far back in time, when it should return 0 records. Try except it? cursor.execute("select reports_interaction.id, x.client_id from (select client_id, timestamp, MAX(timestamp) "+ "as timer from reports_interaction WHERE timestamp < %s GROUP BY client_id) x, reports_interaction where "+ "reports_interaction.client_id = x.client_id AND reports_interaction.timestamp = x.timer", [maxdate]) diff --git a/reports/brpt/reports/templates/config_items/index.html b/reports/brpt/reports/templates/config_items/index.html new file mode 100644 index 000000000..952172715 --- /dev/null +++ b/reports/brpt/reports/templates/config_items/index.html @@ -0,0 +1,77 @@ +{% extends "base.html" %} + +{% block extra_header_info %} + + +{% endblock%} +{% block title %}Configuration Element Details{% endblock %} + +{% block pagebanner %} +
+

Configuration Element Details

+
+
+{% endblock %} + +{% block content %} +{% ifequal mod_or_bad "bad" %} +
+

Bad {{item.kind}}: {{item.name}}

+
+{% else %} +
+

Modified {{item.kind}}: {{item.name}}

+
+{% endifequal %} +
+ + +{% if item.reason.current_owner %} + +{% endif %}{% if item.reason.current_group %} + +{% endif %}{% if item.reason.current_perms %} + +{% endif %}{% if item.reason.current_status %} + +{% endif %}{% if item.reason.current_to %} + +{% endif %}{% if item.reason.current_version %} + +{% endif %}{% if not item.reason.current_exists %} + +{% endif %}{% if item.reason.current_diff %} + +{% endif %} +
ReasonCurrent StatusSpecified in BCFG
Owner: {{item.reason.owner}}{{item.reason.current_owner}}
Group: {{item.reason.group}}{{item.reason.current_group}}
Permissions: {{item.reason.perms}}{{item.reason.current_perms}}
Status: {{item.reason.status}}{{item.reason.current_status}}
Link Destination: {{item.reason.to}}{{item.reason.current_to}}
Version: {{item.reason.version}}{{item.reason.current_version}}
Existance: This item does not currently exist on the host but is specified to exist in the configuration.
Unified Diff:
{{item.reason.current_diff}}
+
+
+ +Enter date or use calendar popup: +
+@ + +Calendar + + | +
+



+{% if associated_client_list %} +

The following clients had this problem as of {{timestamp_date}}@{{timestamp_time}}:

+ {% for client in associated_client_list %} + {{client.name}}
+ {% endfor %} +
+
+{% else %} +

No Clients had this problem at {{timestamp}}

+{% endif %} + + + + + + + +{% endblock %} diff --git a/reports/brpt/reports/templates/displays/timing.html b/reports/brpt/reports/templates/displays/timing.html index e951ff886..e9020b8ef 100644 --- a/reports/brpt/reports/templates/displays/timing.html +++ b/reports/brpt/reports/templates/displays/timing.html @@ -13,7 +13,6 @@ Report Run @ {% now "F j, Y P"%}
-
Enter date or use calendar popup: diff --git a/reports/brpt/reports/views.py b/reports/brpt/reports/views.py index e4be8f745..a9dde75fc 100644 --- a/reports/brpt/reports/views.py +++ b/reports/brpt/reports/views.py @@ -11,33 +11,84 @@ from django.db import connection def index(request): return render_to_response('index.html') -def config_item_modified(request, eyedee =None): +def config_item_modified(request, eyedee =None, timestamp = 'now'): #if eyedee = None, dump with a 404 - mod_or_bad = "Modified" - + timestamp = timestamp.replace("@"," ") + mod_or_bad = "modified" + item = Modified.objects.get(id=eyedee) - #if everything is blank except current_exists, do something special + cursor = connection.cursor() + if timestamp == 'now': + cursor.execute("select client_id from reports_interaction, reports_modified_interactions, reports_client "+ + "WHERE reports_client.current_interaction_id = reports_modified_interactions.interaction_id "+ + "AND reports_modified_interactions.interaction_id = reports_interaction.id "+ + "AND reports_modified_interactions.modified_id = %s", [eyedee]) + associated_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall()]) + else: + interact_queryset = Interaction.objects.interaction_per_client(timestamp) + interactionlist = [] + [interactionlist.append(x.id) for x in interact_queryset] + if not interactionlist == []: + cursor.execute("select client_id from reports_interaction, reports_modified_interactions, reports_client "+ + "WHERE reports_modified_interactions.interaction_id IN %s "+ + "AND reports_modified_interactions.interaction_id = reports_interaction.id "+ + "AND reports_modified_interactions.modified_id = %s", [interactionlist, eyedee]) + associated_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall()]) + else: + associated_client_list = [] - #cursor = connection.cursor() - #cursor.execute("select client_id from reports_interaction, reports_modified_interactions, reports_client "+ - # "WHERE reports_client.current_interaction_id = reports_modified_interactions.interaction_id "+ - # "AND reports_modified_interactions.interaction_id = reports_interaction.id"+ - # "AND reports_modified_interactions = %s", [eyedee]) - - #associated_client_list = Clients.objects.filter(id__in=[x[0] for x in cursor.fetchall()]) + if timestamp == 'now': + timestamp = datetime.now().isoformat('@') + for q in connection.queries: + print q return render_to_response('config_items/index.html',{'item':item, 'mod_or_bad':mod_or_bad, - }) - #'associated_client_list':associated_client_list}) + 'associated_client_list':associated_client_list, + 'timestamp' : timestamp, + 'timestamp_date' : timestamp[:10], + 'timestamp_time' : timestamp[11:19]}) + -def config_item_bad(request, eyedee = None): - mod_or_bad = "Bad" +def config_item_bad(request, eyedee = None, timestamp = 'now'): + timestamp = timestamp.replace("@"," ") + mod_or_bad = "bad" item = Bad.objects.get(id=eyedee) + cursor = connection.cursor() + if timestamp == 'now': + cursor.execute("select client_id from reports_interaction, reports_bad_interactions, reports_client "+ + "WHERE reports_client.current_interaction_id = reports_bad_interactions.interaction_id "+ + "AND reports_bad_interactions.interaction_id = reports_interaction.id "+ + "AND reports_bad_interactions.bad_id = %s", [eyedee]) + associated_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall()]) + else: + interact_queryset = Interaction.objects.interaction_per_client(timestamp) + interactionlist = [] + [interactionlist.append(x.id) for x in interact_queryset] + if not interactionlist == []: + cursor.execute("select client_id from reports_interaction, reports_bad_interactions, reports_client "+ + "WHERE reports_bad_interactions.interaction_id IN %s "+ + "AND reports_bad_interactions.interaction_id = reports_interaction.id "+ + "AND reports_bad_interactions.bad_id = %s", [interactionlist, eyedee]) + associated_client_list = Client.objects.filter(id__in=[x[0] for x in cursor.fetchall()]) + else: + associated_client_list = None + + if timestamp == 'now': + timestamp = datetime.now().isoformat('@') + + + for q in connection.queries: + print q + return render_to_response('config_items/index.html',{'item':item, - 'mod_or_bad':mod_or_bad}) + 'mod_or_bad':mod_or_bad, + 'associated_client_list':associated_client_list, + 'timestamp' : timestamp, + 'timestamp_date' : timestamp[:10], + 'timestamp_time' : timestamp[11:19]}) @@ -73,7 +124,8 @@ def display_sys_view(request, timestamp = 'now'): def display_summary(request, timestamp = 'now'): client_lists = prepare_client_lists(request, timestamp) - + #this returns timestamp and the timestamp parts + #for q in connection.queries: # print q diff --git a/reports/brpt/urls.py b/reports/brpt/urls.py index 44050a774..982505273 100644 --- a/reports/brpt/urls.py +++ b/reports/brpt/urls.py @@ -17,8 +17,12 @@ urlpatterns = patterns('', (r'^displays/timing/$','brpt.reports.views.display_timing'), (r'^displays/$','brpt.reports.views.display_index'), + + (r'^elements/modified/(?P\d+)/(?P(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])@([01][0-9]|2[0-3]):([0-5][0-9]|60):([0-5][0-9]|60))/$','brpt.reports.views.config_item_modified'), (r'^elements/modified/(?P\d+)/$','brpt.reports.views.config_item_modified'), + (r'^elements/bad/(?P\d+)/(?P(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])@([01][0-9]|2[0-3]):([0-5][0-9]|60):([0-5][0-9]|60))/$','brpt.reports.views.config_item_bad'), (r'^elements/bad/(?P\d+)/$','brpt.reports.views.config_item_bad'), + # Uncomment this for admin: #(r'^admin/', include('django.contrib.admin.urls')), -- cgit v1.2.3-1-g7c22