From a66c1941b27e2a94e39846ad9d466b21ab507673 Mon Sep 17 00:00:00 2001 From: jbohman Date: Thu, 10 Jun 2010 01:32:09 +0200 Subject: [PATCH] Added a naive clf parser. --- config.yaml | 3 +- logsandra/monitor/monitor.py | 14 ++++++- logsandra/monitor/parsers/__init__.py | 0 logsandra/monitor/parsers/clf.py | 51 ++++++++++++++++++++++++++ logsandra/monitor/watchers/inotify.py | 1 + logsandra/monitor/watchers/standard.py | 24 ++++++------ 6 files changed, 77 insertions(+), 16 deletions(-) create mode 100644 logsandra/monitor/parsers/__init__.py create mode 100644 logsandra/monitor/parsers/clf.py diff --git a/config.yaml b/config.yaml index 813f331..e9d7456 100644 --- a/config.yaml +++ b/config.yaml @@ -11,5 +11,4 @@ cassandra_port: 9160 paths: - name: ~/coding/cassandra/access.log recursive: False - - name: /var/log/testing/ - recurisve: True + format: "%h %l %u %t %r %s %O %{Referer}i %{User-Agent}i" diff --git a/logsandra/monitor/monitor.py b/logsandra/monitor/monitor.py index 2cf196c..809a45b 100755 --- a/logsandra/monitor/monitor.py +++ b/logsandra/monitor/monitor.py @@ -9,14 +9,17 @@ #except ImportError: from watchers.standard import StandardWatcher as Watcher +from parsers.clf import ClfParser + class Reader(object): def __init__(self, tail=False): self.tail = tail self.seek_data = {} + self.parser = {} - def callback(self, filename): + def callback(self, filename, data): if os.path.basename(filename).startswith('.'): return False @@ -29,7 +32,14 @@ def callback(self, filename): file_handler.seek(0, os.SEEK_END) for line in file_handler: - print line.strip() + line = line.strip() + + if filename not in self.parser: + self.parser[filename] = ClfParser(data['format']) + + result = self.parser[filename].parse_line(line) + + print result self.seek_data[filename] = file_handler.tell() file_handler.close() diff --git a/logsandra/monitor/parsers/__init__.py b/logsandra/monitor/parsers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/logsandra/monitor/parsers/clf.py b/logsandra/monitor/parsers/clf.py new file mode 100644 index 0000000..466444b --- /dev/null +++ b/logsandra/monitor/parsers/clf.py @@ -0,0 +1,51 @@ +import re +import dateutil.parser + +clf = { + '%h': r'(?P\S+)', + '%l': r'\S+', + '%u': r'(?P\S+)', + '%t': r'\[(?P