5 api = plc.PLC(auth.auth, auth.plc)
12 from nodecommon import *
14 import config as configmodule
16 from config import config as cfg
17 from optparse import OptionParser
19 parser = OptionParser()
20 parser.set_defaults(site=None,
25 parser.add_option("", "--site", dest="site", metavar="login_base",
26 help="The sitename to present")
27 parser.add_option("", "--findbad", dest="findbad", action="store_true",
28 help="Re-run findbad on the nodes we're going to check before acting.")
29 parser.add_option("", "--enable", dest="enable", action="store_true",
31 parser.add_option("", "--disable", dest="disable", action="store_true",
36 from unified_model import *
37 def color_sitestatus(status):
40 elif status == "down":
46 def pf_print_siteinfo(sitename):
47 pf = PersistFlags(sitename, 1, db='site_persistflags')
48 if pf.checkattr('last_changed'):
49 print " Checked: %s" % diff_time(pf.last_checked)
50 print "\t status | nodes up / total | last_change"
51 print "\t %6s | %8s / %5s | %s" % \
52 ( color_sitestatus(pf.status), pf.nodes_up, pf.nodes_total, diff_time(pf.last_changed) )
54 print "no such site in pf"
58 def plc_print_siteinfo(plcsite):
60 print " Checked: %s" % time.ctime()
61 print "\t login_base | used / max | enabled | last_updated "
62 print "\t %13s | %4s / %3s | %7s | %12s" % \
63 (plcsite['login_base'],
64 len(plcsite['slice_ids']),
65 plcsite['max_slices'],
67 diff_time(plcsite['last_updated']))
70 nodes = api.GetNodes(plcsite['node_ids'])
71 print " Checked: %s" % time.ctime()
72 print "\t host | state | obs | created | updated | last_contact "
74 fbnode = fb['nodes'][plcnode['hostname']]['values']
75 plcnode['state'] = color_boot_state(get_current_state(fbnode))
76 print "\t %37s | %5s | %5s | %11.11s | %11.11s | %12s " % \
77 (plcnode['hostname'], color_boot_state(plcnode['boot_state']), plcnode['state'],
78 diff_time(plcnode['date_created']), diff_time(plcnode['last_updated']),
79 diff_time(plcnode['last_contact']))
82 fb = database.dbLoad("findbad")
83 act_all = database.dbLoad("act_all")
85 for site in config.args:
88 plc_siteinfo = api.GetSites({'login_base': config.site})[0]
89 url = "https://www.planet-lab.org/db/sites/index.php?site_pattern="
90 plc_siteinfo['url'] = url + plc_siteinfo['login_base']
93 # rerun findbad with the nodes in the given nodes.
96 nodes = api.GetNodes(plc_siteinfo['node_ids'], ['hostname'])
97 nodes = [ n['hostname'] for n in nodes ]
98 configmodule.setFileFromList(file, nodes)
99 os.system("./findbad.py --cachenodes --debug=0 --dbname=findbad --increment --nodelist %s" % file)
101 print "%(login_base)s %(url)s" % plc_siteinfo
102 pf_print_siteinfo(config.site)
103 plc_print_siteinfo(plc_siteinfo)
106 api.UpdateSite(config.site, {'enabled' : True})
108 api.UpdateSite(config.site, {'enabled' : False})