v1.0.74: version bump before push

This commit is contained in:
2026-07-27 12:58:55 +04:00
parent a06a147c4c
commit 0248c78931
6 changed files with 54 additions and 26 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.71"
VERSION = "1.0.74"
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")
+5 -2
View File
@@ -129,12 +129,14 @@ def api_test():
svc_op_id = data["svcOperationId"]
params = data.get("params", {})
instance_uid = data.get("instanceUid")
display_name = data.get("displayName", f"autotest-{svc_id}")
display_name = data.get("displayName") or ""
client = _client()
try:
if op_name == "create":
if not display_name:
display_name = f"autotest-{svc_id}"
display_name = _unique_display_name(client, display_name)
payload = {"serviceId": svc_id, "displayName": display_name, "descr": ""}
resp = client.post("/instances", payload)
@@ -190,8 +192,9 @@ def api_test():
# фоном ждать завершения
is_delete = (op_name == "delete")
display_name = display_name or instance_uid or f"instance-{svc_id}"
threading.Thread(target=_finish_op, args=(client, op_uid, instance_uid, svc_id, display_name, op_name, svc_op_id, False, is_delete), daemon=True).start()
return jsonify({"status": "RUNNING", "opUid": op_uid, "instanceUid": instance_uid})
return jsonify({"status": "RUNNING", "opUid": op_uid, "instanceUid": instance_uid, "displayName": display_name})
except Exception as e:
import traceback
+13 -17
View File
@@ -156,39 +156,35 @@ def api_operations(svc_id):
tracked_by_uid = {t["instanceUid"]: t for t in tracked if t["svcId"] == svc_id}
instances = get_instances(client)
nubes_uids = {i["instanceUid"] for i in instances}
svc_instances_by_name = {}
def _store_instance(item):
display_name = str(item.get("displayName", "") or "")
if not display_name.startswith(AUTOTEST_PREFIX):
return
existing = svc_instances_by_name.get(display_name)
if existing is None:
svc_instances_by_name[display_name] = item
return
if existing.get("status") == "creating" and item.get("status") != "creating":
svc_instances_by_name[display_name] = item
svc_instances = []
cloud_names = set()
for i in instances:
if not str(i.get("displayName", "")).startswith(AUTOTEST_PREFIX):
display_name = str(i.get("displayName", "") or "")
if not display_name.startswith(AUTOTEST_PREFIX):
continue
if i.get("explainedStatus") in ("deleted",):
continue
item = dict(i)
item["status"] = _resolve_instance_status(item, tracked_by_uid.get(i.get("instanceUid")))
_store_instance(item)
# Если Nubes ещё не отдаёт только что созданный autotest-инстанс, добавляем его из трекера.
svc_instances.append(item)
cloud_names.add(display_name)
# tracker — только временный fallback, если cloud ещё не отдал конкретный autotest-инстанс
for uid, t in tracked_by_uid.items():
if uid not in nubes_uids:
_store_instance({
display_name = str(t.get("displayName", "") or "")
if display_name in cloud_names:
continue
svc_instances.append({
"instanceUid": uid,
"displayName": t["displayName"],
"displayName": display_name,
"serviceId": svc_id,
"svc": detail.get("svc", ""),
"explainedStatus": "",
"status": "creating",
})
svc_instances = list(svc_instances_by_name.values())
return jsonify({"svc": detail.get("svc", ""), "operations": ops, "instances": svc_instances})
except Exception as e:
return jsonify({"error": str(e)}), 500
+5 -5
View File
@@ -263,10 +263,10 @@ function setRunningState(opName, displayName){
async function executeOp(params){
stopPoll();
// Захватить displayName ДО очистки формы
const isCreate=selectedOp?.opName==='create';
const displayNameInput=document.getElementById('param-displayname');
const displayNameSuffix=(displayNameInput?.value||'').trim() || 'tut';
const displayName=`${AUTOTEST_PREFIX}${displayNameSuffix}`;
const displayNameSuffix=(displayNameInput?.value||'').trim();
const displayName=isCreate ? `${AUTOTEST_PREFIX}${displayNameSuffix || makeCreateDisplayName()}` : findInstName();
document.getElementById('params-card').style.display='block';
document.getElementById('params-form').innerHTML='';
const btn=document.getElementById('btn-test');
@@ -284,13 +284,13 @@ async function executeOp(params){
svcOperationId:selectedOp.opId,
params,
instanceUid:selectedInst||'',
displayName
displayName:isCreate ? displayName : ''
})});
const d=await r.json();
if(d.status==='FAIL'){document.getElementById('test-status').innerHTML=` <span class="badge">FAIL</span> ${d.error||''}`;btn.disabled=false;return;}
// start polling
const opUid=d.opUid;
const instanceName=d.displayName||displayName;
const instanceName=d.displayName||displayName||findInstName();
pollTimer=setInterval(async()=>{
const sr=await fetch('/api/test/status/'+opUid);
const sd=await sr.json();