diff --git a/site/app.py b/site/app.py index 27aef84..8896d8a 100644 --- a/site/app.py +++ b/site/app.py @@ -17,6 +17,10 @@ import time from flask import Flask, jsonify, render_template, request +# Версия сборки. ВЫВОДИТСЯ на страницу и в /health - чтобы сразу видеть, +# какая версия реально задеплоена на платформу. +VERSION = "2.0.0" + # Явно указываем папки шаблонов и статики - # платформа запускает `python site/app.py` из корня репо, иначе Flask не найдёт шаблоны. app = Flask(__name__, template_folder="templates", static_folder="static") @@ -28,13 +32,13 @@ app = Flask(__name__, template_folder="templates", static_folder="static") @app.route("/") def index(): """Главная страница - форма выбора файла и загрузки.""" - return render_template("index.html") + return render_template("index.html", version=VERSION) @app.route("/health") def health(): - """Проверка живости для платформы.""" - return "ok" + """Проверка живости для платформы + версия сборки.""" + return "ok v" + VERSION @app.route("/upload", methods=["POST"]) @@ -83,6 +87,7 @@ def upload(): "md5": hashlib.md5(data).hexdigest(), # контрольная сумма принятых байт "meta": meta, } + result["version"] = VERSION # версия сборки прямо в ответе return jsonify(result) @@ -131,6 +136,7 @@ def messages(): "md5": hashlib.md5(data).hexdigest(), # контрольная сумма принятых байт "meta": meta, } + result["version"] = VERSION # версия сборки прямо в ответе return jsonify(result) diff --git a/site/static/style.css b/site/static/style.css index 99aad2b..eafaca4 100644 --- a/site/static/style.css +++ b/site/static/style.css @@ -21,6 +21,14 @@ h1 { margin-bottom: 6px; } +/* Версия сборки */ +.version { + font-size: 12px; + color: #2563eb; + font-weight: bold; + margin: 0 0 12px; +} + .hint { color: #555; font-size: 14px; diff --git a/site/templates/index.html b/site/templates/index.html index b21aebb..41e42f1 100644 --- a/site/templates/index.html +++ b/site/templates/index.html @@ -10,6 +10,7 @@

LoadTest - проверка загрузки файлов

+

Сборка: v{{ version }}

Выберите ОДИН файл (в т.ч. большой) и нажмите «Загрузить». Файл читается в память Flask (на диск не пишется). Результат: файл дошёл или нет + статистика. @@ -215,6 +216,7 @@ 'HTTP статус: ' + httpStatus + '\n\n'; out += '-- СЕРВЕР (что реально дошло) --\n' + + 'Версия сборки: ' + (data.version || '?') + '\n' + 'Принято байт: ' + m.size_bytes + ' (' + m.size_kb + ' КБ)\n' + 'Чтение в память: ' + s.read_ms + ' мс\n' + 'Обработка всего: ' + s.total_ms + ' мс\n' + @@ -382,6 +384,7 @@ out += '-- СЕРВЕР (что реально дошло) --\n' + 'Имя файла: ' + f.name + '\n' + + 'Версия сборки: ' + (data.version || '?') + '\n' + 'MIME: ' + f.mime + '\n' + 'Принято байт: ' + f.size_bytes + ' (' + f.size_mb + ' МБ)\n' + 'Чтение в память: ' + s.read_ms + ' мс\n' + @@ -398,6 +401,20 @@ result.textContent = out; } + + // ---- Показать фактическую версию сборки с /health ---- + function showRuntimeVersion() { + var el = document.getElementById('healthInfo'); + var xhr = new XMLHttpRequest(); + xhr.open('GET', '/health'); + xhr.timeout = 5000; + xhr.onload = function () { + if (el) el.textContent = '| /health: ' + (xhr.responseText || ''); + }; + xhr.onerror = function () { if (el) el.textContent = '| /health: недоступен'; }; + xhr.send(); + } + showRuntimeVersion();