From 86daf3ea7f6084ccd087080a2e631e1e2ed6cfe2 Mon Sep 17 00:00:00 2001 From: George Lacey Date: Wed, 5 May 2021 14:08:22 +0100 Subject: [PATCH] Print summary of recent backups --- src/borgmanager/summary/summary.py | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/borgmanager/summary/summary.py b/src/borgmanager/summary/summary.py index e236edf..30cc80e 100644 --- a/src/borgmanager/summary/summary.py +++ b/src/borgmanager/summary/summary.py @@ -1,5 +1,6 @@ from borgmanager.database.object import Repo, Archive, Cache from math import floor, pow, log +from datetime import datetime, timedelta class Summary(object): @@ -26,9 +27,42 @@ class Summary(object): f" ago\n" return_string += f"\t> Un/Compressed size: {self.bytes_to_string(cache.unique_size)}" \ f"/{self.bytes_to_string(cache.unique_csize)}\n" + return_string += f"\t> {self.get_backup_line(repo.primary_key)}\n" return_string += "\n" return return_string.strip() + def get_backup_line(self, repo_id): + units = [] + units.append(['H' if h else '_' for h in self.get_archive_hours(repo_id, 24)]) + units.append(['D' if d else '_' for d in self.get_archive_days(repo_id, 7)]) + units.append(['W' if w else '_' for w in self.get_archive_units(repo_id, 5, 7)]) + units.append(['M' if m else '_' for m in self.get_archive_units(repo_id, 12, 30)]) + + return f"[{']['.join([''.join(u) for u in units])}]" + + def get_archive_hours(self, repo_id, n=12): + hours = [] + for hours_ago in range(n): + exists = self.db.archive_conn.archive_on_hour(repo_id, datetime.today() - timedelta(hours=hours_ago)) + hours.append(exists) + return hours + + def get_archive_days(self, repo_id, n=7): + days = [] + for days_ago in range(n): + exists = self.db.archive_conn.archive_on_date(repo_id, datetime.today() - timedelta(days=days_ago)) + days.append(exists) + return days + + def get_archive_units(self, repo_id, n: int, dmult: int): + weeks = [] + for weeks_ago in range(0, n): + last_day = datetime.today() - timedelta(days=weeks_ago * dmult) + first_day = datetime.today() - timedelta(days=(weeks_ago * dmult) + dmult - 1) + exists = self.db.archive_conn.between_dates(repo_id, first_day, last_day) + weeks.append(exists) + return weeks + @staticmethod def seconds_to_string(seconds: int, detail='hour', short=False): seconds = int(seconds)