Fix for session.clear for newer versions of SQLAlchemy.
[monitor.git] / web / MonitorWeb / monitorweb / controllers.py
index 3d68fe6..c540888 100644 (file)
@@ -11,6 +11,7 @@ import os
 from monitor.database.info.model import *
 #from monitor.database.zabbixapi.model import *
 from monitor_xmlrpc import MonitorXmlrpcServer
+from controllers_local import LocalExtensions
 
 from monitor import util
 from monitor import reboot
@@ -23,6 +24,13 @@ from monitor.wrapper.plccache import plcdb_hn2lb as site_hn2lb
 
 from monitorweb.templates.links import *
 
+def session_clear_all():
+    session.flush()
+    try: 
+        session.expunge_all() 
+    except AttributeError: # SQLAlchemy < 0.5.1 
+        session.clear() 
+
 class ObjectQueryFields(widgets.WidgetsList):
        """The WidgetsList defines the fields of the form."""
        pass
@@ -59,6 +67,7 @@ class NodeQueryFields(widgets.WidgetsList):
        uptime = widgets.CheckBox(label="Uptime")
        traceroute = widgets.CheckBox(label="Traceroute")
        port_status = widgets.CheckBox(label="Port Status")
+       plc_pcuid = widgets.CheckBox(label="PCU ID")
        rpms = widgets.CheckBox(label="RPM")
        rpmvalue = widgets.TextField(label="RPM Pattern")
 
@@ -264,7 +273,7 @@ def prep_node_for_display(node, pcuhash=None, preppcu=True, asofdate=None):
        return agg
 
 
-class Root(controllers.RootController, MonitorXmlrpcServer):
+class Root(controllers.RootController, MonitorXmlrpcServer, LocalExtensions):
        @expose(template="monitorweb.templates.welcome")
        def index(self):
                # log.debug("Happy TurboGears Controller Responding For Duty")
@@ -340,7 +349,8 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                                        agg = node.__dict__.copy()
                                else:
                                        agg = node.to_dict()
-                               agg.update(agg['plc_node_stats'])
+                                if agg['plc_node_stats']:
+                                        agg.update(agg['plc_node_stats'])
                                if agg['install_date']:
                                        agg['install_date'] = time.mktime(time.strptime(agg['install_date'], "%a %b %d %H:%M:%S %Y"))
                                if agg['kernel_version']:
@@ -350,7 +360,8 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                                if 'rpmvalue' in data and 'rpms' in data:
                                        if agg['rpms']:
                                                rpm_list = agg['rpms'].split()
-                                               rpm_list = filter(lambda x: data['rpmvalue'] in x, rpm_list)
+                                               rpm_list = filter(lambda x: re.match(data['rpmvalue'], x, re.I),
+                                                                  rpm_list)
                                                agg['rpms'] = " ".join(rpm_list)
 
                                query.append(agg)
@@ -383,7 +394,7 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
        def nodeslow(self, filter='boot'):
                print "NODE------------------"
                print "befor-len: ", len( [ i for i in session] )
-               session.flush(); session.clear()
+        session_clear_all()
                print "after-len: ", len( [ i for i in session] )
                fbquery = FindbadNodeRecord.get_all_latest()
                query = []
@@ -507,7 +518,7 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
 
 
        def pre_view(self, **data):
-               session.flush(); session.clear()
+        session_clear_all()
 
                loginbase=None
                loginbase_list=[]
@@ -608,7 +619,7 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
        @expose(template="monitorweb.templates.pcuview")
        @exception_handler(nodeaction_handler,"isinstance(tg_exceptions,RuntimeError)")
        def pcuviewold(self, loginbase=None, pcuid=None, hostname=None, since=20, **data):
-               session.flush(); session.clear()
+        session_clear_all()
                sitequery=[]
                pcuquery=[]
                nodequery=[]
@@ -667,7 +678,7 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                query = []
                if pcu_id:
                        fbnode = HistoryPCURecord.get_by(plc_pcuid=pcu_id)
-                       l = fbnode.versions[-100:]
+                       l = fbnode.versions[-1000:]
                        l.reverse()
                        for pcu in l:
                                #prep_node_for_display(node)
@@ -712,18 +723,20 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                if loginbase:
                        fbsite = HistorySiteRecord.get_by(loginbase=loginbase)
                        # TODO: add links for earlier history if desired.
-                       l = fbsite.versions[-100:]
+                       l = fbsite.versions[-1000:]
                        l.reverse()
                        for site in l:
                                query.append(site)
                return dict(query=query, loginbase=loginbase)
 
 
+       @expose("cheetah:monitorweb.templates.pculist_plain", as_format="plain", 
+               accept_format="text/plain", content_type="text/plain")
        @expose(template="monitorweb.templates.pculist")
        def pcu(self, filter='all'):
                print "PCUVIEW------------------"
                print "befor-len: ", len( [ i for i in session] )
-               session.flush(); session.clear()
+        session_clear_all()
                print "after-len: ", len( [ i for i in session] )
                fbquery = FindbadPCURecord.get_all_latest()
                query = []
@@ -761,7 +774,7 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
        def site(self, filter='all'):
                print "SITE------------------"
                print "befor-len: ", len( [ i for i in session] )
-               session.flush(); session.clear()
+        session_clear_all()
                print "after-len: ", len( [ i for i in session] )
                filtercount = {'good' : 0, 'down': 0, 'online':0, 'offline' : 0, 'new' : 0, 'pending' : 0, 'all' : 0}
                fbquery = HistorySiteRecord.query.all()
@@ -896,3 +909,4 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                print "redirecting 3"
 
                return dict()
+