1 import turbogears as tg
2 from turbogears import controllers, expose, flash
3 # from monitorweb import model
5 # log = logging.getLogger("monitorweb.controllers")
6 from monitor.database.info.model import *
7 from pcucontrol import reboot
8 from monitor.wrapper.plccache import plcdb_id2lb as site_id2lb
10 def format_ports(pcu):
12 if pcu.port_status and len(pcu.port_status.keys()) > 0 :
13 obj = reboot.model_to_object(pcu.plc_pcu_stats['model'])
14 for port in obj.supported_ports:
16 state = pcu.port_status[str(port)]
20 retval.append( (port, state) )
23 retval = [( "Closed/Filtered", "state" )]
27 def format_pcu_shortstatus(pcu):
29 if pcu.reboot_trial_status == str(0):
31 elif pcu.reboot_trial_status == "NetDown" or pcu.reboot_trial_status == "Not_Run":
32 status = pcu.reboot_trial_status
38 class Root(controllers.RootController):
39 @expose(template="monitorweb.templates.welcome")
42 # log.debug("Happy TurboGears Controller Responding For Duty")
43 flash("Your application is now running")
44 return dict(now=time.ctime())
46 @expose(template="monitorweb.templates.nodelist")
47 def node(self, filter='BOOT'):
49 fbquery = FindbadNodeRecord.get_all_latest()
51 filtercount = {'DOWN' : 0, 'BOOT': 0, 'DEBUG' : 0, 'neverboot' : 0, 'pending' : 0, 'all' : 0}
53 # NOTE: reformat some fields.
55 pcu = FindbadPCURecord.get_latest_by(plc_pcuid=node.plc_pcuid).first()
57 node.pcu_status = pcu.reboot_trial_status
59 node.pcu_status = "nodata"
60 node.pcu_short_status = format_pcu_shortstatus(pcu)
63 node.pcu_status = "nopcu"
64 node.pcu_short_status = "none"
66 if node.kernel_version:
67 node.kernel = node.kernel_version.split()[2]
72 node.loginbase = site_id2lb[node.plc_node_stats['site_id']]
74 node.loginbase = "unknown"
78 if node.observed_status != 'DOWN':
79 filtercount[node.observed_status] += 1
81 if node.plc_node_stats['last_contact'] != None:
82 filtercount[node.observed_status] += 1
84 filtercount['neverboot'] += 1
87 if filter == node.observed_status:
89 if node.plc_node_stats['last_contact'] != None:
93 elif filter == "neverboot":
94 if node.plc_node_stats['last_contact'] == None:
96 elif filter == "pending":
97 # TODO: look in message logs...
102 return dict(now=time.ctime(), query=query, fc=filtercount)
104 @expose(template="monitorweb.templates.pculist")
105 def pcu(self, filter='all'):
107 fbquery = FindbadPCURecord.get_all_latest()
109 filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0}
113 if node.reboot_trial_status == str(0):
114 filtercount['ok'] += 1
115 elif node.reboot_trial_status == 'NetDown' or node.reboot_trial_status == 'Not_Run':
116 filtercount[node.reboot_trial_status] += 1
118 filtercount['pending'] += 1
121 node.loginbase = site_id2lb[node.plc_pcu_stats['site_id']]
123 node.loginbase = "unknown"
125 node.ports = format_ports(node)
126 node.status = format_pcu_shortstatus(node)
131 elif filter == "ok" and node.reboot_trial_status == str(0):
133 elif filter == node.reboot_trial_status:
135 elif filter == "pending":
136 # TODO: look in message logs...
137 if node.reboot_trial_status != str(0) and \
138 node.reboot_trial_status != 'NetDown' and \
139 node.reboot_trial_status != 'Not_Run':
143 return dict(query=query, fc=filtercount)
145 @expose(template="monitorweb.templates.sitelist")
146 def site(self, filter='all'):
147 filtercount = {'good' : 0, 'down': 0, 'new' : 0, 'pending' : 0, 'all' : 0}
148 fbquery = HistorySiteRecord.query.all()
152 filtercount['all'] += 1
153 if site.new and site.slices_used == 0 and not site.enabled:
154 filtercount['new'] += 1
155 elif not site.enabled:
156 filtercount['pending'] += 1
158 filtercount[site.status] += 1
163 elif filter == 'new' and site.new and site.slices_used == 0 and not site.enabled:
165 elif filter == "pending" and not site.enabled:
167 elif filter == site.status:
170 return dict(query=query, fc=filtercount)
172 @expose(template="monitorweb.templates.pculist")
173 def action(self, filter='all'):
174 filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0}
175 return dict(query=[], fc=filtercount)