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

Fixed sorting, added --sort argument.

This commit is contained in:
Erik C. Thauvin 2019-03-05 23:46:50 -08:00
parent 7152766ca1
commit e5981669d8

View file

@ -45,6 +45,13 @@ Regards,
Fail2ban Digest Fail2ban Digest
''') ''')
class Ban:
def __init__(self, ip, events):
self.ip = ip
self.events = []
for event in events:
self.events.append(utc_to_local(event))
self.events.sort
class store_yesno(argparse.Action): class store_yesno(argparse.Action):
def __init__(self, option_strings, dest, nargs = None, **kwargs): def __init__(self, option_strings, dest, nargs = None, **kwargs):
@ -136,23 +143,22 @@ def digest(db, delete):
os.rename(new_db_file, db_file) os.rename(new_db_file, db_file)
try: try:
db_creation_date = db[db_creation_date_key].decode('UTF-8') db_creation_date = utc_to_local(db[db_creation_date_key].decode('UTF-8'))
except KeyError as e: except KeyError as e:
db_creation_date = 'not found' db_creation_date = 'not found'
event_list = [] events_list = []
for ip in db.keys(): for ip in db.keys():
if ip.decode('UTF-8') == db_creation_date_key: if ip.decode('UTF-8') == db_creation_date_key:
continue continue
event_list.append((ip.decode('UTF-8'), db[ip].decode('UTF-8').split(', ')[:-1])) events_list.append(Ban(ip.decode('UTF-8'), db[ip].decode('UTF-8').split(', ')[:-1]))
close_db(db) close_db(db)
event_list.sort(key = lambda x: len(x[1]), reverse = True) events_list.sort(key=lambda x: x.events[0]) # sort by date
if sort:
events_list.sort(key=lambda x: len(x.events), reverse=True)
msg = '' msg = ''
for ip, events in event_list: msg_html = ''
local_events = [] for ban in events_list:
for event in events: msg += '%3d event(s) for IP %-42s: %s\n' %(len(ban.events), ban.ip, ', '.join(ban.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)
def mail_digest(db, mail_to, mail_from, delete, quiet): def mail_digest(db, mail_to, mail_from, delete, quiet):
msg = EmailMessage() msg = EmailMessage()
@ -162,11 +168,11 @@ def mail_digest(db, mail_to, mail_from, delete, quiet):
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 = utc_to_local(creation_date), creation_date = creation_date,
date_now = date_now, date_now = date_now,
digest = dgst, digest = dgst
)) ))
msg['To'] = mail_to msg['To'] = mail_to
msg['From'] = mail_from msg['From'] = mail_from
@ -231,6 +237,12 @@ if __name__ == '__main__':
default = False, default = False,
help = 'do / don\'t delete current database, next call to add will create a new empty one' help = 'do / don\'t delete current database, next call to add will create a new empty one'
) )
subcommands[sc].add_argument(
'--sort', '--no-sort',
action = store_yesno,
default = True,
help = 'do / don\'t sort the digest by repeat event occurrences.'
)
sc = 'maildigest' sc = 'maildigest'
subcommands[sc] = subparsers.add_parser( subcommands[sc] = subparsers.add_parser(