Răsfoiți Sursa

Merge pull request #634 from ThomasWaldmann/create-starttime-duration

Create starttime duration
TW 9 ani în urmă
părinte
comite
39c3906238
2 a modificat fișierele cu 20 adăugiri și 9 ștergeri
  1. 16 6
      borg/archive.py
  2. 4 3
      borg/archiver.py

+ 16 - 6
borg/archive.py

@@ -128,7 +128,7 @@ class Archive:
     def __init__(self, repository, key, manifest, name, cache=None, create=False,
                  checkpoint_interval=300, numeric_owner=False, progress=False,
                  chunker_params=CHUNKER_PARAMS,
-                 start=datetime.now(), end=datetime.now()):
+                 start=datetime.utcnow(), end=datetime.utcnow()):
         self.cwd = os.getcwd()
         self.key = key
         self.repository = repository
@@ -172,15 +172,20 @@ class Archive:
     def load(self, id):
         self.id = id
         self.metadata = self._load_meta(self.id)
-        decode_dict(self.metadata, (b'name', b'hostname', b'username', b'time'))
+        decode_dict(self.metadata, (b'name', b'hostname', b'username', b'time', b'time_end'))
         self.metadata[b'cmdline'] = [arg.decode('utf-8', 'surrogateescape') for arg in self.metadata[b'cmdline']]
         self.name = self.metadata[b'name']
 
     @property
     def ts(self):
-        """Timestamp of archive creation in UTC"""
+        """Timestamp of archive creation (start) in UTC"""
         return parse_timestamp(self.metadata[b'time'])
 
+    @property
+    def ts_end(self):
+        """Timestamp of archive creation (end) in UTC"""
+        return parse_timestamp(self.metadata[b'time_end'])
+
     @property
     def fpr(self):
         return hexlify(self.id).decode('ascii')
@@ -226,7 +231,11 @@ Number of files: {0.stats.nfiles}'''.format(self)
             raise self.AlreadyExists(name)
         self.items_buffer.flush(flush=True)
         if timestamp is None:
-            timestamp = datetime.utcnow()
+            start = self.start
+            end = self.end
+        else:
+            start = timestamp
+            end = timestamp  # we only have 1 value
         metadata = StableDict({
             'version': 1,
             'name': name,
@@ -234,7 +243,8 @@ Number of files: {0.stats.nfiles}'''.format(self)
             'cmdline': sys.argv,
             'hostname': socket.gethostname(),
             'username': getuser(),
-            'time': timestamp.isoformat(),
+            'time': start.isoformat(),
+            'time_end': end.isoformat(),
         })
         data = msgpack.packb(metadata, unicode_errors='surrogateescape')
         self.id = self.key.id_hash(data)
@@ -851,7 +861,7 @@ class ArchiveChecker:
                 archive = StableDict(msgpack.unpackb(data))
                 if archive[b'version'] != 1:
                     raise Exception('Unknown archive metadata version')
-                decode_dict(archive, (b'name', b'hostname', b'username', b'time'))
+                decode_dict(archive, (b'name', b'hostname', b'username', b'time', b'time_end'))
                 archive[b'cmdline'] = [arg.decode('utf-8', 'surrogateescape') for arg in archive[b'cmdline']]
                 items_buffer = ChunkBuffer(self.key)
                 items_buffer.write_chunk = add_callback

+ 4 - 3
borg/archiver.py

@@ -191,7 +191,7 @@ class Archiver:
                 if args.progress:
                     archive.stats.show_progress(final=True)
                 if args.stats:
-                    archive.end = datetime.now()
+                    archive.end = datetime.utcnow()
                     log_multi(DASHES,
                               str(archive),
                               DASHES,
@@ -202,7 +202,7 @@ class Archiver:
         self.output_filter = args.output_filter
         self.output_list = args.output_list
         dry_run = args.dry_run
-        t0 = datetime.now()
+        t0 = datetime.utcnow()
         if not dry_run:
             repository = self.open_repository(args, exclusive=True)
             manifest, key = Manifest.load(repository)
@@ -489,7 +489,8 @@ class Archiver:
             print('Fingerprint: %s' % hexlify(archive.id).decode('ascii'))
             print('Hostname:', archive.metadata[b'hostname'])
             print('Username:', archive.metadata[b'username'])
-            print('Time: %s' % format_time(to_localtime(archive.ts)))
+            print('Time (start): %s' % format_time(to_localtime(archive.ts)))
+            print('Time (end):   %s' % format_time(to_localtime(archive.ts_end)))
             print('Command line:', remove_surrogates(' '.join(archive.metadata[b'cmdline'])))
             print('Number of files: %d' % stats.nfiles)
             print()