1
0
Fork 0
mirror of https://github.com/ethauvin/fail2ban-digest.git synced 2025-04-26 02:57:12 -07:00

Event dates are now stored in UTC, and printed/mailed using the local timezone.

This commit is contained in:
Erik C. Thauvin 2019-02-25 13:02:14 -08:00
parent 01beb565d1
commit 7f3892f556

View file

@ -80,6 +80,12 @@ def ip_address(string):
else: else:
raise argparse.ArgumentTypeError('%s is not a valid IPv4 or IPv6 address' % string) raise argparse.ArgumentTypeError('%s is not a valid IPv4 or IPv6 address' % string)
def utc_to_local(date_string):
try:
return datetime.strptime(date_string, db_date_format).replace(tzinfo=timezone.utc).astimezone().strftime(db_date_format)
except ValueError:
return date_string
def close_db(db_fd): def close_db(db_fd):
db_fd.close() db_fd.close()
atexit.unregister(close_db) atexit.unregister(close_db)
@ -106,7 +112,7 @@ def add(db, ip):
db = db_busy_open(db_location + '/' + db + '.dbm', 'c', 30) db = db_busy_open(db_location + '/' + db + '.dbm', 'c', 30)
if db_creation_date_key not in db.keys(): if db_creation_date_key not in db.keys():
db[db_creation_date_key] = datetime.utcnow().strftime(db_date_format).encode('UTF-8') db[db_creation_date_key] = datetime.utcnow().strftime(db_date_format).encode('UTF-8')
event_date = ('%s, ' % datetime.now().strftime(db_date_format)).encode('UTF-8') event_date = ('%s, ' % datetime.utcnow().strftime(db_date_format)).encode('UTF-8')
try: try:
db[ip] += event_date db[ip] += event_date
except KeyError: except KeyError:
@ -142,25 +148,23 @@ def digest(db, delete):
event_list.sort(key = lambda x: len(x[1]), reverse = True) event_list.sort(key = lambda x: len(x[1]), reverse = True)
msg = '' msg = ''
for ip, events in event_list: for ip, events in event_list:
msg += '%3d event(s) for IP %-42s: %s\n' %(len(events), ip, ', '.join(events)) local_events = []
for event in events:
local_events.append(utc_to_local(event))
msg += '%3d event(s) for IP %-42s: %s\n' %(len(events), ip, ', '.join(local_events))
return (db_creation_date, msg) return (db_creation_date, msg)
def mail_digest(db, mail_to, mail_from, delete, quiet): def mail_digest(db, mail_to, mail_from, delete, quiet):
msg = EmailMessage() msg = EmailMessage()
date_now = datetime.now().strftime(db_date_format) date_now = datetime.now().strftime(db_date_format)
creation_date, dgst = digest(db, delete) creation_date, dgst = digest(db, delete)
try:
# convert to local timezone
creation_date = datetime.strptime(creation_date, db_date_format).replace(tzinfo=timezone.utc).astimezone().strftime(db_date_format)
except ValueError:
pass # likely invalid date, continue.
if dgst == '': if dgst == '':
if quiet: if quiet:
return return
else: else:
dgst = 'no ban event recorded for the named time frame' dgst = 'no ban event recorded for the named time frame'
msg.set_content(default_mail_template.substitute( msg.set_content(default_mail_template.substitute(
creation_date = creation_date, creation_date = utc_to_local(creation_date),
date_now = date_now, date_now = date_now,
digest = dgst, digest = dgst,
)) ))