def run(self): if not self.runable: print 'Process not runable, returning' return False # Drop privileges os.setgroups([]) os.setgid(self.gid) os.setuid(self.uid) ppid = os.getppid() while True: try: line = self.work_queue.get(timeout=0.5) if not line: 'Parent process is asking us to exit' return True line = line.decode('utf-8').encode('ASCII', 'ignore') except KeyboardInterrupt: return False except UnicodeDecodeError: print 'Unicode Error, skipping entry' continue except QueueEmpty: if os.getppid() != ppid: return False continue try: entry = SyslogEntry.from_line(line) except pyparsing.exceptions.Exception: continue self.process_entry(entry)
def test_details(self): se = SyslogEntry.from_line(valids[0]) self.assertEqual(se.msg, """'su root' failed for lonvick on /dev/pts/8""") self.assertEqual(se.timestamp.year, 2003) self.assertEqual(se.hostname, 'mymachine.example.com') self.assertEqual(se.msgid, 'ID47') se = SyslogEntry.from_line(valids[3]) self.assertEqual(len(se.structured_data.elements), 2) self.assertEqual(len(se.structured_data.elements[0].sd_params), 3) self.assertEqual(len(se.structured_data.elements[1].sd_params), 1) se = SyslogEntry.from_line(valids[4]) self.assertEqual(len(se.structured_data.elements), 1) self.assertEqual( len(list(se.structured_data.elements[0].sd_params.allitems())), 6) self.assertEqual( len(list(se.structured_data.elements[0].sd_params.getall("file"))), 2) se = SyslogEntry.from_line(valids[5]) self.assertEqual(str(se), valids[5]) se = SyslogEntry(prival=165, version=1, timestamp=datetime(2003, 10, 11, 22, 14, 15, 3000), hostname='mymachine.example.com', app_name='evntslog', procid=None, msgid='ID47', structured_data=StructuredData([ SDElement('exampleSDID@32473', [('iut', '3'), ('eventSource', 'Application'), ('eventID', '1011')]) ]), msg=u'An application event log entry...') self.assertEqual(str(se), valids[6]) se = SyslogEntry.from_line(valids[7]) self.assertEqual(se.timestamp.year, 2011)
def handle(self): if self.server.use_tls: return self.handle_tls() while True: line = self.connection.readline() if not line: break syslog_entry = SyslogEntry.from_line(line) if syslog_entry: self.handle_entry(syslog_entry) else: self.handle_error(line)
def _process_request(self, request): """Processing of the log entry. Later this will do more work""" syslog_dict = {} try: logging.debug("INCOMING REQ: %s" % request) syslog_entry = SyslogEntry.from_line(request) syslog_dict = syslog_entry.__dict__ syslog_dict = get_severity_and_facility(syslog_dict) except Exception as out: logging.error(out) logging.debug("Processing request...") self.send_to_amqp(syslog_dict)
def handle_tls(self): buf = '' while True: r = self.request.recv(1) if not r: break # EOF if r != ' ': buf += r else: try: msg_len = int(buf) except: # Protocol error return buf = '' for i in xrange(msg_len): buf += self.request.recv(1) syslog_entry = SyslogEntry.from_line(buf) buf = '' if syslog_entry is None: self.handle_error(buf) self.handle_entry(syslog_entry)
def test_class(self): for v in valids: se = SyslogEntry.from_line(v) self.assertTrue(se is not None)