Files
dj/integration-work/check_cleared_task_states.py
T

24 lines
1.3 KiB
Python

import pathlib,json,subprocess,base64
root=pathlib.Path('/home/ps/huobao-gpu-selection')
rows=[r for r in json.loads((root/'production-task-ids.json').read_text()) if r[2]=='processing']
lookup={}
for tid,encoded,status in rows:
try:
value=encoded.removeprefix('h3v2.');provider,jid=base64.urlsafe_b64decode(value+'='*(-len(value)%4)).decode().split(':',1)
lookup[str(tid)]={'provider':provider,'id':jid,'encoded':encoded}
except Exception:pass
code='''import asyncio,httpx,json,app
LOOKUP=__LOOKUP__
async def main():
async with httpx.AsyncClient(timeout=30) as c:
for provider in set(x['provider'] for x in LOOKUP.values()):
p=app.providers()[provider];h=(await c.get(p.base_url+'/history',headers=app.provider_headers(p))).json();q=(await c.get(p.base_url+'/queue',headers=app.provider_headers(p))).json()
ids={x[1] for key in ('queue_pending','queue_running') for x in q.get(key,[])}
for item in LOOKUP.values():
if item['provider']==provider:item.update(in_queue=item['id'] in ids,remote_status=(h.get(item['id'],{}).get('status') or {}).get('status_str'))
print(json.dumps(LOOKUP))
asyncio.run(main())
'''.replace('__LOOKUP__',repr(lookup))
out=subprocess.check_output(['docker','exec','huobao-vdn-normalizer','python','-c',code],text=True)
(root/'cleared-task-states.json').write_text(out);print(out)