Avoid progress events flooding

This commit is contained in:
donoban 2018-10-22 21:14:43 +02:00
parent 4f52a3b62e
commit 61c6288391
No known key found for this signature in database
GPG Key ID: 141310D8E3ED08A5

View File

@ -326,6 +326,8 @@ class Backup(object):
#: callback for progress reporting. Will be called with one argument #: callback for progress reporting. Will be called with one argument
#: - progress in percents #: - progress in percents
self.progress_callback = None self.progress_callback = None
self.last_progress = 0
self.last_progress_time = time.time()
#: backup ID, needs to be unique (for a given user), #: backup ID, needs to be unique (for a given user),
#: not necessary unpredictable; automatically generated #: not necessary unpredictable; automatically generated
self.backup_id = datetime.datetime.now().strftime( self.backup_id = datetime.datetime.now().strftime(
@ -512,11 +514,15 @@ class Backup(object):
if not self.total_backup_bytes: if not self.total_backup_bytes:
return return
if callable(self.progress_callback): if callable(self.progress_callback):
progress = ( if time.time() - self.last_progress_time >= 1: # avoid flooding
100 * (self._done_vms_bytes + self._current_vm_bytes) / progress = (
self.total_backup_bytes) 100 * (self._done_vms_bytes + self._current_vm_bytes) /
# pylint: disable=not-callable self.total_backup_bytes)
self.progress_callback(progress) if progress - self.last_progress >= 0.5:
self.last_progress = progress
self.last_progress_time = time.time()
# pylint: disable=not-callable
self.progress_callback(progress)
def _add_vm_progress(self, bytes_done): def _add_vm_progress(self, bytes_done):
self._current_vm_bytes += bytes_done self._current_vm_bytes += bytes_done