From c2e450f86f989873eefc1f77aa7d9c0b9aa81dc9 Mon Sep 17 00:00:00 2001 From: naeel Date: Tue, 18 Aug 2026 09:14:31 +0400 Subject: [PATCH] =?UTF-8?q?LoadTest=20v2.0.0:=20=D0=B2=D0=B5=D1=80=D1=81?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20(=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0,=20/health,=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B2=D0=B5=D1=82=D1=8B)=20+=20=D0=B2=D1=8B=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/app.py | 12 +++++++++--- site/static/style.css | 8 ++++++++ site/templates/index.html | 17 +++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) 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();