d4553dca58e2cb8bf31088673013d74b7cd8b439
[monitor.git] / web / MonitorWeb / monitorweb / controllers.py
1 import turbogears as tg
2 from turbogears import controllers, expose, flash
3 # from monitorweb import model
4 # import logging
5 # log = logging.getLogger("monitorweb.controllers")
6 from monitor.database.info.model import *
7 from pcucontrol import reboot
8
9 def format_ports(pcu):
10         retval = []
11         if pcu.port_status and len(pcu.port_status.keys()) > 0 :
12                 obj = reboot.model_to_object(pcu.plc_pcu_stats['model'])
13                 for port in obj.supported_ports:
14                         state = pcu.port_status[str(port)]
15                         retval.append( (port, state) )
16
17         if retval == []: 
18                 retval = [( "Closed/Filtered", "state" )]
19
20         return retval
21
22 def format_pcu_shortstatus(pcu):
23         status = "error"
24         if pcu.reboot_trial_status == str(0):
25                 status = "ok"
26         elif pcu.reboot_trial_status == "NetDown" or pcu.reboot_trial_status == "Not_Run":
27                 status = pcu.reboot_trial_status
28         else:
29                 status = "error"
30
31         return status
32
33 class Root(controllers.RootController):
34         @expose(template="monitorweb.templates.welcome")
35         def index(self):
36                 import time
37                 # log.debug("Happy TurboGears Controller Responding For Duty")
38                 flash("Your application is now running")
39                 return dict(now=time.ctime())
40
41         @expose(template="monitorweb.templates.nodelist")
42         def node(self, filter='BOOT'):
43                 import time
44                 fbquery = FindbadNodeRecord.get_all_latest()
45                 query = []
46                 filtercount = {'DOWN' : 0, 'BOOT': 0, 'DEBUG' : 0, 'neverboot' : 0, 'pending' : 0, 'all' : 0}
47                 for node in fbquery:
48                         if node.plc_pcuid:
49                                 pcu = FindbadPCURecord.get_latest_by(plc_pcuid=node.plc_pcuid).first()
50                                 if pcu:
51                                         node.pcu_status = pcu.reboot_trial_status
52                                 else:
53                                         node.pcu_status = "nodata"
54                                 node.pcu_short_status = format_pcu_shortstatus(pcu)
55
56                         else:
57                                 node.pcu_status = "nopcu"
58                                 node.pcu_short_status = "none"
59
60                         if node.kernel_version:
61                                 node.kernel = node.kernel_version.split()[2]
62                         else:
63                                 node.kernel = ""
64
65
66                         # NOTE: count filters
67                         if node.observed_status != 'DOWN':
68                                 filtercount[node.observed_status] += 1
69                         else:
70                                 if node.plc_node_stats['last_contact'] != None:
71                                         filtercount[node.observed_status] += 1
72                                 else:
73                                         filtercount['neverboot'] += 1
74
75                         # NOTE: apply filter
76                         if filter == node.observed_status:
77                                 if filter == "DOWN":
78                                         if node.plc_node_stats['last_contact'] != None:
79                                                 query.append(node)
80                                 else:
81                                         query.append(node)
82                         elif filter == "neverboot":
83                                 if node.plc_node_stats['last_contact'] == None:
84                                         query.append(node)
85                         elif filter == "pending":
86                                 # TODO: look in message logs...
87                                 pass
88                         elif filter == "all":
89                                 query.append(node)
90                                 
91                 return dict(now=time.ctime(), query=query, fc=filtercount)
92
93         @expose(template="monitorweb.templates.pculist")
94         def pcu(self, filter='all'):
95                 import time
96                 fbquery = FindbadPCURecord.get_all_latest()
97                 query = []
98                 filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0}
99                 for node in fbquery:
100
101                         # NOTE: count filter
102                         if node.reboot_trial_status == str(0):
103                                 filtercount['ok'] += 1
104                         elif node.reboot_trial_status == 'NetDown' or node.reboot_trial_status == 'Not_Run':
105                                 filtercount[node.reboot_trial_status] += 1
106                         else:
107                                 filtercount['pending'] += 1
108                                 
109                         node.ports = format_ports(node)
110                         node.status = format_pcu_shortstatus(node)
111
112                         # NOTE: apply filter
113                         if filter == "all":
114                                 query.append(node)
115                         elif filter == "ok" and node.reboot_trial_status == str(0):
116                                 query.append(node)
117                         elif filter == node.reboot_trial_status:
118                                 query.append(node)
119                         elif filter == "pending":
120                                 # TODO: look in message logs...
121                                 if node.reboot_trial_status != str(0) and \
122                                         node.reboot_trial_status != 'NetDown' and \
123                                         node.reboot_trial_status != 'Not_Run':
124
125                                         query.append(node)
126                                 
127                 return dict(query=query, fc=filtercount)
128
129         @expose(template="monitorweb.templates.sitelist")
130         def site(self, filter='all'):
131                 filtercount = {'good' : 0, 'down': 0, 'new' : 0, 'pending' : 0, 'all' : 0}
132                 fbquery = HistorySiteRecord.query.all()
133                 query = []
134                 for site in fbquery:
135                         # count filter
136                         filtercount['all'] += 1
137                         if site.new and site.slices_used == 0 and not site.enabled:
138                                 filtercount['new'] += 1
139                         elif not site.enabled:
140                                 filtercount['pending'] += 1
141                         else:
142                                 filtercount[site.status] += 1
143
144                         # apply filter
145                         if filter == "all":
146                                 query.append(site)
147                         elif filter == 'new' and site.new and site.slices_used == 0 and not site.enabled:
148                                 query.append(site)
149                         elif filter == "pending" and not site.enabled:
150                                 query.append(site)
151                         elif filter == site.status:
152                                 query.append(site)
153                                 
154                 return dict(query=query, fc=filtercount)
155
156         @expose(template="monitorweb.templates.pculist")
157         def action(self, filter='all'):
158                 filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0}
159                 return dict(query=[], fc=filtercount)