Skip to content

Commit 29a821d

Browse files
committed
improve progress update when many dependent ressources
1 parent 16b088b commit 29a821d

2 files changed

Lines changed: 31 additions & 6 deletions

File tree

datadog_sync/model/synthetics_mobile_applications_versions.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,14 @@ async def get_resources(self, client: CustomClient) -> List[Dict]:
5252
total_versions,
5353
)
5454

55+
# If import progress bar is active, add sub-steps so the bar advances during fetch
56+
add_total = getattr(self.config, "_import_progress_add_total", None)
57+
if callable(add_total):
58+
add_total(total_versions)
59+
5560
resources = []
5661
progress_interval = max(1, total_versions // 20) # log at INFO roughly every 5%
62+
progress_update = getattr(self.config, "_import_progress_update", None)
5763
for app_idx, application in enumerate(applications):
5864
versions = application.get("versions", [])
5965
for ver_idx, version in enumerate(versions):
@@ -67,6 +73,8 @@ async def get_resources(self, client: CustomClient) -> List[Dict]:
6773
)
6874
resource = await client.get(self.resource_config.base_path + f"/{_id}")
6975
resources.append(resource)
76+
if callable(progress_update):
77+
progress_update(1)
7078
if current % progress_interval == 0 or current == total_versions:
7179
self.config.logger.info(
7280
"synthetics_mobile_applications_versions: progress %d/%d",

datadog_sync/utils/workers.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,30 @@ async def schedule_workers(self, additional_coros: List = []) -> Future:
9595
async def schedule_workers_with_pbar(self, total, additional_coros: List = []) -> Future:
9696
self.pbar = tqdm(total=total)
9797

98-
self._shutdown_workers = False
99-
with logging_redirect_tqdm():
100-
additional_coros.append(self._refresh_pbar())
101-
await self.schedule_workers(additional_coros)
98+
# Allow long-running get_resources (e.g. mobile app versions) to update the bar
99+
def _update(n: int = 1) -> None:
100+
if self.pbar:
101+
self.pbar.update(n)
102102

103-
self.pbar.close()
104-
self.pbar = None
103+
def _add_total(n: int) -> None:
104+
if self.pbar:
105+
self.pbar.total += n
106+
self.pbar.refresh()
107+
108+
setattr(self.config, "_import_progress_update", _update)
109+
setattr(self.config, "_import_progress_add_total", _add_total)
110+
111+
self._shutdown_workers = False
112+
try:
113+
with logging_redirect_tqdm():
114+
additional_coros.append(self._refresh_pbar())
115+
await self.schedule_workers(additional_coros)
116+
finally:
117+
for attr in ("_import_progress_update", "_import_progress_add_total"):
118+
if hasattr(self.config, attr):
119+
delattr(self.config, attr)
120+
self.pbar.close()
121+
self.pbar = None
105122

106123

107124
@dataclass

0 commit comments

Comments
 (0)