From ab9a82a33d98c53e3acf69934c6bc678a0753093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 21 Aug 2026 15:06:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20/fetch=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20egress=20(Flask=20->=20=D0=92?= =?UTF-8?q?=D0=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/app.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/site/app.py b/site/app.py index 8896d8a..ffd976b 100644 --- a/site/app.py +++ b/site/app.py @@ -140,6 +140,35 @@ def messages(): return jsonify(result) +@app.route("/fetch") +def fetch_url(): + """ВРЕМЕННЫЙ: исходящий GET по URL (проверка egress из кластера). + + Нужен для проверки схемы «Flask сам тянет большой файл с ВМ». + Делает GET по переданному url и возвращает HTTP-статус + размер ответа. + """ + import requests + + url = request.args.get("url", "") + if not url: + return jsonify({"ok": False, "error": "нет параметра url"}), 400 + + t0 = time.time() + try: + r = requests.get(url, timeout=120) + size = len(r.content) + return jsonify({ + "ok": True, + "url": url, + "status": r.status_code, + "size_bytes": size, + "size_mb": round(size / (1024 * 1024), 3), + "total_ms": round((time.time() - t0) * 1000, 2), + }) + except Exception as e: + return jsonify({"ok": False, "error": type(e).__name__ + ": " + str(e), "url": url}), 502 + + if __name__ == "__main__": # ОБЯЗАТЕЛЬНО для платформы: `python site/app.py` должен стартовать сервер. # debug=False - прод-режим, без reloader (иначе поднимается второй процесс).