added firewall checks and notices
[monitor.git] / web / MonitorWeb / monitorweb / controllers.py
index 5fe87b1..1ce95cc 100644 (file)
@@ -87,6 +87,8 @@ def prep_pcu_for_display(pcu):
        except:
                agg.loginbase = "unknown"
 
+       agg.pcuhist = HistoryPCURecord.query.get(pcu.plc_pcuid)
+
        agg.ports = format_ports(pcu.port_status, pcu.plc_pcu_stats['model'])
        agg.status = format_pcu_shortstatus(pcu)
 
@@ -177,7 +179,25 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                flash("Welcome To MyOps!")
                return dict(now=time.ctime())
 
-       @expose(template="monitorweb.templates.nodelist")
+       @expose(template="monitorweb.templates.nodelist", allow_json=True)
+       def node3(self, filter=None):
+               nhquery = HistoryNodeRecord.query.all()
+               query = []
+               for nh in nhquery:
+                       if filter:
+                               if nh.status == filter:
+                                       query.append(nh)
+                       else:
+                               query.append(nh)
+
+               rquery=[]
+               for q in query:
+                       fb = FindbadNodeRecord.get_latest_by(hostname=q.hostname)
+                       rquery.append(fb)
+
+               return dict(now=time.ctime(), query=rquery)
+
+       @expose(template="monitorweb.templates.nodelist", allow_json=True)
        def node2(self, filter=None):
                nhquery = HistoryNodeRecord.query.all()
                query = []
@@ -333,6 +353,81 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                        raise RuntimeError("Unknown action given")
                return
 
+       @expose(template="monitorweb.templates.simpleview")
+       def simpleview(self, **data):
+               return self.pre_view(**data)
+
+       @expose(template="monitorweb.templates.detailview")
+       def detailview(self, **data):
+               return self.pre_view(**data)
+
+       def pre_view(self, **data):
+               session.flush(); session.clear()
+
+               loginbase=None
+               hostname=None
+               pcuid=None
+               since=20
+
+               exceptions = None
+               sitequery=[]
+               nodequery=[]
+               pcuquery=[]
+               actions=[]
+
+               for key in data:
+                       print key, data[key]
+
+               if 'query' in data:
+                       obj = data['query']
+                       if len(obj.split(".")) > 1: hostname = obj
+                       else: loginbase=obj
+
+               if 'loginbase' in data:
+                       loginbase = data['loginbase']
+
+               if 'hostname' in data:
+                       hostname = data['hostname']
+
+               if 'pcuid' in data:
+                       try: pcuid = int(data['pcuid'])
+                       except: pcuid = None
+
+               if 'since' in data:
+                       try: since = int(since)
+                       except: since = 20
+
+               if pcuid:
+                       print "pcuid: %s" % pcuid
+                       pcu = FindbadPCURecord.get_latest_by(plc_pcuid=pcuid)
+                       loginbase = PlcSite.query.get(pcu.plc_pcu_stats['site_id']).plc_site_stats['login_base']
+
+               if hostname:
+                       node = FindbadNodeRecord.get_latest_by(hostname=hostname)
+                       loginbase = PlcSite.query.get(node.plc_node_stats['site_id']).plc_site_stats['login_base']
+
+               if loginbase:
+                       actions = ActionRecord.query.filter_by(loginbase=loginbase
+                                                       ).filter(ActionRecord.date_created >= datetime.now() - timedelta(since)
+                                                       ).order_by(ActionRecord.date_created.desc())
+                       actions = [ a for a in actions ]
+                       sitequery = [HistorySiteRecord.by_loginbase(loginbase)]
+                       # NOTE: because a single pcu may be assigned to multiple hosts,
+                       # track unique pcus by their plc_pcuid, then turn dict into list
+                       pcus = {}
+                       for node in FindbadNodeRecord.query.filter_by(loginbase=loginbase):
+                                       # NOTE: reformat some fields.
+                                       agg = prep_node_for_display(node)
+                                       nodequery += [agg]
+                                       if agg.pcu: 
+                                               pcus[agg.pcu.pcu.plc_pcuid] = agg.pcu
+
+                       for pcuid_key in pcus:
+                               pcuquery += [pcus[pcuid_key]]
+
+               return dict(sitequery=sitequery, pcuquery=pcuquery, nodequery=nodequery, actions=actions, since=since, exceptions=exceptions)
+
+
        # TODO: add form validation
        @expose(template="monitorweb.templates.pcuview")
        @exception_handler(nodeaction_handler,"isinstance(tg_exceptions,RuntimeError)")
@@ -407,7 +502,7 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
        @expose(template="monitorweb.templates.nodescanhistory")
        def nodescanhistory(self, hostname=None, length=10):
                try: length = int(length)
-               except: length = 10
+               except: length = 21
 
                fbnode = FindbadNodeRecord.get_by(hostname=hostname)
                # TODO: add links for earlier history if desired.
@@ -418,7 +513,9 @@ class Root(controllers.RootController, MonitorXmlrpcServer):
                        agg = prep_node_for_display(node, pcuhash=None, preppcu=False, asofdate=node.timestamp)
                        query.append(agg)
 
-               return dict(query=query, hostname=hostname)
+               if 'length' in request.params: 
+                       del request.params['length']
+               return dict(query=query, hostname=hostname, params=request.params)
 
        @expose(template="monitorweb.templates.nodehistory")
        def nodehistory(self, hostname=None):