[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