From: nlebreto Date: Thu, 7 Nov 2013 10:52:24 +0000 (+0100) Subject: fist release sfa interaction with bonfire X-Git-Tag: sfa-3.0-2-bonfire-r1-0^0 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=bb53c09f5512d5fdefaaa99b8053f485e22a4f3e fist release sfa interaction with bonfire --- 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 diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index dcd16880..0f60bce6 100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -14,6 +14,10 @@ import codecs import pickle import json import shutil + +# import bonfire.py for listing bonfire resources +import bonfire + from lxml import etree from StringIO import StringIO from optparse import OptionParser @@ -1139,6 +1143,9 @@ use this if you mean an authority instead""") save_rspec_to_file(value, options.file) if (self.options.raw is None) and (options.file is None): display_rspec(value, options.format) + #adding resources from bonfire + bonfire_resources = bonfire.bonsources() + display_rspec(bonfire_resources, options.format) return