import json
from pathlib import Path
import remote

ROOT=Path(__file__).resolve().parent
code='''
import json,subprocess,sys,time
from pathlib import Path
sys.path.insert(0,'/usr/local/lib/contextra-maintenance/portable-20261006T192646')
import compose_backend as cb,server_context as server,field_profiles as fp
from data_safety import lock
def role(name):
 return next(r for r in cb.containers() if r['Config']['Labels']['com.docker.compose.service']==server.service(name))
probe="import os,json,urllib.request;from pathlib import Path;t=Path(os.environ['CONTEXTRA_CONTROL_TOKEN_FILE']).read_text().strip();r=urllib.request.Request('http://127.0.0.1:5000/internal/secure-control/runtime-status',headers={'Authorization':'Bearer '+t});print(urllib.request.urlopen(r,timeout=5).read().decode())"
with lock(fp.STATE/'data-maintenance.lock'):
 assert cb.active()['transaction']=='event-time-fallback-20261013-r01'
 app=role('analytics');gateway=role('ai-gateway')
 status=json.loads(subprocess.check_output(['docker','exec',app['Id'],'python3','-c',probe],timeout=10))
 assert status['streamCounts']['running']==status['streamCounts']['starting']==0
 subprocess.run(['docker','start',gateway['Id']],capture_output=True,check=True,timeout=45)
 time.sleep(12)
 nginx=subprocess.run(['docker','exec',gateway['Id'],'nginx','-t'],capture_output=True,text=True,timeout=10)
 status=json.loads(subprocess.check_output(['docker','exec',app['Id'],'python3','-c',probe],timeout=10))
 restarted=status['streamCounts']['running'] or status['streamCounts']['starting']
 if restarted:
  cb.execute(['docker','stop','--timeout','30',gateway['Id']],45)
  helper=Path('/usr/local/lib/contextra-maintenance/portable-20261006T192646/stop_channels.py').read_bytes()
  p=subprocess.run(['docker','exec','-i',app['Id'],'python3','-'],input=helper,capture_output=True,timeout=240)
  assert p.returncode==0,p.stderr.decode()[-500:]
  status=json.loads(subprocess.check_output(['docker','exec',app['Id'],'python3','-c',probe],timeout=10))
 print(json.dumps({'nginx_config_ok':nginx.returncode==0,'external_start_recurred':bool(restarted),
  'gateway_running':role('ai-gateway')['State']['Running'],'runtime':status}))
'''
out=remote.run(code,root=True,timeout=360)
remote.save('gateway-final.json',out)
print(out.decode())
