#!/usr/bin/python
##############################################################################
# Copyright (c) 2016 Ericsson AB and others.
# stefan.k.berg@ericsson.com
# jonas.bjurel@ericsson.com
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################

# Select closest fuel mirror based on latency measured with ping.
# Failsafe: The us1 mirror

from subprocess import Popen,PIPE
import re
from operator import itemgetter

mirrors = [ "us1", "cz1" ]
FNULL = open('/dev/null', 'w')
try:
    re_avg = re.compile(r'.* = [^/]*/([^/]*).*')

    pingtime = {}
    for mirror in mirrors:
        fqdn = "mirror.seed-"+mirror+".fuel-infra.org"
        pingtime[fqdn] = 0
        pipe = Popen("ping -c 3 " + fqdn + " | tail -1",shell = True, stdout=PIPE, stderr=FNULL)
        avg  = pipe.communicate()[0]
        pipe.stdout.close()
        pingtime[fqdn] = float(re_avg.split(avg)[1])

    print sorted(pingtime.items(), key=itemgetter(1))[0][0]
except:
    print "mirror.seed-"+mirrors[0]+".fuel-infra.org"