[Buildroot] [PATCH v2 3/5] support/scripts/pkg-stats: add current progress in 'check_url_status'
Victor Huesca
victor.huesca at bootlin.com
Fri Jul 19 14:35:54 UTC 2019
The 'check_url_status' function can take a few minutes to process
depending on how many packages are involved. The current implementation
uses process-pool to speed-up the completion time but does not allow to
trace which package as complete nor to track the overall progress with
for example: '[42/2243] Package jpeg'
This patch adds a progress feedback to 'check_url_status' to report the
current package and the overall progression. It rely on the pool's
callback and follow the same scheme as 'check_package_latest_version'.
This patch also remove the unnecessary 'url_worker' Package's attribute
in favor of a local list of workers. This imply removing this field form
the excluded fields from 'dump_json'.
Signed-off-by: Victor Huesca <victor.huesca at bootlin.com>
---
support/scripts/pkg-stats | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/support/scripts/pkg-stats b/support/scripts/pkg-stats
index 08730b8d43..8b59cd1e76 100755
--- a/support/scripts/pkg-stats
+++ b/support/scripts/pkg-stats
@@ -57,7 +57,6 @@ class Package:
self.current_version = None
self.url = None
self.url_status = None
- self.url_worker = None
self.latest_version = (RM_API_STATUS_ERROR, None, None)
def pkgvar(self):
@@ -319,7 +318,7 @@ def package_init_make_info():
Package.all_versions[pkgvar] = value
-def check_url_status_worker(url, url_status):
+def check_url_status(url, url_status):
if url_status != "Missing" and url_status != "No Config.in":
try:
url_status_code = requests.head(url, timeout=30).status_code
@@ -332,11 +331,12 @@ def check_url_status_worker(url, url_status):
def check_package_urls(packages):
- Package.pool = Pool(processes=64)
- for pkg in packages:
- pkg.url_worker = pkg.pool.apply_async(check_url_status_worker, (pkg.url, pkg.url_status))
- for pkg in packages:
- pkg.url_status = pkg.url_worker.get(timeout=3600)
+ pool = Pool(processes=64)
+ cb = progress_callback(lambda i, n, res, name: print("[%d/%d] (url) Package %s: %s" % (i, n, name, res)), 1, len(packages))
+ results = [apply_async(pool, check_url_status, (pkg.url, pkg.url_status),
+ callback=cb, cb_args=(pkg.name,)) for pkg in packages]
+ for pkg, r in zip(packages, results):
+ pkg.url_status = r.get()
def release_monitoring_get_latest_version_by_distro(pool, name):
@@ -735,7 +735,7 @@ def dump_html(packages, stats, date, commit, output):
def dump_json(packages, stats, date, commit, output):
# Format packages as a dictionnary instead of a list
# Exclude local field that does not contains real date
- excluded_fields = ['url_worker', 'name']
+ excluded_fields = ['name']
pkgs = {
pkg.name: {
k: v
--
2.21.0
More information about the buildroot
mailing list