From 909d081411ff7b16e0e1d1affed736a38999129e Mon Sep 17 00:00:00 2001 From: Brian Pellin Date: Tue, 4 Jan 2005 22:20:09 +0000 Subject: Auto merged 2005/01/04 16:20:00-06:00 (none)!bpellin Added throttling for multiple events in file watching. (Logical change 1.173) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@752 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Generator.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'src/lib/Server/Generator.py') diff --git a/src/lib/Server/Generator.py b/src/lib/Server/Generator.py index 1d77c2b9a..485976f16 100644 --- a/src/lib/Server/Generator.py +++ b/src/lib/Server/Generator.py @@ -1,9 +1,11 @@ '''This is a baseclass not intended for instantiation''' -__revision__ = '$Revision$' +__revision__ = '$Revision: 1.34 $' from elementtree.ElementTree import XML from syslog import syslog, LOG_ERR, LOG_INFO from xml.parsers.expat import ExpatError +from os import stat +from stat import ST_MTIME class GeneratorError(Exception): '''Generator runtime error used to inform upper layers of internal generator failure''' @@ -80,15 +82,28 @@ class FileBacked(object): object.__init__(self) self.data = '' self.name = name - self.HandleEvent() + self.mtime = 0 + #self.readonce = 0 + #self.HandleEvent() def HandleEvent(self, event=None): '''Read file upon update''' + oldmtime = self.mtime try: - self.data = file(self.name).read() - except IOError: - syslog(LOG_ERR, "Failed to read file %s" % (self.name)) - self.Index() + self.mtime = stat(self.name)[ST_MTIME] + except OSError: + syslog(LOG_ERR, "Failed to stat file %s" % (self.name)) + + if self.mtime > oldmtime: + try: + # if self.readonce == 0: + # self.readonce = 1 + # else: + # syslog(LOG_INFO, "Updated file %s" % (self.name)) + self.data = file(self.name).read() + self.Index() + except IOError: + syslog(LOG_ERR, "Failed to read file %s" % (self.name)) def Index(self): '''Update local data structures based on current file state''' -- cgit v1.2.3-1-g7c22