Skip to content

Commit 064c42d

Browse files
committed
Add progress indicator to export command
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent c0f3027 commit 064c42d

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

vulnerabilities/management/commands/export.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@
99
import logging
1010
from itertools import groupby
1111
from pathlib import Path
12+
from timeit import default_timer as timer
13+
from traceback import format_exc as traceback_format_exc
1214

1315
import saneyaml
16+
from aboutcode.pipeline import LoopProgress
17+
from aboutcode.pipeline import humanize_time
1418
from django.core.management.base import BaseCommand
1519
from django.core.management.base import CommandError
1620
from packageurl import PackageURL
@@ -26,7 +30,7 @@ def serialize_severity(sev):
2630
"score": sev.value,
2731
"scoring_system": sev.scoring_system,
2832
"scoring_elements": sev.scoring_elements,
29-
"published_at": sev.published_at,
33+
"published_at": str(sev.published_at),
3034
"url": sev.url,
3135
}
3236

@@ -88,8 +92,22 @@ def export_data(self, base_path: Path):
8892
"""
8993
i = 0
9094
seen_vcid = set()
95+
export_start_time = timer()
9196

92-
for i, (purl_without_version, package_versions) in enumerate(packages_by_type_ns_name(), 1):
97+
distinct_packages_count = (
98+
Package.objects.values("type", "namespace", "name")
99+
.distinct("type", "namespace", "name")
100+
.count()
101+
)
102+
103+
progress = LoopProgress(
104+
total_iterations=distinct_packages_count,
105+
progress_step=1,
106+
logger=self.stdout.write,
107+
)
108+
for i, (purl_without_version, package_versions) in enumerate(
109+
progress.iter(packages_by_type_ns_name()), 1
110+
):
93111
pkg_version = None
94112
try:
95113
package_urls = []
@@ -131,9 +149,15 @@ def export_data(self, base_path: Path):
131149
self.stdout.write(f"Processed {i} package. Last PURL: {purl_without_version}")
132150

133151
except Exception as e:
134-
raise Exception(f"Failed to process Package: {pkg_version}") from e
152+
self.stdout.write(
153+
self.style.ERROR(
154+
f"Failed to process Package {pkg_version}: {e!r} \n {traceback_format_exc()}"
155+
)
156+
)
135157

136158
self.stdout.write(f"Exported data for: {i} package and {len(seen_vcid)} vulnerabilities.")
159+
export_run_time = timer() - export_start_time
160+
self.stdout.write(f"Export completed in {humanize_time(export_run_time)}")
137161

138162

139163
def by_purl_type_ns_name(package):

0 commit comments

Comments
 (0)