19
19
from client import Client
20
20
from optparse import OptionParser
21
21
22
- configFile = '/etc/gelfDaemon.conf'
23
-
24
- user_host_re = re .compile ('^# User@Host: (?P<user>\w+)\[[^\]]+\] @ (?P<host>[a-zA-Z0-9.-]+)? \[(?P<ip>[0-9.]+)]' );
25
- stats_re = re .compile ('^# Query_time: (?P<query_time>\d+) \s*Lock_time: (?P<lock_time>\d+) \s*Rows_sent: (?P<sent>\d+) \s*Rows_examined: (?P<scanned>\d+)' )
26
- content_re = re .compile ('^[^#].*' )
27
-
28
-
29
-
30
22
# This class is used to collapse multi-line log files into a single line. You
31
23
# will want to populate regEx with something useful!
32
24
class Concatenate :
@@ -59,6 +51,8 @@ def GetConfig(self):
59
51
self .regEx = config .get (self .section , 'regex' )
60
52
self .facility = config .get (self .section , 'facility' )
61
53
self .shortMessageRegEx = config .get (self .section , 'short_message_regex' )
54
+ self .logparser = config .get (self .section , 'parser' )
55
+
62
56
try :
63
57
self .concatenateOn = config .get (self .section , 'concatenate_on' )
64
58
except ConfigParser .NoOptionError :
@@ -78,7 +72,7 @@ def ResetLog(self):
78
72
truncation"""
79
73
self .handle .close ()
80
74
self .handle = open (self .logPath , 'r' )
81
- self . position = self .handle .tell ()
75
+ self .position = self .handle .tell ()
82
76
83
77
def run (self ):
84
78
# The the paths and whatnot from the config file
@@ -93,10 +87,14 @@ def run(self):
93
87
sys .stderr .write ('%s: unknown error occurred, thread exiting\n ' %
94
88
sys .argv [0 ])
95
89
sys .exit ()
90
+
91
+ # Import the parser in a manner most disgusting...
92
+ module = __import__ ('parsers.' + self .logparser , globals (), locals (), [self .logparser ], - 1 )
93
+ logparser = module .Parser (client , self .logPath , self .logLevel )
96
94
97
95
# Instantiate the Concatenation class
98
96
cat = Concatenate ()
99
- message = {}
97
+
100
98
# Now for the thread's main loop
101
99
while True :
102
100
# We break if the queue is a non-zero size. This is pretty
@@ -115,36 +113,8 @@ def run(self):
115
113
else :
116
114
# Now ditch any blank lines, because they're dumbass
117
115
if line != '' :
118
- uh = st = ct = False
119
- # Check whether the log line matches our configured regex
120
- uh = user_host_re .match (line )
121
- st = stats_re .match (line )
122
- ct = content_re .match (line )
123
-
124
- if uh :
125
- if message :
126
- message ['short_message' ] = message ['full_message' ][:60 ]
127
- client .log (json .dumps (message ))
128
- message = {}
129
-
130
- message ['version' ] = '1.0'
131
- message ['facility' ] = self .facility
132
- message ['file' ] = self .logPath
133
- message ['level' ] = self .logLevel
134
- message ['host' ] = os .getenv ('HOSTNAME' )
135
- message ['_user' ] = uh .group ('user' )
136
- message ['_client_host' ] = uh .group ('host' )
137
- message ['_client_ip' ] = uh .group ('ip' )
138
- elif st :
139
- message ['_query_time' ] = st .group ('query_time' )
140
- message ['_lock_time' ] = st .group ('lock_time' )
141
- message ['_rows_sent' ] = st .group ('sent' )
142
- message ['_rows_examined' ] = st .group ('scanned' )
143
- elif ct :
144
- if message .has_key ('full_message' ):
145
- message ['full_message' ] += line
146
- else :
147
- message ['full_message' ] = line
116
+ logparser .parse_line (line )
117
+
148
118
149
119
150
120
if __name__ == '__main__' :
0 commit comments