|
|
|
@ -42,44 +42,48 @@ class DateDetector:
|
|
|
|
|
self.__defTemplate = DateStrptime() |
|
|
|
|
|
|
|
|
|
def addDefaultTemplate(self): |
|
|
|
|
# standard |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Month Day Hour:Minute:Second") |
|
|
|
|
template.setRegex("^\S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%b %d %H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# asctime |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Weekday Month Day Hour:Minute:Second Year") |
|
|
|
|
template.setRegex("\S{3} \S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2} \d{4}") |
|
|
|
|
template.setPattern("%a %b %d %H:%M:%S %Y") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# simple date |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Year/Month/Day Hour:Minute:Second") |
|
|
|
|
template.setRegex("\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%Y/%m/%d %H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# Apache format [31/Oct/2006:09:22:55 -0000] |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Day/Month/Year:Hour:Minute:Second") |
|
|
|
|
template.setRegex("\d{2}/\S{3}/\d{4}:\d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%d/%b/%Y:%H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# Exim 2006-12-21 06:43:20 |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Year-Month-Day Hour:Minute:Second") |
|
|
|
|
template.setRegex("\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%Y-%m-%d %H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# TAI64N |
|
|
|
|
template = DateTai64n() |
|
|
|
|
template.setName("TAI64N") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# Epoch |
|
|
|
|
template = DateEpoch() |
|
|
|
|
template.setName("Epoch") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
try: |
|
|
|
|
self.__lock.acquire() |
|
|
|
|
# standard |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Month Day Hour:Minute:Second") |
|
|
|
|
template.setRegex("^\S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%b %d %H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# asctime |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Weekday Month Day Hour:Minute:Second Year") |
|
|
|
|
template.setRegex("\S{3} \S{3}\s{1,2}\d{1,2} \d{2}:\d{2}:\d{2} \d{4}") |
|
|
|
|
template.setPattern("%a %b %d %H:%M:%S %Y") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# simple date |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Year/Month/Day Hour:Minute:Second") |
|
|
|
|
template.setRegex("\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%Y/%m/%d %H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# Apache format [31/Oct/2006:09:22:55 -0000] |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Day/Month/Year:Hour:Minute:Second") |
|
|
|
|
template.setRegex("\d{2}/\S{3}/\d{4}:\d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%d/%b/%Y:%H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# Exim 2006-12-21 06:43:20 |
|
|
|
|
template = DateStrptime() |
|
|
|
|
template.setName("Year-Month-Day Hour:Minute:Second") |
|
|
|
|
template.setRegex("\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}") |
|
|
|
|
template.setPattern("%Y-%m-%d %H:%M:%S") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# TAI64N |
|
|
|
|
template = DateTai64n() |
|
|
|
|
template.setName("TAI64N") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
# Epoch |
|
|
|
|
template = DateEpoch() |
|
|
|
|
template.setName("Epoch") |
|
|
|
|
self.__templates.append(template) |
|
|
|
|
finally: |
|
|
|
|
self.__lock.release() |
|
|
|
|
|
|
|
|
|
def getTemplates(self): |
|
|
|
|
return self.__templates |
|
|
|
@ -100,14 +104,15 @@ class DateDetector:
|
|
|
|
|
if self.__defTemplate.isValid(): |
|
|
|
|
return self.__defTemplate.matchDate(line) |
|
|
|
|
else: |
|
|
|
|
self.__lock.acquire() |
|
|
|
|
for template in self.__templates: |
|
|
|
|
match = template.matchDate(line) |
|
|
|
|
if not match == None: |
|
|
|
|
self.__lock.release() |
|
|
|
|
return match |
|
|
|
|
self.__lock.release() |
|
|
|
|
return None |
|
|
|
|
try: |
|
|
|
|
self.__lock.acquire() |
|
|
|
|
for template in self.__templates: |
|
|
|
|
match = template.matchDate(line) |
|
|
|
|
if not match == None: |
|
|
|
|
return match |
|
|
|
|
return None |
|
|
|
|
finally: |
|
|
|
|
self.__lock.release() |
|
|
|
|
|
|
|
|
|
def getTime(self, line): |
|
|
|
|
if self.__defTemplate.isValid(): |
|
|
|
@ -117,19 +122,20 @@ class DateDetector:
|
|
|
|
|
except ValueError: |
|
|
|
|
return None |
|
|
|
|
else: |
|
|
|
|
self.__lock.acquire() |
|
|
|
|
for template in self.__templates: |
|
|
|
|
try: |
|
|
|
|
date = template.getDate(line) |
|
|
|
|
if date == None: |
|
|
|
|
continue |
|
|
|
|
template.incHits() |
|
|
|
|
self.__lock.release() |
|
|
|
|
return date |
|
|
|
|
except ValueError: |
|
|
|
|
pass |
|
|
|
|
self.__lock.release() |
|
|
|
|
return None |
|
|
|
|
try: |
|
|
|
|
self.__lock.acquire() |
|
|
|
|
for template in self.__templates: |
|
|
|
|
try: |
|
|
|
|
date = template.getDate(line) |
|
|
|
|
if date == None: |
|
|
|
|
continue |
|
|
|
|
template.incHits() |
|
|
|
|
return date |
|
|
|
|
except ValueError: |
|
|
|
|
pass |
|
|
|
|
return None |
|
|
|
|
finally: |
|
|
|
|
self.__lock.release() |
|
|
|
|
|
|
|
|
|
def getUnixTime(self, line): |
|
|
|
|
date = self.getTime(line) |
|
|
|
@ -143,8 +149,11 @@ class DateDetector:
|
|
|
|
|
# in this object and thus should be called from time to time. |
|
|
|
|
|
|
|
|
|
def sortTemplate(self): |
|
|
|
|
self.__lock.acquire() |
|
|
|
|
logSys.debug("Sorting the template list") |
|
|
|
|
self.__templates.sort(cmp = lambda x, y: cmp(x.getHits(), y.getHits()), |
|
|
|
|
reverse=True) |
|
|
|
|
self.__lock.release() |
|
|
|
|
try: |
|
|
|
|
self.__lock.acquire() |
|
|
|
|
logSys.debug("Sorting the template list") |
|
|
|
|
self.__templates.sort(cmp = lambda x, y: |
|
|
|
|
cmp(x.getHits(), y.getHits()), |
|
|
|
|
reverse = True) |
|
|
|
|
finally: |
|
|
|
|
self.__lock.release() |
|
|
|
|