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 import bp as api_bp
|
||||||
from routes.api_test import bp as api_test_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 = 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")
|
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 api.http_client import HttpClient
|
||||||
from operations.get_services import get_services, get_service_detail
|
from operations.get_services import get_services, get_service_detail
|
||||||
from operations.get_instances import get_instances
|
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__)
|
bp = Blueprint("api_test", __name__)
|
||||||
|
|
||||||
@@ -38,8 +40,13 @@ def api_operations(svc_id):
|
|||||||
try:
|
try:
|
||||||
detail = get_service_detail(_client(), svc_id)
|
detail = get_service_detail(_client(), svc_id)
|
||||||
ops = detail.get("operations", [])
|
ops = detail.get("operations", [])
|
||||||
|
# только отслеживаемые инстансы этого сервиса
|
||||||
|
tracked = tracker_list()
|
||||||
|
tracked_uids = {t["instanceUid"] for t in tracked if t["svcId"] == svc_id}
|
||||||
instances = get_instances(_client())
|
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({
|
return jsonify({
|
||||||
"svc": detail.get("svc", ""),
|
"svc": detail.get("svc", ""),
|
||||||
"operations": [{"svcOperationId": o["svcOperationId"], "operation": o["operation"]} for o in ops],
|
"operations": [{"svcOperationId": o["svcOperationId"], "operation": o["operation"]} for o in ops],
|
||||||
@@ -115,6 +122,7 @@ def api_test():
|
|||||||
result["status"] = "OK"
|
result["status"] = "OK"
|
||||||
result["instanceUid"] = instance_uid
|
result["instanceUid"] = instance_uid
|
||||||
result["duration"] = round(time.time() - t0, 1)
|
result["duration"] = round(time.time() - t0, 1)
|
||||||
|
tracker_add(instance_uid, svc_id, display_name)
|
||||||
return jsonify(result)
|
return jsonify(result)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
result["status"] = "TIMEOUT"
|
result["status"] = "TIMEOUT"
|
||||||
@@ -136,6 +144,8 @@ def api_test():
|
|||||||
result["status"] = "OK"
|
result["status"] = "OK"
|
||||||
result["instanceUid"] = instance_uid
|
result["instanceUid"] = instance_uid
|
||||||
result["duration"] = round(time.time() - t0, 1)
|
result["duration"] = round(time.time() - t0, 1)
|
||||||
|
if op_name == "delete":
|
||||||
|
tracker_remove(instance_uid)
|
||||||
return jsonify(result)
|
return jsonify(result)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
result["status"] = "TIMEOUT"
|
result["status"] = "TIMEOUT"
|
||||||
|
|||||||
Reference in New Issue
Block a user