Scripts
Script for extracting the maximum hourly transfer rate, latency and quality over a certain link.
#!/usr/bin/python
#
import sys,os.path
import string,time
import urllib,urllib2
import xml.dom.minidom
from xml.dom.minidom import Node
def GetTransferResults(fromsite,tosite,nfiles,starttime):
now=int(time.time())
url="https://cmsweb.cern.ch/phedex/datasvc/xml/debug/TransferHistory?from="+fromsite+"&to="+tosite+"&binwidth=300&starttime="+str(starttime)+"&endtime="+str(now)
xmldata = urllib2.urlopen(url).read()
dom = xml.dom.minidom.parseString(xmldata)
done={}
fail={}
rate={}
for node in dom.getElementsByTagName('transfer'):
time_bin=node.attributes["timebin"].value
done[time_bin]=node.attributes["done_files"].value
fail[time_bin]=node.attributes["fail_files"].value
rate[time_bin]=node.attributes["rate"].value
sumdone=0
sumfail=0
lastkey=0
maxrate=0.
moving_average=[0,0,0,0,0,0,0,0,0,0,0,0]
for key in sorted(done.iterkeys()):
rate_5m=float(str(rate[key]))
moving_average.pop(0)
moving_average.append(rate_5m)
avg_1h=sum(moving_average)/12.
if ( avg_1h > maxrate ) :
maxrate=avg_1h
sumdone+=int(str(done[key]))
sumfail+=int(str(fail[key]))
lastkey=int(str(key))
if ( sumdone >= int(str(nfiles)) ) :
break
if ( int(str(key)) > now ) :
break
maxrate/=(1024.*1024)
latency=float(int(lastkey)-int(starttime))/3600.
try :
quality=float(sumdone)/float(sumdone+sumfail)*100
except ZeroDivisionError :
quality=-1
print "Testing",fromsite,"to",tosite
print "Number of files transfered......",sumdone
print "Maximum hourly transfer rate....",("%.1f" % maxrate),"MiB/s"
print "Latency.........................",("%.1f" % latency),"h"
print "Quality transfer success rate...",("%.1f" % quality),"%"
return
fromsite=sys.argv[1]
tosite=sys.argv[2]
nfiles=sys.argv[3]
starttime=sys.argv[4]
GetTransferResults(fromsite,tosite,nfiles,starttime)
--
JamesLetts - 2011/05/31
Topic revision: r9 - 2011/06/02 - 06:34:37 -
JamesLetts