diff --git a/site/app.py b/site/app.py index c5815e9..605b43f 100644 --- a/site/app.py +++ b/site/app.py @@ -2,21 +2,47 @@ polygon v0.1.0 — Mock Nubes API. Эмулятор REST API облачной платформы Nubes для интеграционных тестов. -Эндпоинты с префиксом /api/v1/svc притворяются реальным Nubes API. +Все эндпоинты с префиксом /api/v1/svc притворяются реальным Nubes API. Состояние инстансов/операций — в памяти (MockState). +Конфиги сервисов — из services/*.yaml (сгенерированы from_stands.py). Деплой: Nubes pythonk8s (managed service) с gunicorn: gunicorn app:app --workers 2 --bind 0.0.0.0:8000 + +Переменные окружения: + MOCK_OP_DELAY — задержка операции в секундах (по умолчанию 0.1) """ import os -from flask import Flask, jsonify, request +import time +from datetime import datetime, timezone + +from flask import Flask, jsonify, make_response, request + +import config_loader +import mock_state +import state_machine -# Версия полигона — независима от app-autotest VERSION = "0.1.0" +# Задержка операции (синхронный sleep в /run) +MOCK_OP_DELAY = float(os.getenv("MOCK_OP_DELAY", "0.1")) + app = Flask(__name__, template_folder="templates", static_folder="static") +# Загружаем сервисы при старте +_SERVICES, _OPS_INDEX = config_loader.load_services("services") +_STATE = mock_state.state + + +def _now(): + """UTC-строка в ISO-формате с 'Z'.""" + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") + + +# =========================================================================== +# Health / Root +# =========================================================================== @app.route("/health") def health(): @@ -26,41 +52,366 @@ def health(): @app.route("/") def index(): - """Корневой эндпоинт — информация о сервисе (HTML).""" + """Корневой эндпоинт — HTML с версией и статусом.""" + svc_count = len(_SERVICES) + inst_count = len(_STATE.instances) return f"""
● running
-Mock Nubes API — эмулятор REST API облачной платформы.
+Сервисов: {svc_count} | Инстансов: {inst_count} | delay: {MOCK_OP_DELAY}s
Эндпоинты: /api/v1/svc/*
Сброс: POST /api/v1/svc/_mock/reset