Track created instances, show only ours in UI, v1.0.36
This commit is contained in:
+1
-1
@@ -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")
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user