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}
54 pcu = FindbadPCURecord.get_latest_by(plc_pcuid=node.plc_pcuid).first()
56 node.pcu_status = pcu.reboot_trial_status
58 node.pcu_status = "nodata"
59 node.pcu_short_status = format_pcu_shortstatus(pcu)
62 node.pcu_status = "nopcu"
63 node.pcu_short_status = "none"
65 if node.kernel_version:
66 node.kernel = node.kernel_version.split()[2]
72 if node.observed_status != 'DOWN':
73 filtercount[node.observed_status] += 1
75 if node.plc_node_stats['last_contact'] != None:
76 filtercount[node.observed_status] += 1
78 filtercount['neverboot'] += 1
81 if filter == node.observed_status:
83 if node.plc_node_stats['last_contact'] != None:
87 elif filter == "neverboot":
88 if node.plc_node_stats['last_contact'] == None:
90 elif filter == "pending":
91 # TODO: look in message logs...
96 return dict(now=time.ctime(), query=query, fc=filtercount)
98 @expose(template="monitorweb.templates.pculist")
99 def pcu(self, filter='all'):
101 fbquery = FindbadPCURecord.get_all_latest()
103 filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0}
107 if node.reboot_trial_status == str(0):
108 filtercount['ok'] += 1
109 elif node.reboot_trial_status == 'NetDown' or node.reboot_trial_status == 'Not_Run':
110 filtercount[node.reboot_trial_status] += 1
112 filtercount['pending'] += 1
115 node.loginbase = site_id2lb[node.plc_pcu_stats['site_id']]
117 node.loginbase = "unknown"
119 node.ports = format_ports(node)
120 node.status = format_pcu_shortstatus(node)
125 elif filter == "ok" and node.reboot_trial_status == str(0):
127 elif filter == node.reboot_trial_status:
129 elif filter == "pending":
130 # TODO: look in message logs...
131 if node.reboot_trial_status != str(0) and \
132 node.reboot_trial_status != 'NetDown' and \
133 node.reboot_trial_status != 'Not_Run':
137 return dict(query=query, fc=filtercount)
139 @expose(template="monitorweb.templates.sitelist")
140 def site(self, filter='all'):
141 filtercount = {'good' : 0, 'down': 0, 'new' : 0, 'pending' : 0, 'all' : 0}
142 fbquery = HistorySiteRecord.query.all()
146 filtercount['all'] += 1
147 if site.new and site.slices_used == 0 and not site.enabled:
148 filtercount['new'] += 1
149 elif not site.enabled:
150 filtercount['pending'] += 1
152 filtercount[site.status] += 1
157 elif filter == 'new' and site.new and site.slices_used == 0 and not site.enabled:
159 elif filter == "pending" and not site.enabled:
161 elif filter == site.status:
164 return dict(query=query, fc=filtercount)
166 @expose(template="monitorweb.templates.pculist")
167 def action(self, filter='all'):
168 filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0}
169 return dict(query=[], fc=filtercount)