summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2014-11-08 14:00:06 -0600
committerDan McGee <dan@archlinux.org>2014-11-08 14:00:09 -0600
commit713ab837ba59c4a7c0b60cb8e8be4b27f4520e52 (patch)
tree926af09762f87d14d14f118774240a34a8080430
parenteb7172cd4d9d7af690b2be06e3f925d3023be71c (diff)
Convert mirror status tables to Jinja2
Yay for way improved performance. Local testing showed render times going from 265 ms to 135 ms. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--mirrors/templatetags/jinja2.py22
-rw-r--r--templates/mirrors/error_table.html.jinja (renamed from templates/mirrors/error_table.html)8
-rw-r--r--templates/mirrors/mirror_details.html2
-rw-r--r--templates/mirrors/status.html6
-rw-r--r--templates/mirrors/status_table.html30
-rw-r--r--templates/mirrors/status_table.html.jinja28
6 files changed, 57 insertions, 39 deletions
diff --git a/mirrors/templatetags/jinja2.py b/mirrors/templatetags/jinja2.py
index 5d47fe9b..04e50238 100644
--- a/mirrors/templatetags/jinja2.py
+++ b/mirrors/templatetags/jinja2.py
@@ -1,3 +1,4 @@
+from datetime import timedelta
from django_jinja import library
from markupsafe import Markup
@@ -23,9 +24,30 @@ def duration(value):
@library.filter
+def hours(value):
+ if not value and type(value) != timedelta:
+ return u''
+ # does not take microseconds into account
+ total_secs = value.seconds + value.days * 24 * 3600
+ mins = total_secs // 60
+ hrs, mins = divmod(mins, 60)
+ if hrs == 1:
+ return '%d hour' % hrs
+ return '%d hours' % hrs
+
+
+@library.filter
def floatvalue(value, arg=2):
if value is None:
return u''
return '%.*f' % (arg, value)
+
+@library.filter
+def percentage(value, arg=1):
+ if not value and type(value) != float:
+ return u''
+ new_val = value * 100.0
+ return '%.*f%%' % (arg, new_val)
+
# vim: set ts=4 sw=4 et:
diff --git a/templates/mirrors/error_table.html b/templates/mirrors/error_table.html.jinja
index cd7265af..52f68135 100644
--- a/templates/mirrors/error_table.html
+++ b/templates/mirrors/error_table.html.jinja
@@ -1,5 +1,3 @@
-{% load cycle from future %}
-{% load flags mirror_status %}
<table id="errorlog_mirrors" class="results">
<thead>
<tr>
@@ -12,12 +10,12 @@
</tr>
</thead>
<tbody>
- {% for log in error_logs %}<tr class="{% cycle 'odd' 'even' %}">
+ {% for log in error_logs %}<tr class="{{ loop.cycle('odd', 'even') }}">
<td>{{ log.url__url }}</td>
<td>{{ log.url__protocol__protocol }}</td>
- <td class="country">{% country_flag log.country %}{{ log.country.name }}</td>
+ <td class="country">{{ country_flag(log.country) }}{{ log.country.name }}</td>
<td class="wrap">{{ log.error|linebreaksbr }}</td>
- <td>{{ log.last_occurred|date:'Y-m-d H:i' }}</td>
+ <td>{{ log.last_occurred|date('Y-m-d H:i') }}</td>
<td>{{ log.error_count }}</td>
</tr>{% endfor %}
</tbody>
diff --git a/templates/mirrors/mirror_details.html b/templates/mirrors/mirror_details.html
index 2ff41828..e4ae55b4 100644
--- a/templates/mirrors/mirror_details.html
+++ b/templates/mirrors/mirror_details.html
@@ -132,7 +132,7 @@
</table>
<h3>Error Log</h3>
- {% include "mirrors/error_table.html" %}
+ {% include "mirrors/error_table.html.jinja" %}
</div>
<div class="box">
diff --git a/templates/mirrors/status.html b/templates/mirrors/status.html
index 24408be7..530e3ff5 100644
--- a/templates/mirrors/status.html
+++ b/templates/mirrors/status.html
@@ -60,18 +60,18 @@
<a name="outofsync" id="outofsync"></a>
<h3>Out of Sync Mirrors</h3>
{% with urls=bad_urls table_id='outofsync_mirrors' %}
- {% include "mirrors/status_table.html" %}
+ {% include "mirrors/status_table.html.jinja" %}
{% endwith %}
<a name="successful" id="successful"></a>
<h3>Successfully Syncing Mirrors</h3>
{% with urls=good_urls table_id='successful_mirrors' %}
- {% include "mirrors/status_table.html" %}
+ {% include "mirrors/status_table.html.jinja" %}
{% endwith %}
<a name="errorlog" id="errorlog"></a>
<h3>Mirror Syncing Error Log</h3>
- {% include "mirrors/error_table.html" %}
+ {% include "mirrors/error_table.html.jinja" %}
</div>
{% endblock %}
diff --git a/templates/mirrors/status_table.html b/templates/mirrors/status_table.html
deleted file mode 100644
index 83538303..00000000
--- a/templates/mirrors/status_table.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{% load cycle from future %}
-{% load flags mirror_status %}
-<table id="{{ table_id }}" class="results">
- <thead>
- <tr>
- <th>Mirror URL</th>
- <th>Protocol</th>
- <th>Country</th>
- <th>Completion %</th>
- <th>μ Delay (hh:mm)</th>
- <th>μ Duration (s)</th>
- <th>σ Duration (s)</th>
- <th>Mirror Score</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- {% for m_url in urls %}<tr class="{% cycle 'odd' 'even' %}">
- <td>{{ m_url.url }}</td>
- <td>{{ m_url.protocol }}</td>
- <td class="country">{% country_flag m_url.country %}{{ m_url.country.name }}</td>
- <td>{{ m_url.completion_pct|percentage:1 }}</td>
- <td>{{ m_url.delay|duration|default:'unknown' }}</td>
- <td>{{ m_url.duration_avg|floatvalue:2 }}</td>
- <td>{{ m_url.duration_stddev|floatvalue:2 }}</td>
- <td>{{ m_url.score|floatvalue:1|default:'∞' }}</td>
- <td><a href="{{ m_url.get_absolute_url }}">details</a></td>
- </tr>{% endfor %}
- </tbody>
-</table>
diff --git a/templates/mirrors/status_table.html.jinja b/templates/mirrors/status_table.html.jinja
new file mode 100644
index 00000000..598a1af0
--- /dev/null
+++ b/templates/mirrors/status_table.html.jinja
@@ -0,0 +1,28 @@
+<table id="{{ table_id }}" class="results">
+ <thead>
+ <tr>
+ <th>Mirror URL</th>
+ <th>Protocol</th>
+ <th>Country</th>
+ <th>Completion %</th>
+ <th>μ Delay (hh:mm)</th>
+ <th>μ Duration (s)</th>
+ <th>σ Duration (s)</th>
+ <th>Mirror Score</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for m_url in urls %}<tr class="{{ loop.cycle('odd', 'even') }}">
+ <td>{{ m_url.url }}</td>
+ <td>{{ m_url.protocol }}</td>
+ <td class="country">{{ country_flag(m_url.country) }}{{ m_url.country.name }}</td>
+ <td>{{ m_url.completion_pct|percentage(1) }}</td>
+ <td>{{ m_url.delay|duration|default('unknown') }}</td>
+ <td>{{ m_url.duration_avg|floatvalue(2) }}</td>
+ <td>{{ m_url.duration_stddev|floatvalue(2) }}</td>
+ <td>{{ m_url.score|floatvalue(1)|default('∞') }}</td>
+ <td><a href="{{ m_url.get_absolute_url() }}">details</a></td>
+ </tr>{% endfor %}
+ </tbody>
+</table>