v1.0.51: auto-detect stand (dev/test); init instance_groups; _finish_op full try/except
This commit is contained in:
+28
-23
@@ -178,33 +178,38 @@ def _finish_op(client, op_uid, instance_uid, svc_id, display_name, op_name, svc_
|
||||
deadline = t0 + 300
|
||||
while time.time() < deadline:
|
||||
try:
|
||||
data = client.get(f"/instanceOperations/{op_uid}?fields=dtFinish,isSuccessful,errorLog,isInProgress,duration,stages")
|
||||
except Exception:
|
||||
time.sleep(5)
|
||||
continue
|
||||
op = data.get("instanceOperation", {})
|
||||
dt_finish = op.get("dtFinish")
|
||||
# Обновляем stages по мере появления
|
||||
_op_results[op_uid] = {
|
||||
"status": "RUNNING",
|
||||
"stages": op.get("stages", []),
|
||||
"duration": round(time.time() - t0, 1),
|
||||
}
|
||||
if dt_finish and str(dt_finish).strip():
|
||||
is_ok = op.get("isSuccessful")
|
||||
err = op.get("errorLog") or ""
|
||||
print(f"[DEBUG] _finish_op op_uid={op_uid} isSuccessful={is_ok!r}", flush=True)
|
||||
# tracker_add для create уже вызван синхронно в api_test()
|
||||
if is_ok and is_delete:
|
||||
tracker_remove(instance_uid)
|
||||
try:
|
||||
data = client.get(f"/instanceOperations/{op_uid}?fields=dtFinish,isSuccessful,errorLog,isInProgress,duration,stages")
|
||||
except Exception:
|
||||
time.sleep(5)
|
||||
continue
|
||||
op = data.get("instanceOperation", {})
|
||||
dt_finish = op.get("dtFinish")
|
||||
# Обновляем stages по мере появления
|
||||
_op_results[op_uid] = {
|
||||
"status": "OK" if is_ok else "FAIL",
|
||||
"error": str(err) if err else "",
|
||||
"status": "RUNNING",
|
||||
"stages": op.get("stages", []),
|
||||
"duration": round(time.time() - t0, 1),
|
||||
}
|
||||
return
|
||||
time.sleep(5)
|
||||
if dt_finish and str(dt_finish).strip():
|
||||
is_ok = op.get("isSuccessful")
|
||||
err = op.get("errorLog") or ""
|
||||
print(f"[DEBUG] _finish_op op_uid={op_uid} isSuccessful={is_ok!r}", flush=True)
|
||||
# tracker_add для create уже вызван синхронно в api_test()
|
||||
if is_ok and is_delete:
|
||||
tracker_remove(instance_uid)
|
||||
_op_results[op_uid] = {
|
||||
"status": "OK" if is_ok else "FAIL",
|
||||
"error": str(err) if err else "",
|
||||
"stages": op.get("stages", []),
|
||||
"duration": round(time.time() - t0, 1),
|
||||
}
|
||||
return
|
||||
time.sleep(5)
|
||||
except Exception:
|
||||
import traceback
|
||||
print(f"[ERROR] _finish_op crashed: {traceback.format_exc()}", flush=True)
|
||||
time.sleep(5)
|
||||
_op_results[op_uid] = {"status": "TIMEOUT", "duration": round(time.time() - t0, 1)}
|
||||
|
||||
|
||||
|
||||
+43
-23
@@ -8,6 +8,24 @@ from runner import load_config
|
||||
|
||||
bp = Blueprint("main", __name__)
|
||||
|
||||
STANDS = [
|
||||
"https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc",
|
||||
"https://lk-api-gateway-test.ngcloud.ru/api/v1/svc",
|
||||
]
|
||||
|
||||
|
||||
def _detect_endpoint(token):
|
||||
"""Пробуем токен против dev и test стендов, возвращаем рабочий URL."""
|
||||
for ep in STANDS:
|
||||
try:
|
||||
c = HttpClient(ep, token)
|
||||
data = c.get("/instances", params={"pageSize": 1, "page": 1})
|
||||
if data.get("results") is not None:
|
||||
return ep
|
||||
except Exception:
|
||||
continue
|
||||
return None
|
||||
|
||||
|
||||
def _mask(s):
|
||||
if not s or len(s) < 8:
|
||||
@@ -74,32 +92,34 @@ def index():
|
||||
|
||||
services = []
|
||||
instances = []
|
||||
instance_groups = {}
|
||||
config = {}
|
||||
if active_token:
|
||||
try:
|
||||
client = HttpClient(
|
||||
current_app.config["NUBES_API_ENDPOINT"],
|
||||
active_token,
|
||||
)
|
||||
org = get_organization(client)
|
||||
raw_svc = get_services(client)
|
||||
services = sorted(raw_svc, key=lambda s: (s.get("svcId", 0), s.get("svc", "")))
|
||||
# инфраструктурные сервисы (платформа/среда)
|
||||
infra_ids = {2, 12, 21, 22, 25, 26, 29, 110, 150}
|
||||
raw_inst = get_instances(client)
|
||||
instances = [i for i in raw_inst
|
||||
if i.get("explainedStatus") not in ("deleted", "not created")
|
||||
and i.get("serviceId") in infra_ids]
|
||||
instances.sort(key=lambda i: (0 if i.get("serviceId") == 19 else 1, i.get("displayName", "")))
|
||||
endpoint = _detect_endpoint(active_token)
|
||||
if endpoint:
|
||||
try:
|
||||
client = HttpClient(endpoint, active_token)
|
||||
org = get_organization(client)
|
||||
raw_svc = get_services(client)
|
||||
services = sorted(raw_svc, key=lambda s: (s.get("svcId", 0), s.get("svc", "")))
|
||||
# инфраструктурные сервисы (платформа/среда)
|
||||
infra_ids = {2, 12, 21, 22, 25, 26, 29, 110, 150}
|
||||
raw_inst = get_instances(client)
|
||||
instances = [i for i in raw_inst
|
||||
if i.get("explainedStatus") not in ("deleted", "not created")
|
||||
and i.get("serviceId") in infra_ids]
|
||||
instances.sort(key=lambda i: (0 if i.get("serviceId") == 19 else 1, i.get("displayName", "")))
|
||||
|
||||
# group by service type
|
||||
instance_groups = {}
|
||||
for i in instances:
|
||||
svc_name = i.get("svc", "Прочее")
|
||||
instance_groups.setdefault(svc_name, []).append(i)
|
||||
config = load_config()
|
||||
except Exception as e:
|
||||
error = str(e)
|
||||
# group by service type
|
||||
instance_groups = {}
|
||||
for i in instances:
|
||||
svc_name = i.get("svc", "Прочее")
|
||||
instance_groups.setdefault(svc_name, []).append(i)
|
||||
config = load_config()
|
||||
except Exception as e:
|
||||
error = str(e)
|
||||
else:
|
||||
error = "Токен невалиден или просрочен"
|
||||
|
||||
return render_template("index.html",
|
||||
organization=org, error=error,
|
||||
|
||||
Reference in New Issue
Block a user