#!/bin/sh
TOKEN="dev-admin-token"
BASE="http://127.0.0.1:19088"
echo "=== nodes online ==="
curl -sS "$BASE/api/v1/nodes" -H "Authorization: Bearer $TOKEN" 2>/dev/null | python3 -c "
import sys,json
from collections import Counter
items=json.load(sys.stdin)
if isinstance(items,dict): items=items.get('nodes',[])
print(Counter(n.get('connection_state') for n in items))
"
echo "=== orphan instances cleanup ==="
# decommission the 13 orphan instances bound to failed deployments
python3 << 'EOF'
import json, urllib.request
BASE="http://127.0.0.1:19088"
TOKEN="dev-admin-token"
pairs = [
    ('deploy-f23e64e7-979','friend-fada02e6','node-2c6966ac'),
    ('deploy-78b3ef6e-9f3','friend-33953b97','node-028b8ed4'),
    ('deploy-d5562f8f-c05','friend-cf8a5bba','node-77bfde78'),
    ('deploy-e96da620-50e','friend-24654384','node-9817e013'),
    ('deploy-1f970fe1-14e','friend-c2c95ebc','node-a2ff9fee'),
    ('deploy-b42e2b1d-469','friend-6368a2e7','node-55a470cc'),
    ('deploy-e9c89778-862','friend-58aedcb6','node-809f9469'),
    ('deploy-62080a6d-024','friend-7013d01f','node-0fff14de'),
    ('deploy-ae9e10b0-f7b','friend-c7c66057','node-1e3e064e'),
    ('deploy-69a540b6-0ca','friend-c2ffba03','node-1d17fd19'),
    ('deploy-54015964-c87','friend-2d8eba0b','node-563a8fe9'),
    ('deploy-2cba04fe-e0f','friend-dc86d8f3','node-c11d7e6f'),
    ('deploy-74ba1c5f-d21','friend-b45a4c1b','node-f48dd44d'),
]
ok=fail=0
for dep, iid, nid in pairs:
    req = urllib.request.Request(
        BASE+"/api/v1/instances/"+iid+"/commands",
        data=json.dumps({"action":"instance.decommission","payload":{"deployment_id":dep,"purge_data":True,"uninstall_binary":True}}).encode(),
        headers={"Authorization":"Bearer "+TOKEN,"Content-Type":"application/json"},
        method="POST")
    try:
        with urllib.request.urlopen(req, timeout=10) as r:
            body=r.read()
            ok+=1
            print("queued", iid, r.status)
    except Exception as e:
        fail+=1
        print("FAIL", iid, str(e)[:100])
print("done ok=%d fail=%d" % (ok,fail))
EOF
