#!/usr/bin/python

import snake.uri, snake.tree, snake.client
import os.path, sys, random

mirrorlist_uri = 'http://mirrors.fedoraproject.org/mirrorlist'

status_enum = ('ok','URI unreachable','bad/missing metadata','no images')

def getmirrors(repo,arch):
    fetcher = snake.uri._fetcherForURI(mirrorlist_uri)
    fetcher.prepareLocation(None)
    ml_data = fetcher.loadFile("?repo=%s&arch=%s" % (repo,arch), None)
    mirrorlist = list()
    for line in ml_data.readlines():
        if line.startswith('#'):
            continue
        mirrorlist.append(line.strip())
    fetcher.cleanupLocation()
    return mirrorlist

if __name__ == '__main__':
    urilist = list()
    status = 0
    if len(sys.argv) > 1:
        # Either check the URIs given...
        urilist = sys.argv[1:]
    else:
        # Or, if nothing was given, check the default rawhide mirrors
        for arch in ('i386','ppc','x86_64'):
            rawhide_mirrors = getmirrors('rawhide',arch)
            urilist.append(random.choice(rawhide_mirrors))

    for u in urilist:
        print "checking " + u
        r = snake.client.check_tree(u)
        if r == 0:
            t = snake.uri.uri_to_tree(u)
            msg = "%s: ok" % str(t)
        else:
            status = 1
            msg = status_enum[r]
        print "  " + msg 

    sys.exit(status)
