prewikka/master: Analyzer retrieval fixes and speedup.

[email protected] Wed, 10 Jun 2009 12:54:04 +0200 (CEST)
Newsgroups gmane.comp.security.ids.prelude.cvs
Message-ID <[email protected]>
commit 78826d2f202eed44ee222353ead7d13ec5b9ef0b
Author: Yoann Vandoorselaere <[email protected]>
Date:   Tue Jun 9 12:36:20 2009 +0200

    Analyzer retrieval fixes and speedup.
    
    Make the database requests used to generate the agents view simpler,
    which should provide a minor speedup. Make the getAnalyzer() function
    simpler. Prevent failure in case an analyzer has no analyzerID set.
    
    Fixes #350.


========================================

 prewikka/IDMEFDatabase.py |   47 ++++++++++++++++++--------------------------
 prewikka/views/sensor.py  |    4 +--
 2 files changed, 20 insertions(+), 31 deletions(-)

========================================

diff --git a/prewikka/IDMEFDatabase.py b/prewikka/IDMEFDatabase.py
index 3b7a562..25c6e88 100644
--- a/prewikka/IDMEFDatabase.py
+++ b/prewikka/IDMEFDatabase.py
@@ -520,34 +520,25 @@ class IDMEFDatabase:
         ident = self.getLastHeartbeatIdent(analyzerid)
         heartbeat = self.getHeartbeat(ident)
 
-        index = 0
-        while True:
-            if not heartbeat["heartbeat.analyzer(%d).name" % (index + 1)]:
-                break
-            index += 1
-
-        analyzer = { }
-        analyzer["analyzerid"] = analyzerid
-        analyzer["name"] = heartbeat.get("heartbeat.analyzer(%d).name" % index)
-        analyzer["model"] = heartbeat.get("heartbeat.analyzer(%d).model" % index)
-        analyzer["version"] = heartbeat.get("heartbeat.analyzer(%d).version" % index)
-        analyzer["class"] = heartbeat.get("heartbeat.analyzer(%d).class" % index)
-        analyzer["ostype"] = heartbeat.get("heartbeat.analyzer(%d).ostype" % index)
-        analyzer["osversion"] = heartbeat.get("heartbeat.analyzer(%d).osversion" % index)
-        analyzer["node_name"] = heartbeat.get("heartbeat.analyzer(%d).node.name" % index)
-        analyzer["node_location"] = heartbeat.get("heartbeat.analyzer(%d).node.location" % index)
+        path = []
+        analyzer = {}
+        analyzerd = { "path": path, "node_addresses": [], "node_name": None, "node_location": None }
 
-        i = 0
-        analyzer["node_addresses"] = [ ]
-        while True:
-            address = heartbeat.get("heartbeat.analyzer(%d).node.address(%d).address" % (index, i))
-            if not address:
-                break
-            analyzer["node_addresses"].append(address)
-            i += 1
+        for a in heartbeat["analyzer"]:
+            path.append(a["analyzerid"])
+            analyzer = a
+
+        for column in "analyzerid", "name", "model", "version", "class", "ostype", "osversion":
+            analyzerd[column] = analyzer.get(column, None)
+
+        analyzerd["node_name"] = analyzer.get("node.name")
+        analyzerd["node_location"] = analyzer.get("node.location")
+
+        for addr in analyzer.get("node.address.address", []):
+            analyzerd["node_addresses"].append(addr)
 
-        analyzer["last_heartbeat_time"] = heartbeat.get("heartbeat.create_time")
-        analyzer["last_heartbeat_interval"] = heartbeat["heartbeat.heartbeat_interval"]
-        analyzer["last_heartbeat_status"] = heartbeat.getAdditionalData("Analyzer status")
+        analyzerd["last_heartbeat_time"] = heartbeat.get("heartbeat.create_time")
+        analyzerd["last_heartbeat_interval"] = heartbeat.get("heartbeat.heartbeat_interval")
+        analyzerd["last_heartbeat_status"] = heartbeat.getAdditionalData("Analyzer status")
 
-        return analyzer
+        return analyzerd
diff --git a/prewikka/views/sensor.py b/prewikka/views/sensor.py
index bff7eaa..4236da7 100644
--- a/prewikka/views/sensor.py
+++ b/prewikka/views/sensor.py
@@ -99,7 +99,6 @@ class SensorListing(view.View):
         self._heartbeat_count = int(env.config.general.getOptionValue("heartbeat_count", 30))
         self._heartbeat_error_margin = int(env.config.general.getOptionValue("heartbeat_error_margin", 3))
 
-
     def render(self):
         analyzers = { }
 
@@ -111,8 +110,7 @@ class SensorListing(view.View):
         locations = { }
         nodes = { }
 
-        for analyzer_path in self.env.idmef_db.getAnalyzerPaths():
-            analyzerid = analyzer_path[-1]
+        for analyzerid in self.env.idmef_db.getAnalyzerids():
             analyzer = self.env.idmef_db.getAnalyzer(analyzerid)
 
             parameters = { "analyzerid": analyzer["analyzerid"] }
_______________________________________________
Prelude-cvslog site list
[email protected]
http://lists.prelude-ids.org/mailman/listinfo/prelude-cvslog