diff options
-rw-r--r-- | src/lib/Server/Admin/Snapshots.py | 21 | ||||
-rw-r--r-- | src/lib/Server/Snapshots/model.py | 9 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/Server/Admin/Snapshots.py b/src/lib/Server/Admin/Snapshots.py index b2536acb1..cda8a3cd4 100644 --- a/src/lib/Server/Admin/Snapshots.py +++ b/src/lib/Server/Admin/Snapshots.py @@ -1,3 +1,4 @@ +from datetime import date import sys # prereq issues can be signaled with ImportError, so no try needed @@ -134,5 +135,25 @@ class Snapshots(Bcfg2.Server.Admin.Mode): print(" File:%s" % f.name) for svc in snap.extra_services: print(" Service:%s" % svc.name) + elif '--date' in args[1:]: + year, month, day = args[2:] + timestamp = date(int(year), int(month), int(day)) + snaps = [] + for client in self.session.query(Client).filter(Client.active == True): + snaps.append(Snapshot.get_by_date(self.session, + client.name, + timestamp)) + rows = [] + labels = ('Client', 'Correct', 'Revision', 'Time') + for snap in snaps: + rows.append([snap.client.name, + snap.correct, + snap.revision, + snap.timestamp]) + self.print_table([labels]+rows, + justify='left', + hdr=True, + vdelim=" ", + padding=1) else: print("Unknown options: ", args[1:]) diff --git a/src/lib/Server/Snapshots/model.py b/src/lib/Server/Snapshots/model.py index e5306da64..cd2e617f5 100644 --- a/src/lib/Server/Snapshots/model.py +++ b/src/lib/Server/Snapshots/model.py @@ -249,3 +249,12 @@ class Snapshot(Base): @classmethod def get_current(cls, session, clientname): return session.query(Snapshot).join(Snapshot.client_metadata, Metadata.client).filter(Client.name==clientname).order_by(desc(Snapshot.timestamp)).first() + + @classmethod + def get_by_date(cls, session, clientname, timestamp): + return session.query(Snapshot)\ + .join(Snapshot.client_metadata, Metadata.client)\ + .filter(Snapshot.timestamp < timestamp)\ + .filter(Client.name==clientname)\ + .order_by(desc(Snapshot.timestamp))\ + .first() |