in loggy.py [0:0]
def process(self, event):
path = event.src_path
if (event.event_type == "moved") and (path in self.file_handles):
try:
self.file_handles[path].close()
except IOError:
pass
del self.file_handles[path]
inode = self.inodes_path[path]
del self.inodes[inode]
elif (
(event.event_type == "modified" or event.event_type == "created")
and (path.find(".gz") == -1)
and path not in self.file_handles
):
try:
idata = os.stat(path)
inode = idata.st_ino
if inode not in self.inodes:
# print("Opening: " + path)
self.file_handles[path] = open(path, "r")
# print("Started watching %s (%u)" % (path, inode))
self.file_handles[path].seek(0, 2)
self.inodes[inode] = path
self.inodes_path[path] = inode
except IOError:
pass
elif event.event_type == "modified" and path in self.file_handles:
rd = 0
data = ""
try:
while True:
line = self.file_handles[path].readline()
if not line:
break
else:
rd += len(line)
data += line
self.parse_line(path, data)
except (IOError, UnicodeDecodeError):
try:
self.file_handles[path].close()
except IOError:
pass
del self.file_handles[path]
inode = self.inodes_path[path]
del self.inodes[inode]
# File deleted? (close handle)
elif event.event_type == "deleted":
if path in self.file_handles:
try:
self.file_handles[path].close()
except IOError:
pass
del self.file_handles[path]
inode = self.inodes_path[path]
del self.inodes[inode]