X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fbonfire.py;fp=sfa%2Fclient%2Fbonfire.py;h=5f026737c1e78139be430bb512108b971a72fd64;hb=bb53c09f5512d5fdefaaa99b8053f485e22a4f3e;hp=0000000000000000000000000000000000000000;hpb=9eba9ad0796e65b1ddcf7b2671431bee304f6bc0;p=sfa.git diff --git a/sfa/client/bonfire.py b/sfa/client/bonfire.py new file mode 100644 index 00000000..5f026737 --- /dev/null +++ b/sfa/client/bonfire.py @@ -0,0 +1,101 @@ +#tested with federica 18 +#yum -y install python-pip +#pip install requests +import requests +import xml.etree.ElementTree as ET + +# helping functions +# ########################################################## # +def callcurl(url): + r = requests.get(url, verify=False, auth=('nlebreto', 'GDRU_23tc$')) + if r.status_code == 200: + return r.text + +def buildpagehttp(part1, part2): + res = [] + for page in locations: + res.append(part1 + page + "/" + part2) + return res + +def boucle(itemname, xmltree, hashrspec, name): + for item in xmltree.findall(itemname): + hashrspec[name.text][itemname] = item.text + +def jfedfeat(bonfires, pageurl): + pageforstatus = callcurl(pageurl) + xmlreduit = ET.fromstring(pageforstatus) + hashrspec = {} + itemshost = ["DISK_USAGE", "MEM_USAGE", "CPU_USAGE", "MAX_DISK", "MAX_MEM", "MAX_CPU", + "FREE_DISK", "FREE_MEM", "FREE_CPU", "FREE_MEM", "FREE_CPU", "USED_DISK", + "USED_MEM", "USED_CPU", "RUNNING_VMS" + ] + # retrieve info for xml tree + for host in xmlreduit.findall('HOST'): + for name in host.findall('NAME'): + hashrspec[name.text] = {"name" : name.text} + for hostshare in host.findall('HOST_SHARE'): + for itemshostname in itemshost: + boucle(itemshostname, hostshare, hashrspec, name) + # jfed feature + for clef in hashrspec: + bonfires.append("" + + " " + + " " + + " " + + " " + + " " + + " ") + for infohost in itemshost: + bonfires.append(" ") + bonfires.append("") + +def remove_needless_txt(txt): + txt=txt.replace("\n","\n") + txt=txt.replace("\n","\n") + return txt + +# parameters +# ########################################################## # +locations = ["fr-inria", "be-ibbt", "uk-epcc"] +urlnetworks = buildpagehttp("https://api.integration.bonfire.grid5000.fr/locations/", "networks") +urlstorages = buildpagehttp("https://api.integration.bonfire.grid5000.fr/locations/", "storages") +urlcomputes = buildpagehttp("https://api.integration.bonfire.grid5000.fr/locations/", "computes") + +# main code +# ########################################################## # + +# list for all bonfire resources +def bonsources(): + bonfires = [] + bonfires.append("") + manag_exp = remove_needless_txt(callcurl("https://api.bonfire-project.eu/managed_experiments")) + bonfires.append(manag_exp) + bonfires.append("") + jfedfeat(bonfires, "http://frontend.bonfire.grid5000.fr/one-status.xml") +# jfedfeat(bonfires, "http://bonfire.epcc.ed.ac.uk/logs/one-status.xml") + jfedfeat(bonfires, "http://bonfire.psnc.pl/one-status.xml") + jfedfeat(bonfires, "http://nebulosus.rus.uni-stuttgart.de/one-status.xml") + bonfires.append("") + for xmlnetworks in urlnetworks: + bonfires.append(remove_needless_txt(callcurl(xmlnetworks))) + bonfires.append("") + for xmlstorages in urlstorages: + bonfires.append(remove_needless_txt(callcurl(xmlstorages))) + bonfires.append("") + for xmlcomputes in urlcomputes: + bonfires.append(remove_needless_txt(callcurl(xmlcomputes))) + bonfires.append("") + exp = callcurl("https://api.integration.bonfire.grid5000.fr/experiments") + rexp = remove_needless_txt(exp) + bonfires.append(rexp) + bonfires.append("") + reserv = callcurl("https://api.integration.bonfire.grid5000.fr/locations/fr-inria/reservations") + rreserv = remove_needless_txt(reserv) + bonfires.append(rreserv) + bonfires.append("") + bonfires.append("") + bonfires = "\n".join(bonfires) + bonfires = bonfires.replace("\n\n","") + return bonfires