66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
from datetime import datetime
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
|
|
def keep_date(now, snapshots, date_convert, delta, count):
|
|
keep = set()
|
|
if count < 1:
|
|
return keep
|
|
start_date = date_convert(now) - delta*(count-1)
|
|
for snapshot in snapshots:
|
|
if snapshot.date() >= start_date:
|
|
keep.add(snapshot)
|
|
start_date = date_convert(snapshot) + delta
|
|
if start_date > now.date():
|
|
break
|
|
return keep
|
|
|
|
|
|
def keep_year(now, snapshots, count):
|
|
return keep_date(now, snapshots, lambda d: d.date().replace(day=1, month=1), relativedelta(years=1), count)
|
|
|
|
|
|
def keep_month(now, snapshots, count):
|
|
return keep_date(now, snapshots, lambda d: d.date().replace(day=1), relativedelta(months=1), count)
|
|
|
|
|
|
def keep_day(now, snapshots, count):
|
|
return keep_date(now, snapshots, lambda d: d.date(), relativedelta(days=1), count)
|
|
|
|
|
|
def keep_time(now, snapshots, convert, delta, count):
|
|
keep = set()
|
|
if count < 1:
|
|
return keep
|
|
start = convert(now) - delta*(count-1)
|
|
for snapshot in snapshots:
|
|
if snapshot >= start:
|
|
keep.add(snapshot)
|
|
start = convert(snapshot) + delta
|
|
if start > now:
|
|
break
|
|
return keep
|
|
|
|
|
|
def keep_hour(now, snapshots, count):
|
|
return keep_time(now, snapshots, lambda d: d.replace(minute=0, second=0, microsecond=0), relativedelta(hours=1),
|
|
count)
|
|
|
|
|
|
def keep_frequent(now, snapshots, count):
|
|
return keep_time(now, snapshots, lambda d: d.replace(minute=d.minute//15*15, second=0, microsecond=0),
|
|
relativedelta(minutes=15), count)
|
|
|
|
|
|
def snapshots_to_keep(now, snapshots, yearly=0, monthly=0, weekly=0, daily=0, hourly=0, frequently=0):
|
|
snapshots.sort()
|
|
keep = set()
|
|
keep.union(keep_year(now, snapshots, yearly))
|
|
keep.union(keep_month(now, snapshots, monthly))
|
|
keep.union(keep_day(now, snapshots, daily))
|
|
return keep
|
|
|
|
|
|
def main():
|
|
print("Hello, world!")
|