X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=web%2FMonitorWeb%2Fmonitorweb%2Fcontrollers.py;h=be94316d554b4635047bcc6657fa0527361877b7;hb=786822939c1d244e30172b997f91dd4aafb2ff24;hp=d2978da5ea5825ed8ab49b7a8ec2eb8ac58786a9;hpb=c7af7beec47fba7545ec649035a3ebf20f2ad3ee;p=monitor.git diff --git a/web/MonitorWeb/monitorweb/controllers.py b/web/MonitorWeb/monitorweb/controllers.py index d2978da..be94316 100644 --- a/web/MonitorWeb/monitorweb/controllers.py +++ b/web/MonitorWeb/monitorweb/controllers.py @@ -3,15 +3,26 @@ from turbogears import controllers, expose, flash # from monitorweb import model # import logging # log = logging.getLogger("monitorweb.controllers") +import re from monitor.database.info.model import * +from monitor.database.zabbixapi.model import * +from monitor.database.dborm import zab_session as session +from monitor.database.dborm import zab_metadata as metadata + from pcucontrol import reboot +from monitor.wrapper.plccache import plcdb_id2lb as site_id2lb +from monitor.wrapper.plccache import plcdb_hn2lb as site_hn2lb def format_ports(pcu): retval = [] if pcu.port_status and len(pcu.port_status.keys()) > 0 : obj = reboot.model_to_object(pcu.plc_pcu_stats['model']) for port in obj.supported_ports: - state = pcu.port_status[str(port)] + try: + state = pcu.port_status[str(port)] + except: + state = "unknown" + retval.append( (port, state) ) if retval == []: @@ -45,20 +56,30 @@ class Root(controllers.RootController): query = [] filtercount = {'DOWN' : 0, 'BOOT': 0, 'DEBUG' : 0, 'neverboot' : 0, 'pending' : 0, 'all' : 0} for node in fbquery: + # NOTE: reformat some fields. if node.plc_pcuid: pcu = FindbadPCURecord.get_latest_by(plc_pcuid=node.plc_pcuid).first() if pcu: node.pcu_status = pcu.reboot_trial_status else: node.pcu_status = "nodata" + node.pcu_short_status = format_pcu_shortstatus(pcu) + else: node.pcu_status = "nopcu" + node.pcu_short_status = "none" if node.kernel_version: node.kernel = node.kernel_version.split()[2] else: node.kernel = "" + try: + node.loginbase = site_id2lb[node.plc_node_stats['site_id']] + except: + node.loginbase = "unknown" + + # NOTE: count filters if node.observed_status != 'DOWN': filtercount[node.observed_status] += 1 @@ -102,7 +123,11 @@ class Root(controllers.RootController): else: filtercount['pending'] += 1 - print reboot.pcu_name(node.plc_pcu_stats) + try: + node.loginbase = site_id2lb[node.plc_pcu_stats['site_id']] + except: + node.loginbase = "unknown" + node.ports = format_ports(node) node.status = format_pcu_shortstatus(node) @@ -123,12 +148,93 @@ class Root(controllers.RootController): return dict(query=query, fc=filtercount) - @expose(template="monitorweb.templates.pculist") + @expose(template="monitorweb.templates.sitelist") def site(self, filter='all'): - filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0} - return dict(query=[], fc=filtercount) + filtercount = {'good' : 0, 'down': 0, 'new' : 0, 'pending' : 0, 'all' : 0} + fbquery = HistorySiteRecord.query.all() + query = [] + for site in fbquery: + # count filter + filtercount['all'] += 1 + if site.new and site.slices_used == 0 and not site.enabled: + filtercount['new'] += 1 + elif not site.enabled: + filtercount['pending'] += 1 + else: + filtercount[site.status] += 1 - @expose(template="monitorweb.templates.pculist") + # apply filter + if filter == "all": + query.append(site) + elif filter == 'new' and site.new and site.slices_used == 0 and not site.enabled: + query.append(site) + elif filter == "pending" and not site.enabled: + query.append(site) + elif filter == site.status: + query.append(site) + + return dict(query=query, fc=filtercount) + + @expose(template="monitorweb.templates.actionlist") def action(self, filter='all'): - filtercount = {'ok' : 0, 'NetDown': 0, 'Not_Run' : 0, 'pending' : 0, 'all' : 0} - return dict(query=[], fc=filtercount) + session.bind = metadata.bind + filtercount = {'active' : 0, 'acknowledged': 0, 'all' : 0} + # With Acknowledgement + sql_ack = 'SELECT DISTINCT h.host,t.description,t.priority,t.lastchange,a.message '+ \ + ' FROM triggers t,hosts h,items i,functions f, hosts_groups hg,escalations e,acknowledges a ' + \ + ' WHERE f.itemid=i.itemid ' + \ + ' AND h.hostid=i.hostid ' + \ + ' AND hg.hostid=h.hostid ' + \ + ' AND t.triggerid=f.triggerid ' + \ + ' AND t.triggerid=e.triggerid ' + \ + ' AND a.eventid=e.eventid ' + \ + ' AND t.status=' + str(defines.TRIGGER_STATUS_ENABLED) + \ + ' AND i.status=' + str(defines.ITEM_STATUS_ACTIVE) + \ + ' AND h.status=' + str(defines.HOST_STATUS_MONITORED) + \ + ' AND t.value=' + str(defines.TRIGGER_VALUE_TRUE) + \ + ' ORDER BY t.lastchange DESC'; + + # WithOUT Acknowledgement + sql_noack = 'SELECT DISTINCT h.host,t.description,t.priority,t.lastchange,e.eventid ' + \ + ' FROM triggers t,hosts h,items i,functions f, hosts_groups hg,escalations e,acknowledges a ' + \ + ' WHERE f.itemid=i.itemid ' + \ + ' AND h.hostid=i.hostid ' + \ + ' AND hg.hostid=h.hostid ' + \ + ' AND t.triggerid=f.triggerid ' + \ + ' AND t.triggerid=e.triggerid ' + \ + ' AND e.eventid not in (select eventid from acknowledges) ' + \ + ' AND t.status=' + str(defines.TRIGGER_STATUS_ENABLED) + \ + ' AND i.status=' + str(defines.ITEM_STATUS_ACTIVE) + \ + ' AND h.status=' + str(defines.HOST_STATUS_MONITORED) + \ + ' AND t.value=' + str(defines.TRIGGER_VALUE_TRUE) + \ + ' ORDER BY t.lastchange DESC'; + # for i in session.execute(sql): print i + + query=[] + replace = re.compile(' {.*}') + for sql,ack in [(sql_ack,True), (sql_noack,False)]: + result = session.execute(sql) + for row in result: + try: + newrow = [ site_hn2lb[row[0].lower()] ] + [ r for r in row ] + except: + print site_hn2lb.keys() + newrow = [ "unknown" ] + [ r for r in row ] + + newrow[2] = replace.sub("", newrow[2]) # strip {.*} expressions + + # NOTE: filter count + filtercount['all'] += 1 + if not ack: # for unacknowledged + filtercount['active'] += 1 + if filter == 'active': + query.append(newrow) + else: + filtercount['acknowledged'] += 1 + if filter == 'acknowledged': + query.append(newrow) + + if filter != "acknowledged" and filter != "active": + query.append(newrow) + + return dict(query=query, fc=filtercount)