import json,os,subprocess,time,hashlib,shutil,urllib.request
from pathlib import Path
os.umask(0o077)
BASE=Path('/backup/contextra/deployment-inbox/icerti-ac-scale-20260927-r01')
HERE=BASE;PRIVATE=BASE/'private'
CONTAINER='contextra-icerti-analytics-1'
def cmd(args,timeout=30,input=None):
    r=subprocess.run(args,input=input,text=True,capture_output=True,timeout=timeout)
    if r.returncode:raise RuntimeError('COMMAND_FAILED_'+Path(args[0]).name+'_'+str(r.returncode))
    return r.stdout
def inspect(name):return json.loads(cmd(['docker','inspect',name]))[0]
def api(path,timeout=5):
    with urllib.request.urlopen('http://127.0.0.1:35000'+path,timeout=timeout) as r:return json.load(r)
def request(path,body,timeout=15,method='POST'):
    r=urllib.request.Request('http://127.0.0.1:35000'+path,data=json.dumps(body).encode(),method=method,headers={'Content-Type':'application/json'})
    with urllib.request.urlopen(r,timeout=timeout) as response:return json.load(response)
def save(name,value,private=False):
    with ((PRIVATE if private else HERE)/name).open('x') as f:json.dump(value,f,indent=2)
def sql(query):
    return cmd(['docker','exec','-i','contextra-icerti-postgresql-1','sh','-c','exec psql -X -qAt -U "$POSTGRES_USER" -d "$POSTGRES_DB"'],input=query,timeout=20).strip()
def ledger():
    return json.loads(sql("SELECT json_build_object('count',count(*),'attempts',sum(attempts),'reservations',sum(reservation)) FROM contextra_event_artifacts;"))
def training():
    token=Path('/workspace/contextra/data/site/bridge/control-token').read_text().strip()
    r=urllib.request.Request('http://127.0.0.1:35000/internal/secure-control/training/settings',headers={'Authorization':'Bearer '+token})
    with urllib.request.urlopen(r,timeout=5) as response:return json.load(response)
def probe(mode,mapping=None):
    source=(BASE/'provider_scale_probe.py').read_text()
    return json.loads(cmd(['docker','exec','-i',CONTAINER,'python3','-B','-c',source,mode],input=json.dumps(mapping or {}),timeout=15))
