summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Laszlo <tim.laszlo@gmail.com>2012-06-06 16:55:57 -0500
committerTim Laszlo <tim.laszlo@gmail.com>2012-06-06 16:56:13 -0500
commit3ffd9bccb20f199ffc48263d019dfc3c44d0119b (patch)
treeede122212055e51eda68ab67e8346fe58c4860aa
parent01d68bf3237529f5cb6a9160b4328e797d01b0fe (diff)
downloadbcfg2-3ffd9bccb20f199ffc48263d019dfc3c44d0119b.tar.gz
bcfg2-3ffd9bccb20f199ffc48263d019dfc3c44d0119b.tar.bz2
bcfg2-3ffd9bccb20f199ffc48263d019dfc3c44d0119b.zip
web_reports: speed up client detail view
-rw-r--r--reports/site_media/bcfg2_base.css10
-rw-r--r--src/lib/Bcfg2/Server/Reports/reports/templates/clients/detail.html55
-rw-r--r--src/lib/Bcfg2/Server/Reports/reports/templatetags/bcfg2_tags.py13
-rw-r--r--src/lib/Bcfg2/Server/Reports/reports/views.py24
4 files changed, 39 insertions, 63 deletions
diff --git a/reports/site_media/bcfg2_base.css b/reports/site_media/bcfg2_base.css
index 83890fd11..ae7e145f1 100644
--- a/reports/site_media/bcfg2_base.css
+++ b/reports/site_media/bcfg2_base.css
@@ -133,6 +133,16 @@ ul.menu-level2 {
color: #10324b;
text-decoration: none;
}
+/*
+ * Convenience for templating..
+ */
+.bad-lineitem {
+ background: #FF7777;
+}
+.bad-lineitem a {
+ color: #10324b;
+ text-decoration: none;
+}
.clean-lineitem {
background: #AAFFBB;
}
diff --git a/src/lib/Bcfg2/Server/Reports/reports/templates/clients/detail.html b/src/lib/Bcfg2/Server/Reports/reports/templates/clients/detail.html
index f4cdf7c2a..c02709545 100644
--- a/src/lib/Bcfg2/Server/Reports/reports/templates/clients/detail.html
+++ b/src/lib/Bcfg2/Server/Reports/reports/templates/clients/detail.html
@@ -95,58 +95,25 @@ span.history_links a {
</div>
{% endif %}
- {% if interaction.bad_entry_count %}
+ {% for type, ei_list in ei_lists %}
+ {% if ei_list %}
<div class='entry_list'>
- <div class='entry_list_head dirty-lineitem' onclick='javascript:toggleMe("bad_table");'>
- <h3>Bad Entries &#8212; {{ interaction.bad_entry_count }}</h3>
- <div class='entry_expand_tab' id='plusminus_bad_table'>[+]</div>
+ <div class='entry_list_head {{type}}-lineitem' onclick='javascript:toggleMe("{{type}}_table");'>
+ <h3>{{ type|capfirst }} Entries &#8212; {{ ei_list|length }}</h3>
+ <div class='entry_expand_tab' id='plusminus_{{type}}_table'>[+]</div>
</div>
- <table id='bad_table' class='entry_list'>
- {% for e in interaction.bad|sortwell %}
+ <table id='{{type}}_table' class='entry_list'>
+ {% for ei in ei_list %}
<tr class='{% cycle listview,listview_alt %}'>
- <td class='entry_list_type'>{{e.entry.kind}}:</td>
- <td><a href="{% url reports_item "bad",e.id %}">
- {{e.entry.name}}</a></td>
+ <td class='entry_list_type'>{{ei.entry.kind}}:</td>
+ <td><a href="{% url reports_item type ei.id %}">
+ {{ei.entry.name}}</a></td>
</tr>
{% endfor %}
</table>
</div>
{% endif %}
-
- {% if interaction.modified_entry_count %}
- <div class='entry_list'>
- <div class='entry_list_head modified-lineitem' onclick='javascript:toggleMe("modified_table");'>
- <h3>Modified Entries &#8212; {{ interaction.modified_entry_count }}</h3>
- <div class='entry_expand_tab' id='plusminus_modified_table'>[+]</div>
- </div>
- <table id='modified_table' class='entry_list'>
- {% for e in interaction.modified|sortwell %}
- <tr class='{% cycle listview,listview_alt %}'>
- <td class='entry_list_type'>{{e.entry.kind}}:</td>
- <td><a href="{% url reports_item "modified",e.id %}">
- {{e.entry.name}}</a></td>
- </tr>
- {% endfor %}
- </table>
- </div>
- {% endif %}
-
- {% if interaction.extra_entry_count %}
- <div class='entry_list'>
- <div class='entry_list_head extra-lineitem' onclick='javascript:toggleMe("extra_table");'>
- <h3>Extra Entries &#8212; {{ interaction.extra_entry_count }}</h3>
- <div class='entry_expand_tab' id='plusminus_extra_table'>[+]</div>
- </div>
- <table id='extra_table' class='entry_list'>
- {% for e in interaction.extra|sortwell %}
- <tr class='{% cycle listview,listview_alt %}'>
- <td class='entry_list_type'>{{e.entry.kind}}:</td>
- <td><a href="{% url reports_item "extra",e.id %}">{{e.entry.name}}</a></td>
- </tr>
- {% endfor %}
- </table>
- </div>
- {% endif %}
+ {% endfor %}
{% if entry_list %}
<div class="entry_list recent_history_wrapper">
diff --git a/src/lib/Bcfg2/Server/Reports/reports/templatetags/bcfg2_tags.py b/src/lib/Bcfg2/Server/Reports/reports/templatetags/bcfg2_tags.py
index 61895df57..894353bba 100644
--- a/src/lib/Bcfg2/Server/Reports/reports/templatetags/bcfg2_tags.py
+++ b/src/lib/Bcfg2/Server/Reports/reports/templatetags/bcfg2_tags.py
@@ -262,19 +262,6 @@ def add_url_filter(parser, token):
return AddUrlFilter(filter_name, filter_value)
-@register.filter
-def sortwell(value):
- """
- Sorts a list(or evaluates queryset to list) of bad, extra, or modified items in the best
- way for presentation
- """
-
- configItems = list(value)
- configItems.sort(lambda x, y: cmp(x.entry.name, y.entry.name))
- configItems.sort(lambda x, y: cmp(x.entry.kind, y.entry.kind))
- return configItems
-
-
class MediaTag(template.Node):
def __init__(self, filter_value):
self.filter_value = filter_value
diff --git a/src/lib/Bcfg2/Server/Reports/reports/views.py b/src/lib/Bcfg2/Server/Reports/reports/views.py
index d316c5713..e60a27997 100644
--- a/src/lib/Bcfg2/Server/Reports/reports/views.py
+++ b/src/lib/Bcfg2/Server/Reports/reports/views.py
@@ -286,13 +286,25 @@ def client_detail(request, hostname=None, pk=None):
context = dict()
client = get_object_or_404(Client, name=hostname)
if(pk == None):
- context['interaction'] = client.current_interaction
- return render_history_view(request, 'clients/detail.html', page_limit=5,
- client=client, context=context)
+ inter = client.current_interaction
+ maxdate = None
else:
- context['interaction'] = client.interactions.get(pk=pk)
- return render_history_view(request, 'clients/detail.html', page_limit=5,
- client=client, maxdate=context['interaction'].timestamp, context=context)
+ inter = client.interactions.get(pk=pk)
+ maxdate = inter.timestamp
+
+ ei = Entries_interactions.objects.filter(interaction=inter).select_related('entry').order_by('entry__kind', 'entry__name')
+ #ei = Entries_interactions.objects.filter(interaction=inter).select_related('entry')
+ #ei = sorted(Entries_interactions.objects.filter(interaction=inter).select_related('entry'),
+ # key=lambda x: (x.entry.kind, x.entry.name))
+ context['ei_lists'] = (
+ ('bad', [x for x in ei if x.type == TYPE_BAD]),
+ ('modified', [x for x in ei if x.type == TYPE_MODIFIED]),
+ ('extra', [x for x in ei if x.type == TYPE_EXTRA])
+ )
+
+ context['interaction']=inter
+ return render_history_view(request, 'clients/detail.html', page_limit=5,
+ client=client, maxdate=maxdate, context=context)
def client_manage(request):