Print summary of recent backups

This commit is contained in:
George Lacey 2021-05-05 14:08:22 +01:00
parent 2943a4844f
commit 86daf3ea7f

View File

@ -1,5 +1,6 @@
from borgmanager.database.object import Repo, Archive, Cache from borgmanager.database.object import Repo, Archive, Cache
from math import floor, pow, log from math import floor, pow, log
from datetime import datetime, timedelta
class Summary(object): class Summary(object):
@ -26,9 +27,42 @@ class Summary(object):
f" ago\n" f" ago\n"
return_string += f"\t> Un/Compressed size: {self.bytes_to_string(cache.unique_size)}" \ return_string += f"\t> Un/Compressed size: {self.bytes_to_string(cache.unique_size)}" \
f"/{self.bytes_to_string(cache.unique_csize)}\n" 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_string += "\n"
return return_string.strip() 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 @staticmethod
def seconds_to_string(seconds: int, detail='hour', short=False): def seconds_to_string(seconds: int, detail='hour', short=False):
seconds = int(seconds) seconds = int(seconds)