diff options
author | PyroPeter <abi1789@googlemail.com> | 2010-10-10 19:23:51 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2010-10-13 18:42:51 -0500 |
commit | 28cc96af28bfb1318f97f37ab05b09dc9e5d11c5 (patch) | |
tree | 5faaea920d53cd7442553d2a6e1d5a2cbdd2186b | |
parent | c057b079c72a2329d8f365e07a0dce506c80e26b (diff) |
Add mirrorresolv manage.py command
Dan:
* Fix up some style issues such as spacing between operators
* Ensure one failed lookup doesn't crash the whole script
* Be silent out of the box if there are no errors, just like mirrorcheck
Signed-off-by: PyroPeter <abi1789@googlemail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | mirrors/management/commands/mirrorresolv.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/mirrors/management/commands/mirrorresolv.py b/mirrors/management/commands/mirrorresolv.py new file mode 100644 index 00000000..bcb24a52 --- /dev/null +++ b/mirrors/management/commands/mirrorresolv.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +""" +mirrorresolv command + +Poll all mirror URLs and determine whether they have IPv4 and/or IPv6 addresses +available. + +Usage: ./manage.py mirrorresolv +""" + +from django.core.management.base import NoArgsCommand + +import sys +import logging +from urlparse import urlparse +import socket + +from mirrors.models import MirrorUrl + +logging.basicConfig( + level=logging.WARNING, + format='%(asctime)s -> %(levelname)s: %(message)s', + datefmt='%Y-%m-%d %H:%M:%S', + stream=sys.stderr) +logger = logging.getLogger() + +class Command(NoArgsCommand): + help = "Runs a check on all active mirror URLs to determine if they are reachable via IPv4 and/or v6." + + def handle_noargs(self, **options): + v = int(options.get('verbosity', 0)) + if v == 0: + logger.level = logging.ERROR + elif v == 1: + logger.level = logging.WARNING + elif v == 2: + logger.level = logging.DEBUG + + return resolve_mirrors() + +def resolve_mirrors(): + logger.debug("requesting list of mirror URLs") + for mirrorurl in MirrorUrl.objects.filter(mirror__active=True): + try: + hostname = urlparse(mirrorurl.url).hostname + logger.debug("resolving %3i (%s)" % (mirrorurl.id, hostname)) + info = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM) + families = [x[0] for x in info] + mirrorurl.has_ipv4 = socket.AF_INET in families + mirrorurl.has_ipv6 = socket.AF_INET6 in families + mirrorurl.save() + except socket.error, e: + logger.warn("error resolving %s: %s" % (hostname, e)) + +# vim: set ts=4 sw=4 et: |