#!/usr/bin/python3 from email.message import EmailMessage from email.utils import formatdate import smtplib import sarge import json from datetime import datetime, timedelta TEMPLATE=""" Hello, as of today, {num_backups} backups have been made this week: {content} Only successful backups are listed. -- Automated notification system """ def find_range(array): sorted_array = sorted(array["archives"], key=lambda x: datetime.strptime(x["time"],"%Y-%m-%dT%H:%M:%S.%f"), reverse=True) last_time = datetime.strptime(sorted_array[0]["time"], "%Y-%m-%dT%H:%M:%S.%f") for idx, record in reversed(list(enumerate(sorted_array))): if record == sorted_array[0]: break first_time = datetime.strptime(record["time"], "%Y-%m-%dT%H:%M:%S.%f") monday1 = (first_time - timedelta(days=first_time.weekday())) monday2 = (last_time - timedelta(days=last_time.weekday())) weeks = (monday2 - monday1).days / 7 if weeks <= 1: break return [item["archive"] for item in sorted_array[0: idx + 1]] def create_message(data): content = "\n".join("* {}".format(item) for item in data) complete_message = TEMPLATE.format(num_backups=len(data), content=content) msg = EmailMessage() msg.set_content(complete_message) msg["Subject"] = "Weekly backup report" msg["From"] = "Notification system " msg["To"] = "Mr.X " msg["Date"] = formatdate(localtime=True) msg.set_param("charset", "UTF-8") msg.replace_header("Content-Transfer-Encoding", "8bit") return msg def main(): borgmatic_data = sarge.get_stdout( "borgmatic list --last 10 --json --successful") borgmatic_data = json.loads(borgmatic_data) contents = find_range(borgmatic_data[0]) msg = create_message(contents) s = smtplib.SMTP('localhost') s.send_message(msg) s.quit() if __name__ == "__main__": main()