Skip to content

Commit

Permalink
Make due output dates sorted
Browse files Browse the repository at this point in the history
  • Loading branch information
wamdam committed Nov 19, 2020
1 parent 80a990d commit bc040a9
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 20 deletions.
7 changes: 7 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
backy2 (2.13.6) unstable; urgency=low

* Added 'due_since' to `due`s output.

-- Daniel Kraft <[email protected]> Tue, 19 Nov 2020 21:48:21 +0100


backy2 (2.13.5) unstable; urgency=low

* Change how `due` is working: Now backups are due at
Expand Down
29 changes: 15 additions & 14 deletions docs/source/backup.rst
Original file line number Diff line number Diff line change
Expand Up @@ -382,31 +382,32 @@ with the information which schedulers to test for, if a new backup is due and
which expiration date should be set for it. If you don't pass schedulers,
backy2 will by default only use the ``daily`` scheduler::

$ backy2 due test
INFO: $ /root/backy2/env/bin/backy2 due test
+---------------+------------+---------------------+
| name | schedulers | expire_date |
+---------------+------------+---------------------+
| test | daily | 2020-04-23 15:10:35 |
+---------------+------------+---------------------+
INFO: Backy complete.
$ backy2 due
+----------+------------+---------------------+---------------------+
| name | schedulers | expire_date | due_since |
+----------+------------+---------------------+---------------------+
| test | daily | 2020-11-19 21:39:20 | 1970-01-01 00:00:00 |
| t | daily | 2020-11-19 21:39:20 | 2020-11-19 20:02:48 |
+----------+------------+---------------------+---------------------+

The output is sorted with the oldest due_since on top.

Of course you can pass schedulers too::

$ backy2 due -s hourly,daily test
INFO: $ /root/backy2/env/bin/backy2 due -s hourly,daily test
+------+--------------+---------------------+
| name | schedulers | expire_date |
+------+--------------+---------------------+
| test | hourly,daily | 2020-04-23 15:16:31 |
+------+--------------+---------------------+
+------+--------------+---------------------+---------------------+
| name | schedulers | expire_date | due_since |
+------+--------------+---------------------+---------------------+
| test | hourly,daily | 2020-04-23 15:16:31 | 1970-01-01 00:00:00 |
+------+--------------+---------------------+---------------------+
INFO: Backy complete.

If you use the machine-output (``-m``) and short (``-s``) output options, you can
see that this information can easily be scripted::

$ backy2 -ms due test
test|daily|2020-04-23 15:13:56
test|daily|2020-04-23 15:13:56|1970-01-01 00:00:00

The calculation of the due date is::

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
from setuptools import setup, find_packages

version = '2.13.5'
version = '2.13.6'

setup(name='backy2',
version=version,
Expand Down
4 changes: 2 additions & 2 deletions src/backy2/backy.py
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,7 @@ def get_due_backups(self, name, scheduler, interval, keep, sla):
# Check if now is the time to create a backup for this name and scheduler.
if not _last_versions_for_name_and_scheduler: # no backups exist, so require one
logger.debug('DUE: Last backup for {} not found, so it is due.'.format(name, ))
return True
return datetime.datetime(1970,1,1) # due since...

logger.debug('''DUE:
Last backup for {} was at {}.
Expand All @@ -569,7 +569,7 @@ def get_due_backups(self, name, scheduler, interval, keep, sla):
))

if datetime.datetime.utcnow() > (_last_versions_for_name_and_scheduler[-1].date + interval - sla): # no backup within interval (-sla) exists, so require one
return True
return (_last_versions_for_name_and_scheduler[-1].date + interval - sla) # due since...

return False

Expand Down
16 changes: 13 additions & 3 deletions src/backy2/scripts/backy.py
Original file line number Diff line number Diff line change
Expand Up @@ -410,12 +410,22 @@ def due(self, name, schedulers, fields):
_due_schedulers.add(scheduler)
_due_backup_expire_date = max(_due_backup_expire_date, datetime.utcnow() + (keep + 1) * interval)
if _due_schedulers:
due_backups[name] = {'schedulers': _due_schedulers, 'due_backup_expire_date': _due_backup_expire_date}
due_backups[name] = {
'schedulers': _due_schedulers,
'due_backup_expire_date': _due_backup_expire_date,
'due_backup_since': _due_backup,
}

field_names = [f.strip() for f in list(csv.reader(StringIO(fields)))[0]]
values = []
for name, backup_info in due_backups.items():
values.append({'name': name, 'schedulers': ",".join(backup_info['schedulers']), 'expire_date': backup_info['due_backup_expire_date']})
values.append({
'name': name,
'schedulers': ",".join(backup_info['schedulers']),
'expire_date': backup_info['due_backup_expire_date'],
'due_since': backup_info['due_backup_since'],
})
values.sort(key=lambda v: v['due_since'])
if self.machine_output:
self._machine_output(field_names, values)
else:
Expand Down Expand Up @@ -683,7 +693,7 @@ def main():
p.add_argument('name', nargs='?', default=None, help='Show due backups for this version name (optional, if not given, show due backups for all names).')
p.add_argument('-s', '--schedulers',default="daily,weekly,monthly",
help="Use these schedulers as defined in backy.cfg (default: daily,weekly,monthly)")
p.add_argument('-f', '--fields', default="name,schedulers,expire_date",
p.add_argument('-f', '--fields', default="name,schedulers,expire_date,due_since",
help="Show these fields (comma separated). Available: name,schedulers,expire_date")
p.set_defaults(func='due')

Expand Down

0 comments on commit bc040a9

Please sign in to comment.