Files
SGF/scripts/sgf-analysis-concurrency.php
T
2026-11-11 09:00:17 +02:00

8 lines
2.4 KiB
PHP

<?php
require __DIR__.'/sgf-analysis-proof-bootstrap.php';$dir=$s['root'].'/analysis-concurrency';if(!is_dir($dir))mkdir($dir,0700,true);$file=$dir.'/progress.json';$mode=$argv[1]??'';$metric='cash_coverage_single_payable';
if($mode==='prepare'){if(is_file($file))throw new LogicException('Reuse preparation');[$p]=$analysisCommand(13,$criterionInput('prepare',$metric,0,$criterionData($metric)));$a=$analysisPreview(14,$criterionInput('review',$metric,1,['decision'=>'reviewed']));$b=$analysisPreview(14,$criterionInput('review',$metric,1,['decision'=>'reviewed']));file_put_contents($file,json_encode(['cuts'=>[1=>$a['preview'],2=>$b['preview']],'before'=>$host->table('an_criteria')->count()]));}
elseif($mode==='first'){$p=json_decode(file_get_contents($file),true);$selectAnalysis(14);$host->beginTransaction();try{$out=$analysis->confirm(14,$p['cuts'][1]);file_put_contents($dir.'/locked','QA company lock held');$end=microtime(true)+25;while(!is_file($dir.'/release')&&microtime(true)<$end)usleep(50000);if(!is_file($dir.'/release'))throw new LogicException('Release missing');$host->commit();file_put_contents($dir.'/first.json',json_encode($out));}finally{while($host->transactionLevel()>0)$host->rollBack();}}
elseif($mode==='second'){$p=json_decode(file_get_contents($file),true);$selectAnalysis(14);request()->request->replace(['preview'=>$p['cuts'][2]]);$start=microtime(true);$r=app(App\Modules\Finance\Http\FinancialIndicatorsController::class)->confirm(request(),$analysis);file_put_contents($dir.'/second.json',json_encode(['status'=>$r->getStatusCode(),'retry_after'=>$r->headers->get('Retry-After'),'elapsed_seconds'=>microtime(true)-$start]));}
elseif($mode==='recover'){$p=json_decode(file_get_contents($file),true);$selectAnalysis(14);$reject(fn()=>$analysis->confirm(14,$p['cuts'][2]),409,'second stale criterion review after release');$a=$analysis->confirm(14,$p['cuts'][1]);$ok($a['replayed']&&$host->table('an_criteria')->count()===$p['before']+1,'one criterion review without duplication');file_put_contents($dir.'/result.json',json_encode(['passed'=>true,'during_lock'=>json_decode(file_get_contents($dir.'/second.json'),true),'after_release'=>409,'one_review'=>true,'origin_simulated_in_harness'=>true,'regression_only'=>true],JSON_PRETTY_PRINT));}
else throw new LogicException('Unknown mode');echo json_encode(['passed'=>true,'phase'=>$mode,'proof'=>$dir.'/result.json']).PHP_EOL;