#! /usr/bin/python # ver 1.2 import urllib2 import sys import time from optparse import OptionParser def createOptParser(): parser = OptionParser() parser.add_option("-s", "--server-number", default=5, dest="server_number", help="amount of servers to print, 0 for all") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="be verbose") return parser def timeCmd(cmd): before = time.time(); try: cmd(); except KeyboardInterrupt, ki: raise ki except Exception, e: print '\tERROR: ', e return 99999999 return time.time() - before; def talkToServer(serverUrl): opener = urllib2.build_opener() tmp = opener.open(serverUrl).read() def getFuncToTime(serverUrl): return lambda : talkToServer(serverUrl) def cmpPairBySecond(p1, p2): if p1[1] == p2[1]: return 0 if p1[1] < p2[1]: return -1 return 1 if __name__ == "__main__": parser = createOptParser() (options, args) = parser.parse_args() if len(args) != 1: parser.print_help() sys.exit(0) fl = open(args[0], 'r') serverToTime = {} print 'Querying servers, it might take some time ' for ln in fl.readlines(): splitted = ln.split('=') if splitted[0].strip() != 'Server': continue serverUrl = splitted[1] if serverUrl[-1] == '\n': serverUrl = serverUrl[0:-1] if not options.verbose: print '*', else: print serverUrl, '...', #sys.stdout.flush() serverToTime[serverUrl] = timeCmd(getFuncToTime(serverUrl)) if options.verbose: print '\t',serverToTime[serverUrl] items = serverToTime.items() items.sort(cmpPairBySecond) numberOfItemsToShow = int(options.server_number) if numberOfItemsToShow == 0: numberOfItemsToShow = len(items) if len(items) > 0: if not options.verbose: print print '======================================' print 'Servers sorted by time' print '======================================' for i in items[0:numberOfItemsToShow]: print i[0], ': ', i[1]