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

Create starttime duration
This commit is contained in:
TW 2016-02-05 17:04:38 +01:00
commit 39c3906238
2 changed files with 20 additions and 9 deletions

View File

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

View File

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