import json,os,pathlib,subprocess,time,hashlib,shutil
os.umask(0o077);R=pathlib.Path(__file__).parent
def shell(cmd):return subprocess.check_output(cmd,text=True,timeout=10)
def gpu():return int(shell(['nvidia-smi','--id=0','--query-gpu=memory.used','--format=csv,noheader,nounits']).strip())
model=pathlib.Path('/data/contextra/models/triton/RFDETRMedium')
assert hashlib.sha256((model/'2/model.plan').read_bytes()).hexdigest()=='5fdf1e9c55ab947a3b7d5f7f6bdceaf1e36a9e52efdf86f5a15d3b99b8631d1e'
assert hashlib.sha256((model/'config.pbtxt').read_bytes()).hexdigest()=='5e5a4d22786f8b5218ac821379fbec091d9e3006f62c880ee3e3da5ced2f0e0b'
data=json.loads(shell(['docker','inspect','contextra-analytics-1']))[0]
assert data['State']['Status']=='exited';assert data['Image']=='sha256:228fc2493dcb81454453d05a66528dd5927d74a40fb85f76d6950afbf0b56d1a'
baseline=gpu();assert baseline<16384
mem=dict((l.split(':')[0],int(l.split()[1])) for l in pathlib.Path('/proc/meminfo').read_text().splitlines())
assert mem['MemAvailable']>10*1024**2 and shutil.disk_usage('/').free>2*1024**3
name='codex-infer-isolation-r01'
cmd=['docker','run','--rm','--pull','never','--name',name,'--network','none','--gpus','device=0',
 '--cpus','4','--memory','8g','--ulimit','core=0','-e','NVIDIA_VISIBLE_DEVICES=0',
 '-e','NVIDIA_DRIVER_CAPABILITIES=compute,video,utility','-e','PYTHONDONTWRITEBYTECODE=1',
 '-e','LD_LIBRARY_PATH=/opt/tritonserver/lib:/opt/nvidia/deepstream/deepstream/lib:/usr/local/cuda/lib64:/usr/local/nvidia/lib64',
 '--mount',f'type=bind,src={model},dst=/models/RFDETRMedium,readonly',
 '--mount','type=bind,src=/workspace/contextra-analytics-runtime-lifecycle-refactor,dst=/source,readonly',
 '--mount','type=bind,src=/tmp/codex/ltb1021/2026-09-10_preprocess-isolation_r01/generated,dst=/configs,readonly',
 '--mount','type=bind,src=/tmp/codex/ltb1021/2026-09-10_contextra-path-audit_r01/gst-nvdspreprocess,dst=/sdk-preprocess,readonly',
 '--mount',f'type=bind,src={R},dst=/evidence','--entrypoint','timeout',data['Image'],'230s','python3','/evidence/inside.py']
start=time.monotonic();peak=baseline;reason=None
with (R/'container.log').open('w') as log:
 p=subprocess.Popen(cmd,stdout=log,stderr=subprocess.STDOUT)
 try:
  while p.poll() is None:
   peak=max(peak,gpu())
   if peak-baseline>8192 or time.monotonic()-start>240:reason='TIME_OR_GPU_CAP';break
   time.sleep(1)
 finally:
  if p.poll() is None:subprocess.run(['docker','kill',name],capture_output=True,timeout=10)
  p.wait(timeout=15)
summary=dict(returncode=p.returncode,reason=reason,gpu_before=baseline,gpu_peak=peak,gpu_after=gpu(),elapsed_s=round(time.monotonic()-start,2))
(R/'resources.json').write_text(json.dumps(summary,indent=2));print(json.dumps(summary))
if (R/'result.json').exists():print((R/'result.json').read_text())
