Track created instances, show only ours in UI, v1.0.36

This commit is contained in:
2026-07-24 16:51:08 +04:00
parent 20573201b9
commit 560bd62fce
3 changed files with 55 additions and 2 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ from routes.main import bp as main_bp
from routes.api import bp as api_bp
from routes.api_test import bp as api_test_bp
VERSION = "1.0.35"
VERSION = "1.0.36"
app = Flask(__name__, template_folder="templates", static_folder="static")
app.config["NUBES_API_ENDPOINT"] = os.getenv("NUBES_API_ENDPOINT", "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc")
+43
View File
@@ -0,0 +1,43 @@
"""Трекер созданных инстансов — только те что породило приложение."""
import json
import os
import threading
_LOCK = threading.Lock()
_PATH = os.path.join(os.path.dirname(__file__), "..", "instances.json")
def _load():
try:
with open(_PATH) as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return {}
def _save(data):
with open(_PATH, "w") as f:
json.dump(data, f, indent=2)
def add(instance_uid, svc_id, display_name):
with _LOCK:
data = _load()
data[instance_uid] = {
"svcId": svc_id,
"displayName": display_name,
"instanceUid": instance_uid,
}
_save(data)
def remove(instance_uid):
with _LOCK:
data = _load()
data.pop(instance_uid, None)
_save(data)
def list_all():
with _LOCK:
return list(_load().values())
+11 -1
View File
@@ -3,6 +3,8 @@ from flask import Blueprint, current_app, jsonify, request
from api.http_client import HttpClient
from operations.get_services import get_services, get_service_detail
from operations.get_instances import get_instances
from operations.tracker import add as tracker_add, list_all as tracker_list
from operations.tracker import remove as tracker_remove
bp = Blueprint("api_test", __name__)
@@ -38,8 +40,13 @@ def api_operations(svc_id):
try:
detail = get_service_detail(_client(), svc_id)
ops = detail.get("operations", [])
# только отслеживаемые инстансы этого сервиса
tracked = tracker_list()
tracked_uids = {t["instanceUid"] for t in tracked if t["svcId"] == svc_id}
instances = get_instances(_client())
svc_instances = [i for i in instances if i.get("serviceId") == svc_id and i.get("explainedStatus") not in ("deleted", "not created")]
svc_instances = [i for i in instances
if i.get("instanceUid") in tracked_uids
and i.get("explainedStatus") not in ("deleted", "not created")]
return jsonify({
"svc": detail.get("svc", ""),
"operations": [{"svcOperationId": o["svcOperationId"], "operation": o["operation"]} for o in ops],
@@ -115,6 +122,7 @@ def api_test():
result["status"] = "OK"
result["instanceUid"] = instance_uid
result["duration"] = round(time.time() - t0, 1)
tracker_add(instance_uid, svc_id, display_name)
return jsonify(result)
time.sleep(5)
result["status"] = "TIMEOUT"
@@ -136,6 +144,8 @@ def api_test():
result["status"] = "OK"
result["instanceUid"] = instance_uid
result["duration"] = round(time.time() - t0, 1)
if op_name == "delete":
tracker_remove(instance_uid)
return jsonify(result)
time.sleep(5)
result["status"] = "TIMEOUT"