# Publish section 8 (#callwall) to the existing intraday-recoveries page: remote tar backup + server-side .bak of index.html first; new callwall/ subfolder only.
import paramiko,os,glob,time,html
N='intraday-recoveries'; R=f'/opt/apps/rl-trading-nifty/results/research/{N}'; L='/workspace/research/flow-forensics-2026-10'; CW=f'{L}/callwall'
SKIP=('.pyc','.pkl')
for sub in ['results','scripts','charts']:
fs=sorted(os.path.basename(f) for f in glob.glob(f'{CW}/{sub}/*') if os.path.isfile(f) and not f.endswith(SKIP+('index.html',)))
open(f'{CW}/{sub}/index.html','w').write('
callwall/'+sub+'
back
")
c=paramiko.SSHClient(); c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect('187.127.176.216',username='root',key_filename='/home/box/.ssh/vps_aitrade',timeout=25)
def run(cmd):
i,o,e=c.exec_command(cmd); out=o.read().decode()+e.read().decode(); print(out.strip()); return out
ts=time.strftime('%Y%m%d-%H%M%S')
run(f'mkdir -p /opt/apps/rl-trading-nifty/backups && tar czf /opt/apps/rl-trading-nifty/backups/{N}.{ts}.pre-callwall.tgz -C {os.path.dirname(R)} {N} && echo remote-tar-backup-ok')
run(f'[ -e {R}/index.html.bak-20261026-callwall ] || cp -p {R}/index.html {R}/index.html.bak-20261026-callwall; ls -la {R}/index.html*')
run(f'test -e {R}/callwall && echo EXISTS-callwall || echo new-callwall-folder')
run(f'mkdir -p {R}/callwall/charts {R}/callwall/results {R}/callwall/scripts')
s=c.open_sftp(); n=0
s.put(f'{L}/recov/index.html',f'{R}/index.html'); n+=1
s.put(f'{L}/recov/scripts/gen_page.py',f'{R}/scripts/gen_page.py'); n+=1
for sub in ['charts','results','scripts']:
for f in glob.glob(f'{CW}/{sub}/*'):
if os.path.isfile(f) and not f.endswith(SKIP): s.put(f,f'{R}/callwall/{sub}/'+os.path.basename(f)); n+=1
s.put(f'{CW}/PROGRESS.md',f'{R}/callwall/PROGRESS.md'); n+=1
s.close(); print('uploaded',n)
run(f'chmod -R a+rX {R}; du -sh {R}/callwall')
for u in ['','callwall/charts/today_callwall.png','callwall/charts/rule_cum.png','callwall/results/','callwall/results/hit_stats.csv','callwall/results/fixed_rule.json','callwall/scripts/','callwall/scripts/events.py']:
run(f'curl -sk -o /dev/null -w "%{{http_code}} {u}\\n" --max-time 15 --resolve aitradeanalytics.tech:443:127.0.0.1 https://aitradeanalytics.tech/rl-trading/research/{N}/{u}')
run(f'curl -sk --max-time 15 --resolve aitradeanalytics.tech:443:127.0.0.1 https://aitradeanalytics.tech/rl-trading/research/{N}/ | grep -c "id=callwall"')