[prelude-cvslog] r10834 - in prelude-notify/trunk: . PreludeNotify

noreply at prelude-ids.org noreply at prelude-ids.org
Mon Aug 11 17:20:15 CEST 2008


Author: yoann
Date: 2008-08-11 17:20:15 +0200 (Mon, 11 Aug 2008)
New Revision: 10834

Modified:
   prelude-notify/trunk/PreludeNotify/ManagerConnection.py
   prelude-notify/trunk/PreludeNotify/pnconfig.py
   prelude-notify/trunk/prelude-notify
Log:
Handle profile change correctly.


Modified: prelude-notify/trunk/PreludeNotify/ManagerConnection.py
===================================================================
--- prelude-notify/trunk/PreludeNotify/ManagerConnection.py	2008-08-11 12:43:49 UTC (rev 10833)
+++ prelude-notify/trunk/PreludeNotify/ManagerConnection.py	2008-08-11 15:20:15 UTC (rev 10834)
@@ -1,49 +1,24 @@
 from PreludeEasy import ClientEasy, Connection, PreludeError
 from PreludeNotify import ErrorDialog
 
+import PreludeEasy
 import gobject
 import os
 
-class Session:
-        _addrevents = {}
 
-        def __init__(self, env, hbmonitor):
-                self.con = None
+class SingleConnection:
+        def __init__(self, env, client, addr):
                 self.env = env
-                self.hbmonitor = hbmonitor
+                self._client = client
+                self._con = Connection(addr)
+                self._iow = None
+                self.doConnect()
 
-        def doConnect(self):
-                try:
-                        self.con.Connect(self.env.client, ClientEasy.IDMEF_READ)
+        def __del__(self):
+                if self._iow:
+                        gobject.source_remove(self._iow)
 
-                #except PreludeError.PROFILE:
-                #        ErrorDialog.CreateProfile(c, ClientEasy.IDMEF_READ, env.config.get("idmef", "profile"))
-                #        return False
-
-                except PreludeError, err:
-                        ErrorDialog.ErrorDialog(str(err))
-                        return True
-
-                self.env.notify.run(None, None, "Manager Connection successfull", "With Prelude-Manager <b>%s</b>" % self.con.GetPeerAddr())
-
-        def handleDisconnect(self, err=""):
-                if err:
-                        err = ": " + err
-                self.env.notify.run("high", None, "Manager Connection interrupted", "With Prelude-Manager <b>%s</b>%s" % (self.con.GetPeerAddr(), err))
-                gobject.timeout_add(10000, self.doConnect)
-
-        def ConnectAddresses(self, manager_addresses):
-                manager_addresses = manager_addresses.split(',')
-                for addr in manager_addresses:
-                        self.con = Connection(addr)
-                        self.doConnect()
-                        self._addrevents[addr] = gobject.io_add_watch(self.con.GetFd(), gobject.IO_IN|gobject.IO_PRI|gobject.IO_HUP|gobject.IO_NVAL|gobject.IO_ERR, self.io_cb, self.con)
-
-        def delCon(self):
-                for addr in self._addrevents:
-                        gobject.source_remove(self._addrevents[addr])
-
-        def io_cb(self, fd, cond, con):
+        def _io_cb(self, fd, cond, con):
                 if cond & gobject.IO_IN:
                         try:
                                 idmef = con.RecvIDMEF()
@@ -52,7 +27,7 @@
                                 return False
 
                         if idmef.Get("heartbeat.create_time"):
-                                self.hbmonitor.heartbeat(idmef)
+                                self.env.hbmonitor.heartbeat(idmef)
 
                         elif (not self.env.criteria) or (self.env.criteria.match(idmef)):
                                 self.env.thresholding.thresholdMessage(idmef)
@@ -63,3 +38,36 @@
 
                 return True
 
+        def doConnect(self):
+                try:
+                        self._con.Connect(self._client, ClientEasy.IDMEF_READ)
+
+                except PreludeError, err:
+                        ErrorDialog.ErrorDialog(str(err))
+                        return True
+
+                self._iow = gobject.io_add_watch(self._con.GetFd(), gobject.IO_IN|gobject.IO_PRI|gobject.IO_HUP|gobject.IO_NVAL|gobject.IO_ERR, self._io_cb, self._con)
+                self.env.notify.run(None, None, "Manager Connection successfull", "With Prelude-Manager <b>%s</b>" % self._con.GetPeerAddr())
+
+        def handleDisconnect(self, err=""):
+                if err:
+                        err = ": " + err
+                self.env.notify.run("high", None, "Manager Connection interrupted", "With Prelude-Manager <b>%s</b>%s" % (self._con.GetPeerAddr(), err))
+                gobject.timeout_add(10000, self.doConnect)
+
+
+class Session:
+        _addrevents = {}
+
+        def __init__(self, env, profile):
+                print "init"
+                self.env = env
+                self.client = PreludeEasy.ClientEasy(profile, PreludeEasy.Client.IDMEF_READ)
+                self.client.SetFlags(0)
+                self._con_list = {}
+
+        def addAddress(self, addr):
+                self._con_list[addr] = SingleConnection(self.env, self.client, addr)
+
+        def delAddress(self, addr):
+                del(self._con_list[addr])

Modified: prelude-notify/trunk/PreludeNotify/pnconfig.py
===================================================================
--- prelude-notify/trunk/PreludeNotify/pnconfig.py	2008-08-11 12:43:49 UTC (rev 10833)
+++ prelude-notify/trunk/PreludeNotify/pnconfig.py	2008-08-11 15:20:15 UTC (rev 10834)
@@ -1,6 +1,7 @@
 import os
 import PreludeEasy
-
+import ErrorDialog
+from ManagerConnection import Session
 from PreludeNotify import siteconfig
 from ConfigParser import SafeConfigParser
 
@@ -9,70 +10,63 @@
 themespath = siteconfig.prefix + "/share/prelude-notify/themes/"
 
 class PnConfig:
-	cp = SafeConfigParser()
-	configname = ""
-	_configtable = {} # configtable['manager_addresses'] = ['oldvalues', 'newvalues']
-	def __init__(self):
-		self.configname = "%s/.prelude-notifyrc" % os.getenv("HOME")
-		if not os.path.exists(self.configname):
-			# Write the default configuration file
-			FILE = open(self.configname,"w")
-			FILE.write("[general]\n")
-			FILE.write("# Time in seconds for alert grouping\n")
-			FILE.write("threshold_timeout=5\n")
-			FILE.write("# Time in seconds before thinking you are away from keyboard and missing alerts\n")
-			FILE.write("x11idle_timeout=5\n")
-			FILE.write("[idmef]\n")
-			FILE.write("profile=prelude-notify\n")
-			FILE.write("filter=\n\n")
-			FILE.write("[manager]\n")
-			FILE.write("addresses=127.0.0.1\n\n")
-			FILE.write("[prewikka]\n")
-			FILE.write("url=http://localhost:8000\n\n")
-			FILE.write("[ui]\n")
-			FILE.write("theme=default\n")
-			FILE.write("browser=auto\n")
-			FILE.close()
-			self.cp.read(self.configname)
-		else:
-			self.cp.read(self.configname)
+        cp = SafeConfigParser()
+        configname = ""
+        _configtable = {} # configtable['manager_addresses'] = ['oldvalues', 'newvalues']
+        def __init__(self, env):
+                self.env = env
+                self.configname = "%s/.prelude-notifyrc" % os.getenv("HOME")
+                if not os.path.exists(self.configname):
+                        # Write the default configuration file
+                        FILE = open(self.configname,"w")
+                        FILE.write("[general]\n")
+                        FILE.write("# Time in seconds for alert grouping\n")
+                        FILE.write("threshold_timeout=5\n")
+                        FILE.write("# Time in seconds before thinking you are away from keyboard and missing alerts\n")
+                        FILE.write("x11idle_timeout=5\n")
+                        FILE.write("[idmef]\n")
+                        FILE.write("profile=prelude-notify\n")
+                        FILE.write("filter=\n\n")
+                        FILE.write("[manager]\n")
+                        FILE.write("addresses=127.0.0.1\n\n")
+                        FILE.write("[prewikka]\n")
+                        FILE.write("url=http://localhost:8000\n\n")
+                        FILE.write("[ui]\n")
+                        FILE.write("theme=default\n")
+                        FILE.write("browser=auto\n")
+                        FILE.close()
+                        self.cp.read(self.configname)
+                else:
+                        self.cp.read(self.configname)
 
-	def get(self, section, key):
-		return self.cp.get(section, key)
+        def get(self, section, key):
+                return self.cp.get(section, key)
 
-	def set(self, section, key, value):
-		# We create a config table to watch what changed
-		# and update accordingly
-		section_key = "%s_%s" % (section, key)
-		self._configtable[section_key] = []
-		self._configtable[section_key].append(self.get(section, key))
-		self._configtable[section_key].append(value)
+        def set(self, section, key, value):
+                # We create a config table to watch what changed
+                # and update accordingly
+                section_key = "%s_%s" % (section, key)
+                self._configtable[section_key] = []
+                self._configtable[section_key].append(self.get(section, key))
+                self._configtable[section_key].append(value)
 
-		self.cp.set(section, key, value)
-		FILE = open(self.configname,"w")
-		self.cp.write(FILE)
-		FILE.close()
 
-	def update(self):
-		for section_key in self._configtable:
-			if section_key == "idmef_profile":
-				old = self._configtable[section_key][0]
-				new = self._configtable[section_key][1]
-				if old != new:
-					manager_addr = self._configtable["manager_addresses"][1]
-					self.client = None
-					self.client = PreludeEasy.ClientEasy(new, PreludeEasy.Client.IDMEF_READ)
-					self.client.SetFlags(0)
-					self.client.Start()
+        def update(self):
+                for section_key in self._configtable:
+                        if section_key == "idmef_profile":
+                                old = self._configtable[section_key][0]
+                                new = self._configtable[section_key][1]
+                                if old != new:
+                                        manager_addr = self._configtable["manager_addresses"][1]
+                                        self.env.managercon = Session(self.env, new)
+                                        for addr in manager_addr.split(","):
+                                                self.env.managercon.addAddress(addr)
 
-					self.managercon.delCon()
-					self.managercon.ConnectAddresses(manager_addr)
+                        if section_key == "manager_addresses":
+                                old = self._configtable[section_key][0]
+                                new = self._configtable[section_key][1]
+                                if old != new:
+                                        self.env.managercon.delCon(old)
+                                        self.env.managercon.addCon(new)
 
-			if section_key == "manager_addresses":
-				old = self._configtable[section_key][0]
-				new = self._configtable[section_key][1]
-				if old != new:
-					self.managercon.delCon()
-					self.managercon.ConnectAddresses(new)
 
-

Modified: prelude-notify/trunk/prelude-notify
===================================================================
--- prelude-notify/trunk/prelude-notify	2008-08-11 12:43:49 UTC (rev 10833)
+++ prelude-notify/trunk/prelude-notify	2008-08-11 15:20:15 UTC (rev 10834)
@@ -14,12 +14,12 @@
 
 env = Env()
 env.gloop = gobject.MainLoop()
-env.config = pnconfig.PnConfig()
+env.config = pnconfig.PnConfig(env)
 env.notify = notifyaction.PreludeNotify(env)
+env.hbmonitor = heartbeat.HeartbeatMonitor(env)
 env.is_idle = False
 
 idle = x11idle.X11Idle()
-hbmonitor = heartbeat.HeartbeatMonitor(env)
 statusicon = pnstatusicon.PreludeStatusIcon(env.gloop, env.config)
 
 
@@ -65,18 +65,10 @@
 if not filter == "":
         env.criteria = PreludeEasy.IDMEFCriteria(filter)
 
+env.managercon = ManagerConnection.Session(env, env.config.get("idmef", "profile"))
+for addr in env.config.get("manager","addresses").split(","):
+        env.managercon.addAddress(addr)
 
-env.client = PreludeEasy.ClientEasy(env.config.get("idmef", "profile"), PreludeEasy.Client.IDMEF_READ)
-env.client.SetFlags(0)
-
-managercon = ManagerConnection.Session(env, hbmonitor)
-managercon.ConnectAddresses(env.config.get("manager","addresses"))
-
-env.config.managercon = managercon
-
-heartbeat_table = {}
-
-env.client.Start()
 gobject.timeout_add(1000, idle_timer_cb)
 env.gloop.run()
 




More information about the Prelude-cvslog mailing list