import argparse
import gettext
+import logging
+import logging.handlers
import lzma
import os
import random
# Load our location module
import location
-import logging
-logging.basicConfig(level=logging.INFO)
-
DATABASE_FILENAME = "test.db.xz"
MIRRORS = (
"https://location.ipfire.org/databases/",
"https://people.ipfire.org/~ms/location/",
)
+def setup_logging(level=logging.INFO):
+ l = logging.getLogger("location-downloader")
+ l.setLevel(level)
+
+ # Log to console
+ h = logging.StreamHandler()
+ h.setLevel(logging.DEBUG)
+ l.addHandler(h)
+
+ # Log to syslog
+ h = logging.handlers.SysLogHandler(address="/dev/log",
+ facility=logging.handlers.SysLogHandler.LOG_DAEMON)
+ h.setLevel(logging.INFO)
+ l.addHandler(h)
+
+ # Format syslog messages
+ formatter = logging.Formatter("location-downloader[%(process)d]: %(message)s")
+ h.setFormatter(formatter)
+
+ return l
+
+# Initialise logging
+log = setup_logging()
+
# i18n
def _(singular, plural=None, n=None):
if plural:
def _send_request(self, req, **kwargs):
# Log request headers
- logging.debug("HTTP %s Request to %s" % (req.method, req.host))
- logging.debug(" URL: %s" % req.full_url)
- logging.debug(" Headers:")
+ log.debug("HTTP %s Request to %s" % (req.method, req.host))
+ log.debug(" URL: %s" % req.full_url)
+ log.debug(" Headers:")
for k, v in req.header_items():
- logging.debug(" %s: %s" % (k, v))
+ log.debug(" %s: %s" % (k, v))
try:
res = urllib.request.urlopen(req, **kwargs)
except urllib.error.HTTPError as e:
# Log response headers
- logging.debug("HTTP Response: %s" % e.code)
- logging.debug(" Headers:")
+ log.debug("HTTP Response: %s" % e.code)
+ log.debug(" Headers:")
for header in e.headers:
- logging.debug(" %s: %s" % (header, e.headers[header]))
+ log.debug(" %s: %s" % (header, e.headers[header]))
# Handle 304
if e.code == 304:
raise e
# Log response headers
- logging.debug("HTTP Response: %s" % res.code)
- logging.debug(" Headers:")
+ log.debug("HTTP Response: %s" % res.code)
+ log.debug(" Headers:")
for k, v in res.getheaders():
- logging.debug(" %s: %s" % (k, v))
+ log.debug(" %s: %s" % (k, v))
return res
# Nothing to do when the database on the server is up to date
except NotModifiedError:
- logging.info("Local database is up to date")
+ log.info("Local database is up to date")
return
# Catch decompression errors
except lzma.LZMAError as e:
- logging.warning("Could not decompress downloaded file: %s" % e)
+ log.warning("Could not decompress downloaded file: %s" % e)
continue
# XXX what do we catch here?
# Enable debug logging
if args.debug:
- logging.basicConfig(level=logging.DEBUG)
+ log.setLevel(logging.DEBUG)
# Print usage if no action was given
if not "func" in args:
# If no file could be downloaded, log a message
except FileNotFoundError as e:
- logging.error("Could not download a new database")
+ log.error("Could not download a new database")
return 1
# If we have not received a new file, there is nothing to do
# Check if the downloaded file is newer
if db.created_at <= created_at:
- logging.warning("Downloaded database is older than the current version")
+ log.warning("Downloaded database is older than the current version")
return 1
- logging.info("Downloaded new database from %s" % (time.strftime(
+ log.info("Downloaded new database from %s" % (time.strftime(
"%a, %d %b %Y %H:%M:%S GMT", time.gmtime(db.created_at),
)))