"""Synthetic local metadata retention benchmark; no Core calls or managed hosts.""" from pathlib import Path import argparse,json,resource,sys,tempfile,time sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'src')) from aim_webgui.auth.service import Auth from aim_webgui.config import Settings from aim_webgui.journal import Journal,project from evidence_fixtures import job,ev def main(): parser=argparse.ArgumentParser() parser.add_argument('--events',type=int,default=25000) parser.add_argument('--out',type=Path,required=True) args=parser.parse_args() if not 1<=args.events<=200000:parser.error('events must be 1..200000') with tempfile.TemporaryDirectory(prefix='aim-journal-benchmark-') as directory: settings=Settings(state_dir=Path(directory)/'state',public_url='https://example.test') auth=Auth(settings);auth.bootstrap() with auth.store.transaction() as db: db.execute('UPDATE users SET must_change_password=0') owner=db.execute('SELECT id FROM users').fetchone()[0] ident=job(auth,owner);journal=Journal(settings);journal.begin(ident) begin=time.perf_counter() for start in range(1,args.events+1,128): batch=[(*project(ev(i),{'test01.example'}),time.time()) for i in range(start,min(start+128,args.events+1))] journal.append(ident,batch) journal.append(ident,[],closed=True) elapsed=time.perf_counter()-begin t=time.perf_counter();snapshot=journal.snapshot(owner,ident);read=time.perf_counter()-t assert snapshot['cursor']==args.events assert snapshot['retained_events']<=settings.journal_max_events assert snapshot['retained_bytes']<=settings.journal_max_bytes assert snapshot['checkpoint']['observed_task_starts']==args.events assert len(snapshot['events'])<=200 result={'synthetic_only':True,'events':args.events,'batch_events':128, 'write_seconds':round(elapsed,4),'latest_snapshot_seconds':round(read,4), 'retained_events':snapshot['retained_events'],'omitted_events':snapshot['omitted_events'], 'retained_metadata_bytes':snapshot['retained_bytes'],'response_events':len(snapshot['events']), 'checkpoint_tasks':len(snapshot['checkpoint']['tasks']), 'process_peak_rss_kib':resource.getrusage(resource.RUSAGE_SELF).ru_maxrss, 'database_bytes':settings.database.stat().st_size,'core_calls':0, 'limits':'20,000 event / 8 MiB tail, using synchronous 128-event batches; not executor/load qualification'} args.out.write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2)) if __name__=='__main__':main()