mirror of
https://github.com/ethauvin/fail2ban-digest.git
synced 2025-04-26 10:58:12 -07:00
Event dates are now stored in UTC, and printed/mailed using the local timezone.
This commit is contained in:
parent
01beb565d1
commit
7f3892f556
1 changed files with 12 additions and 8 deletions
|
@ -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,
|
||||||
))
|
))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue