mirror of
https://github.com/borgbackup/borg.git
synced 2025-02-20 21:27:32 +00:00
Merge pull request #6682 from ThomasWaldmann/fix-archive-progress-json-master
show_progress: add finished=true/false to archive_progress json
This commit is contained in:
commit
0e3ff0ab70
2 changed files with 35 additions and 2 deletions
|
@ -143,11 +143,15 @@ def show_progress(self, item=None, final=False, stream=None, dt=None):
|
|||
if dt is None or now - self.last_progress > dt:
|
||||
self.last_progress = now
|
||||
if self.output_json:
|
||||
data = self.as_dict()
|
||||
if not final:
|
||||
data = self.as_dict()
|
||||
data['path'] = remove_surrogates(item.path if item else '')
|
||||
else:
|
||||
data = {}
|
||||
data.update({
|
||||
'time': time.time(),
|
||||
'type': 'archive_progress',
|
||||
'path': remove_surrogates(item.path if item else ''),
|
||||
'finished': final,
|
||||
})
|
||||
msg = json.dumps(data)
|
||||
end = '\n'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import json
|
||||
from collections import OrderedDict
|
||||
from datetime import datetime, timezone
|
||||
from io import StringIO
|
||||
|
@ -61,6 +62,34 @@ def test_stats_format(stats):
|
|||
assert repr(stats) == f'<Statistics object at {id(stats):#x} (20, 10, 10)>'
|
||||
|
||||
|
||||
def test_stats_progress_json(stats):
|
||||
stats.output_json = True
|
||||
|
||||
out = StringIO()
|
||||
stats.show_progress(item=Item(path='foo'), stream=out)
|
||||
result = json.loads(out.getvalue())
|
||||
assert result['type'] == 'archive_progress'
|
||||
assert isinstance(result['time'], float)
|
||||
assert result['finished'] is False
|
||||
assert result['path'] == 'foo'
|
||||
assert result['original_size'] == 20
|
||||
assert result['compressed_size'] == 10
|
||||
assert result['deduplicated_size'] == 10
|
||||
assert result['nfiles'] == 0 # this counter gets updated elsewhere
|
||||
|
||||
out = StringIO()
|
||||
stats.show_progress(stream=out, final=True)
|
||||
result = json.loads(out.getvalue())
|
||||
assert result['type'] == 'archive_progress'
|
||||
assert isinstance(result['time'], float)
|
||||
assert result['finished'] is True # see #6570
|
||||
assert 'path' not in result
|
||||
assert 'original_size' not in result
|
||||
assert 'compressed_size' not in result
|
||||
assert 'deduplicated_size' not in result
|
||||
assert 'nfiles' not in result
|
||||
|
||||
|
||||
class MockCache:
|
||||
|
||||
class MockRepo:
|
||||
|
|
Loading…
Reference in a new issue