import hashlib
import json
import os
from pathlib import Path
import shlex
import subprocess
import urllib.request

os.umask(0o077)
root=Path('/tmp/codex/ltb1021/20260909-identity-image')
baseline=json.loads((root/'baseline.json').read_text())
def call(args):
    return subprocess.check_output(args,text=True,stderr=subprocess.PIPE).strip()
fmt='{{json .Name}} {{json .Id}} {{json .Image}} {{.RestartCount}} {{.State.OOMKilled}} {{.State.Status}} {{if index .State "Health"}}{{.State.Health.Status}}{{else}}none{{end}}'
actual={}
analytics=None
for cid in call(['docker','ps','-aq']).splitlines():
    name,identifier,image,restarts,oom,status,health=shlex.split(call(['docker','inspect','--format',fmt,cid]))
    item={'id':identifier,'image':image,'restart':int(restarts),'oom':oom,'status':status,'health':health}
    if name=='/contextra-analytics-1': analytics=item
    else: actual[hashlib.sha256(name.encode()).hexdigest()]=item
assert actual==baseline['protected'], 'protected container drift'
assert analytics==baseline['analytics'], 'analytics drift'
values=[s.split('=',1)[1].strip().strip('"\'') for s in Path('/workspace/contextra-runtime-config/runtime.env').read_text().splitlines() if s.startswith('CONTEXTRA_IMAGE=')]
assert values==['contextra-analytics:smoke-be367b7']
port=baseline['port']
for path in ('/live','/ready','/health'):
    with urllib.request.urlopen(f'http://127.0.0.1:{port}{path}',timeout=10) as r:
        assert r.status==200
with urllib.request.urlopen(f'http://127.0.0.1:{port}/api/v1/streams',timeout=10) as r:
    streams=json.load(r)['streams']
if isinstance(streams,dict): streams=list(streams.values())
assert len(streams)==baseline['stream_count']
assert all(s.get('state')=='stopped' and s.get('desired_state')=='stopped' for s in streams)
assert subprocess.run(['docker','image','inspect','contextra-analytics:smoke-372679e'],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL).returncode!=0
result={'analytics_unchanged':True,'protected_containers_unchanged':len(actual),'env_image_unchanged':True,'readiness_200':True,'stream_stopped':True,'new_tag_created':False}
(root/'unchanged.json').write_text(json.dumps(result,indent=2))
print(json.dumps(result))
