init
PostgreSQL integration / tests (push) Has been cancelled

This commit is contained in:
ms
2026-11-09 13:15:48 +01:00
parent 4fb7613689
commit 2c1c48df0c
78 changed files with 2707 additions and 176 deletions
+33
View File
@@ -0,0 +1,33 @@
"""One-time import of tasks still available in Flower into the persistent outbox."""
import argparse,os,uuid
from datetime import datetime,timezone
from dotenv import load_dotenv
import requests
from .outbox import Outbox
from .main import envelope
STATES={'SUCCESS':'task-succeeded','FAILURE':'task-failed','REVOKED':'task-revoked','STARTED':'task-started','RECEIVED':'task-received','RETRY':'task-retried','PENDING':'task-sent'}
def main():
p=argparse.ArgumentParser();p.add_argument('--env',default='.env');p.add_argument('--limit',type=int,default=100000);args=p.parse_args()
load_dotenv(args.env);os.umask(0o077)
if args.limit<1 or args.limit>1000000:raise SystemExit('limit must be between 1 and 1000000')
out=Outbox(os.getenv('AGENT_SPOOL','var/outbox.sqlite3'))
base=os.environ['AGENT_FLOWER_URL'].rstrip('/')
count=0;skipped=0;offset=0
while offset<args.limit:
r=requests.get(base+'/api/tasks',params={'limit':min(200,args.limit-offset),'offset':offset},auth=(os.getenv('AGENT_FLOWER_USER',''),os.getenv('AGENT_FLOWER_PASSWORD','')),timeout=30)
r.raise_for_status();tasks=r.json()
if not tasks:break
for task_id,t in tasks.items():
kind=STATES.get(t.get('state'))
stamp=t.get('timestamp') or t.get('succeeded') or t.get('failed') or t.get('started') or t.get('received') or t.get('sent')
if not kind or not isinstance(stamp,(int,float)):
skipped+=1;continue
payload={'uuid':str(task_id),'name':str(t.get('name') or ''),'hostname':str(t.get('worker') or t.get('hostname') or '')}
if isinstance(t.get('runtime'),(int,float)):payload['runtime']=t['runtime']
e=envelope(kind,payload,datetime.fromtimestamp(stamp,timezone.utc))
e['id']=str(uuid.uuid5(uuid.NAMESPACE_URL,base+'|'+task_id+'|'+kind+'|'+str(stamp)))
out.add(e);count+=1
offset+=len(tasks)
if len(tasks)<200:break
out.close();print(f'{count} task snapshots queued; {skipped} skipped because state/timestamp was unavailable.')
if __name__=='__main__':main()