X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc-kml.py;h=2a1ecf9ebd5fe6cd10a5852d236f64145e9a5543;hb=907351822dfd902bd8652795613e1211484ac2aa;hp=01522177137bbd359ebdec0881d20a95ba9f689d;hpb=aff4b0dc7a475d12fd4f4351075b84f7b7800116;p=myplc.git diff --git a/plc-kml.py b/plc-kml.py index 0152217..2a1ecf9 100755 --- a/plc-kml.py +++ b/plc-kml.py @@ -1,18 +1,29 @@ #!/usr/bin/env plcsh +# +# $Id$ # this script generates a kml file, located under the default location below # you should crontab this job from your myplc image # you can then use the googlemap.js javascript for creating your applet # more on this at http://svn.planet-lab.org/wiki/GooglemapSetup +# +# kml reference can be found at +# http://code.google.com/apis/kml/documentation/kmlreference.html +# import sys -default_output="/var/www/html/sites/sites.kml" +default_output = "/var/www/html/sites/sites.kml" +default_local_icon = "sites/google-local.png" +default_foreign_icon = "sites/google-foreign.png" +default_local_builtin = "palette-4.png" +default_foreign_builtin = "palette-3.png" class KmlMap: - def __init__ (self,outputname): + def __init__ (self,outputname,options): self.outputname=outputname + self.options=options def open (self): self.output = open(self.outputname,"w") @@ -22,25 +33,44 @@ class KmlMap: self.output.close() self.output = None + def write(self,string): + self.output.write(string.encode("UTF-8")) + + # mention local last + @staticmethod + def site_compare (s1,s2): + p1 = p2 = 0 + if s1['peer_id']: p1=s1['peer_id'] + if s2['peer_id']: p2=s2['peer_id'] + return p2-p1 + def refresh (self): self.open() self.write_header() # cache peers peers = GetPeers({},['peer_id','peername']) - for site in GetSites({'enabled':True,'is_public':True}): + all_sites = GetSites({'enabled':True,'is_public':True}) + all_sites.sort(KmlMap.site_compare) + for site in all_sites: self.write_site(site,peers) self.write_footer() self.close() - def write(self,string): - self.output.write(string.encode("UTF-8")) - +# initial placement is for europe - dunno how to tune that yet def write_header (self): self.write(""" PlanetLab Sites - This map shows all sites knows to the PlanetLab testbed. + +9.180821112577378 +44.43275321178062 +0 +5782133.196489797 +0 +-7.767386340832667 + + All the sites known to the PlanetLab testbed. """) def write_footer (self): @@ -63,75 +93,115 @@ class KmlMap: return site_id=site['site_id'] - site_name=site['name'] + name=site['name'] nb_nodes=len(site['node_ids']) nb_slices=len(site['slice_ids']) latitude=site['latitude'] longitude=site['longitude'] - baseurl='https://%s:443'%api.config.PLC_WWW_HOST - # name - name = '

%(site_name)s

'%locals() + apiurl='https://%s:443'%api.config.PLC_WWW_HOST + baseurl='http://%s'%api.config.PLC_WWW_HOST + peer_id=site['peer_id'] + + # open description description='' - -# iconfile="google-local.png" -# if site['peer_id']: -# iconfile="google-foreign.png" -# iconurl="http://%(base)s/misc/%(iconfile)s"%locals() -# xyspec="" - - if not site['peer_id']: - # local sites - iconurl="root://icons/palette-3.png" - xyspec="003232" + if not self.options.labels: + name="" + description="" + + # STYLE + if self.options.use_google_icons: + if not peer_id: + # local sites + iconfile=default_local_builtin + xyspec="12803232" + else: + # remote + iconfile=default_foreign_builtin + xyspec="16003232" + iconurl="root://icons/%(iconfile)s"%locals() else: - # remote - iconurl="root://icons/palette-3.png" - xyspec="3203232" - + if not peer_id: + iconfile=self.options.local_icon + else: + iconfile=self.options.foreign_icon + iconurl="%(baseurl)s/%(iconfile)s"%locals() + xyspec="" + iconspec="%(iconurl)s%(xyspec)s"%locals() + # set the camera 50km high template=""" + + %(latitude)f + %(longitude)f + 0 + relativeToGround + 50000. + %(longitude)f,%(latitude)f,0 """ self.write(template%locals()) - -# print 'name',name -# print 'description',description -# print template -# print template%locals() +def main () : + from optparse import OptionParser + usage = "Usage %prog [plcsh-options] [ -- options ]" + parser = OptionParser (usage=usage) + + parser.add_option("-o","--output",action="store",dest="output", + default=default_output, + help="output file - default is %s"%default_output) + parser.add_option("-n","--no-label",action="store_false",dest="labels", + default=True, + help="outputs only geographic positions, no labels") + parser.add_option("-c","--custom",action="store_false",dest="use_google_icons", + default=True, + help="use locally customized icons rather than the google-provided defaults") + parser.add_option("-l","--local",action="store",dest="local_icon", + default=default_local_icon, + help="set icon url to use for local sites marker -- default is %s"%default_local_icon) + parser.add_option("-f","--foreign",action="store",dest="foreign_icon", + default=default_foreign_icon, + help="set icon url to use for foreign sites marker -- default is %s"%default_foreign_icon) + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + KmlMap(options.output,options).refresh() +#################### if __name__ == "__main__": - if len(sys.argv) == 1: - out=default_output - elif len(sys.argv) == 2: - out=sys.argv[1] - else: - print "Usage: %s [output]"%sys.argv[0] - print "default output is %s"%default_output - sys.exit(1) - KmlMap(out).refresh() + main()