Browse Source

Add --mode con-d-commands, replace --dashboard-regex with --mode dashboard-regex

master
JustAnotherArchivist 4 years ago
parent
commit
7fde199151
1 changed files with 23 additions and 10 deletions
  1. +23
    -10
      archivebot-jobs

+ 23
- 10
archivebot-jobs View File

@@ -21,6 +21,8 @@ columns = {
'dl size': (lambda job, pipelines: job["job_data"]["bytes_downloaded"], ('size',)), '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"], ()), 'queue': (lambda job, pipelines: job["job_data"]["items_queued"] - job["job_data"]["items_downloaded"], ()),
'con': (lambda job, pipelines: job["job_data"]["concurrency"], ()), 'con': (lambda job, pipelines: job["job_data"]["concurrency"], ()),
'delay min': (lambda job, pipelines: int(job["job_data"]["delay_min"]), ('hidden',)),
'delay max': (lambda job, pipelines: int(job["job_data"]["delay_max"]), ('hidden',)),
'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"])), ()), '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' defaultSort = 'jobid'
@@ -67,10 +69,15 @@ parser.add_argument('--filter', '-f', nargs = 1, type = str, action = FilterActi
' ~ means it must match the specified regex.', ' ~ means it must match the specified regex.',
])) ]))
parser.add_argument('--ifilter', '-i', nargs = 1, type = str, action = FilterAction, dest = 'filter', help = 'Like --filter but case-insensitive') parser.add_argument('--ifilter', '-i', nargs = 1, type = str, action = FilterAction, dest = 'filter', help = 'Like --filter but case-insensitive')
parser.add_argument('--no-colours', '--no-colors', action = 'store_true', help = "Don't colourise the last activity column if it's been a while.")
parser.add_argument('--no-table', action = 'store_true', help = 'Raw output without feeding through column(1); columns are separated by tabs.')
parser.add_argument('--dates', action = 'store_true', help = 'Print dates instead of elapsed times for queued/started/last active columns.')
parser.add_argument('--dashboard-regex', action = 'store_true', help = 'Instead of the normal output, compose a regular expression that can be used on the dashboard to actively watch the jobs matched by the filter. (--sort, --no-colours, --no-table, and --dates have no effect when this option is used.)')
parser.add_argument('--no-colours', '--no-colors', action = 'store_true', help = "Don't colourise the last activity column if it's been a while. (Table mode only)")
parser.add_argument('--no-table', action = 'store_true', help = 'Raw output without feeding through column(1); columns are separated by tabs. (Table mode only)')
parser.add_argument('--dates', action = 'store_true', help = 'Print dates instead of elapsed times for queued/started/last active columns. (Table mode only)')
parser.add_argument('--mode', choices = ('table', 'dashboard-regex', 'con-d-commands'), default = 'table', help = '\n'.join([
'Output modes:',
' table: print a table of the matched jobs',
' dashboard-regex: compose a regular expression that can be used on the dashboard to actively watch the jobs matched by the filter',
' con-d-commands: print !con and !d commands for the current settings',
]))
args = parser.parse_args() args = parser.parse_args()


if not args.sort: if not args.sort:
@@ -119,10 +126,6 @@ if args.filter:
if not jobs: if not jobs:
sys.exit(0) sys.exit(0)


if args.dashboard_regex:
print('^(' + '|'.join(re.escape(job['url']) for job in jobs) + ')$')
sys.exit(0)

# Sort # Sort
class reversor: # https://stackoverflow.com/a/56842689 class reversor: # https://stackoverflow.com/a/56842689
def __init__(self, obj): def __init__(self, obj):
@@ -140,6 +143,16 @@ if not args.dates:
sortColumns = tuple((column, not descending if 'date' in columnInfo[1] else descending, columnInfo) for column, descending, columnInfo in sortColumns) sortColumns = tuple((column, not descending if 'date' in columnInfo[1] else descending, columnInfo) for column, descending, columnInfo in sortColumns)
jobs = sorted(jobs, key = lambda job: tuple(job[column] if not descending else reversor(job[column]) for column, descending, _ in sortColumns)) jobs = sorted(jobs, key = lambda job: tuple(job[column] if not descending else reversor(job[column]) for column, descending, _ in sortColumns))


# Non-table output modes
if args.mode == 'dashboard-regex':
print('^(' + '|'.join(re.escape(job['url']) for job in jobs) + ')$')
sys.exit(0)
elif args.mode == 'con-d-commands':
for job in jobs:
print(f'!con {job["jobid"]} {job["con"]}')
print(f'!d {job["jobid"]} {job["delay min"]} {job["delay max"]}')
sys.exit(0)

# Renderers # Renderers
def render_date(ts, coloured = False): def render_date(ts, coloured = False):
global args, currentTime global args, currentTime
@@ -178,11 +191,11 @@ for column, (_, columnAttr) in columns.items():


# Print # Print
output = [] output = []
output.append(tuple(column.upper() for column in columns))
output.append(tuple(column.upper() for column in columns if "hidden" not in columns[column][1]))
for job in jobs: for job in jobs:
for column in renderers: for column in renderers:
job[column] = renderers[column](job[column]) job[column] = renderers[column](job[column])
output.append(tuple(job[column] for column in columns))
output.append(tuple(job[column] for column in columns if "hidden" not in columns[column][1]))


if not args.no_table: if not args.no_table:
widths = tuple(max(len(field) if isinstance(field, str) else len(field[1]) for field in column) for column in zip(*output)) widths = tuple(max(len(field) if isinstance(field, str) else len(field[1]) for field in column) for column in zip(*output))


Loading…
Cancel
Save