From: Michael Tremer Date: Thu, 13 Feb 2025 20:13:55 +0000 (+0000) Subject: mirrors: Show preference on listing X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=300d2cbaaa2066ec0cdb5f1b7d29dcef6bf91366;p=pbs.git mirrors: Show preference on listing Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/mirrors.py b/src/buildservice/mirrors.py index 1dcd0815..692d9b46 100644 --- a/src/buildservice/mirrors.py +++ b/src/buildservice/mirrors.py @@ -308,6 +308,12 @@ class Mirror(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Once is enough break + def is_preferred_for_address(self, address): + # Lookup the client + network = self.backend.mirrors.location.lookup("%s" % address) + + return self.is_preferred_for_network(network) + def is_preferred_for_network(self, network): """ Returns True if this mirror is preferred for clients on the given network. diff --git a/src/templates/mirrors/macros.html b/src/templates/mirrors/macros.html index 919f01bd..f161f546 100644 --- a/src/templates/mirrors/macros.html +++ b/src/templates/mirrors/macros.html @@ -20,6 +20,9 @@ {% macro MirrorList(mirrors) %} {% for mirror in mirrors %} + {# Fetch the score of the mirror #} + {% set score = mirror.is_preferred_for_address(current_address) %} +
@@ -44,6 +47,19 @@
+ {# Show stars for preference #} + {% if score %} +
+ + {% for i in score | range %} + + + + {% endfor %} + +
+ {% endif %} +
{# IPv6 #} diff --git a/src/web/base.py b/src/web/base.py index 4a96160c..9540e135 100644 --- a/src/web/base.py +++ b/src/web/base.py @@ -6,6 +6,7 @@ import binascii import datetime import functools import http.client +import ipaddress import jinja2 import jinja2.ext import json @@ -221,7 +222,7 @@ class BaseHandler(tornado.web.RequestHandler): """ Returns the IP address the request came from. """ - return self.request.headers.get("X-Real-IP") or self.request.remote_ip + return ipaddress.ip_address(self.request.remote_ip) @property def user_agent(self): @@ -321,6 +322,7 @@ class BaseHandler(tornado.web.RequestHandler): # Add some Python built-ins "dir" : dir, "enumerate" : enumerate, + "range" : range, } return JinjaTemplateLoader(env) @@ -332,6 +334,7 @@ class BaseHandler(tornado.web.RequestHandler): ns = { "handler" : self, "request" : self.request, + "current_address" : self.current_address, "current_user" : self.current_user, "hostname" : self.request.host, "now" : datetime.datetime.now(),