summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2014-11-08 13:43:59 -0600
committerDan McGee <dan@archlinux.org>2014-11-08 13:43:59 -0600
commiteb7172cd4d9d7af690b2be06e3f925d3023be71c (patch)
tree5ba9d30d7dc1e985e37d58ea0c04548b034ec75c
parentcd22bfd73b184888df13b194ecdf6e482b36c3fc (diff)
Convert some of URL details to Jinja2
Anytime we have a loop with >100 items, the Django template engine begins to be the bottleneck. This one is relatively straightforward to convert, and sets the stage for converting the mirror status page as well. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--mirrors/templatetags/jinja2.py31
-rw-r--r--packages/templatetags/jinja2.py1
-rw-r--r--templates/mirrors/url_details.html29
-rw-r--r--templates/mirrors/url_details_logs.html.jinja28
4 files changed, 60 insertions, 29 deletions
diff --git a/mirrors/templatetags/jinja2.py b/mirrors/templatetags/jinja2.py
new file mode 100644
index 00000000..5d47fe9b
--- /dev/null
+++ b/mirrors/templatetags/jinja2.py
@@ -0,0 +1,31 @@
+from django_jinja import library
+from markupsafe import Markup
+
+
+@library.global_function
+def country_flag(country):
+ if not country:
+ return ''
+ html = '<span class="fam-flag fam-flag-%s" title="%s"></span> ' % (
+ unicode(country.code).lower(), unicode(country.name))
+ return Markup(html)
+
+
+@library.filter
+def duration(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)
+ return '%d:%02d' % (hrs, mins)
+
+
+@library.filter
+def floatvalue(value, arg=2):
+ if value is None:
+ return u''
+ return '%.*f' % (arg, value)
+
+# vim: set ts=4 sw=4 et:
diff --git a/packages/templatetags/jinja2.py b/packages/templatetags/jinja2.py
index 22f9914b..88b59a96 100644
--- a/packages/templatetags/jinja2.py
+++ b/packages/templatetags/jinja2.py
@@ -68,5 +68,4 @@ def bug_report(package):
}
return link_encode(url, data)
-
# vim: set ts=4 sw=4 et:
diff --git a/templates/mirrors/url_details.html b/templates/mirrors/url_details.html
index 557a1b79..8b7646b8 100644
--- a/templates/mirrors/url_details.html
+++ b/templates/mirrors/url_details.html
@@ -1,5 +1,4 @@
{% extends "base.html" %}
-{% load cycle from future %}
{% load static from staticfiles %}
{% load mirror_status %}
{% load flags %}
@@ -57,34 +56,8 @@
{% endif %}
</table>
- <h3>Check Logs</h3>
+ {% include "mirrors/url_details_logs.html.jinja" %}
- <table id="check_logs" class="results">
- <thead>
- <tr>
- <th>Check Time</th>
- <th>Check Location</th>
- <th>Check IP</th>
- <th>Last Sync</th>
- <th>Delay (hh:mm)</th>
- <th>Duration (s)</th>
- <th>Success?</th>
- <th>Error Message</th>
- </tr>
- </thead>
- <tbody>
- {% for log in logs %}<tr class="{% cycle 'odd' 'even' %}">
- <td>{{ log.check_time|date:'Y-m-d H:i' }}</td>
- <td class="country">{% country_flag log.location.country %}{{ log.location.country.name }}</td>
- <td>{{ log.location.source_ip }}</td>
- <td>{{ log.last_sync|date:'Y-m-d H:i' }}</td>
- <td>{{ log.delay|duration }}</td>
- <td>{{ log.duration|floatvalue }}</td>
- <td>{{ log.is_success|yesno|capfirst }}</td>
- <td class="wrap">{{ log.error|linebreaksbr }}</td>
- </tr>{% endfor %}
- </tbody>
- </table>
</div>
{% endblock %}
diff --git a/templates/mirrors/url_details_logs.html.jinja b/templates/mirrors/url_details_logs.html.jinja
new file mode 100644
index 00000000..8f7c5644
--- /dev/null
+++ b/templates/mirrors/url_details_logs.html.jinja
@@ -0,0 +1,28 @@
+ <h3>Check Logs</h3>
+
+ <table id="check_logs" class="results">
+ <thead>
+ <tr>
+ <th>Check Time</th>
+ <th>Check Location</th>
+ <th>Check IP</th>
+ <th>Last Sync</th>
+ <th>Delay (hh:mm)</th>
+ <th>Duration (s)</th>
+ <th>Success?</th>
+ <th>Error Message</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for log in logs %}<tr class="{{ loop.cycle('odd', 'even') }}">
+ <td>{{ log.check_time|date('Y-m-d H:i') }}</td>
+ <td class="country">{{ country_flag(log.location.country) }}{{ log.location.country.name }}</td>
+ <td>{{ log.location.source_ip }}</td>
+ <td>{{ log.last_sync|date('Y-m-d H:i') }}</td>
+ <td>{{ log.delay()|duration }}</td>
+ <td>{{ log.duration|floatvalue }}</td>
+ <td>{{ log.is_success|yesno|capfirst }}</td>
+ <td class="wrap">{{ log.error|linebreaksbr }}</td>
+ </tr>{% endfor %}
+ </tbody>
+ </table>