]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blobdiff - www/webapp/handlers_download.py
Add new download load balancer.
[people/shoehn/ipfire.org.git] / www / webapp / handlers_download.py
index 80338216bda1044ea1610b219c75947efdf6e936..e0ccd895c0bdacd3d13f4914384ff5b039f8d56e 100644 (file)
@@ -1,9 +1,11 @@
 #!/usr/bin/python
 
+import logging
 import random
-
 import tornado.web
 
+import backend
+
 from handlers_base import *
 
 class DownloadsIndexHandler(BaseHandler):
@@ -66,10 +68,21 @@ class DownloadDevelopmentHandler(BaseHandler):
 
 class DownloadFileHandler(BaseHandler):
        def get(self, filename):
-               mirrors = self.mirrors.get_with_file(filename)
+               country_code = self.geoip.get_country(self.request.remote_ip)
+
+               self.set_header("Pragma", "no-cache")
+               self.set_header("X-Mirror-Client-Country", country_code)
+
+               mirrors = self.mirrors.get_with_file(filename, country=country_code)
+               if not mirrors:
+                       self.mirrors.get_with_file(filename)
+
+               if not mirrors:
+                       raise tornado.web.HTTPError(404, "File not found: %s" % filename)
 
-               # Choose a random one
-               # XXX need better metric here
                mirror = random.choice(mirrors)
 
-               self.redirect(mirror.url + filename)
+               self.redirect(mirror.url + filename[len(mirror.prefix):])
+
+               self.mirrors.db.execute("INSERT INTO log_download(filename, mirror, country_code) VALUES(%s, %s, %s)",
+                       filename, mirror.id, country_code)