diff --git a/archivebot-jobs b/archivebot-jobs index 4253c11..1ea5308 100755 --- a/archivebot-jobs +++ b/archivebot-jobs @@ -2,6 +2,7 @@ import argparse import datetime import json +import math import re import sys import time @@ -16,6 +17,11 @@ columns = { 'queued': (lambda job, pipelines: job["job_data"]["queued_at"], ('date',)), 'started': (lambda job, pipelines: job["job_data"]["started_at"], ('date',)), 'last active': (lambda job, pipelines: int(job["ts"]), ('date', 'coloured')), + 'dl urls': (lambda job, pipelines: job["job_data"]["items_downloaded"], ()), + 'dl size': (lambda job, pipelines: job["job_data"]["bytes_downloaded"], ('size',)), + 'queue': (lambda job, pipelines: job["job_data"]["items_queued"] - job["job_data"]["items_downloaded"], ()), + 'con': (lambda job, pipelines: job["job_data"]["concurrency"], ()), + 'delay': (lambda job, pipelines: str(int(job["job_data"]["delay_min"])) + '-' + str(int(job["job_data"]["delay_max"])) if job["job_data"]["delay_min"] != job["job_data"]["delay_max"] else str(int(job["job_data"]["delay_min"])), ()), } defaultSort = 'jobid' @@ -146,6 +152,13 @@ def render_date(ts, coloured = False): else: return (colourStr, f"{diff // 86400:.0f}d {(diff % 86400) // 3600:.0f}h ago", colourEndStr) +def render_size(size): + units = ('B', 'KiB', 'MiB', 'GiB', 'TiB') + unitIdx = min(int(math.log(size, 1024)), len(units) - 1) if size >= 1 else 0 + if unitIdx == 0: + return f'{size} B' # No decimal places + return f'{size / 1024 ** unitIdx:.1f} {units[unitIdx]}' + renderers = {} for column, (_, columnAttr) in columns.items(): if "date" in columnAttr: @@ -153,6 +166,10 @@ for column, (_, columnAttr) in columns.items(): renderers[column] = lambda x: render_date(x, coloured = not args.no_colours) else: renderers[column] = render_date + elif "size" in columnAttr: + renderers[column] = render_size + elif isinstance(jobs[0][column], (int, float)): + renderers[column] = str # Print output = []