diff --git a/proxy/healthcheck.py b/proxy/healthcheck.py
index 689f244..d3e5b43 100755
--- a/proxy/healthcheck.py
+++ b/proxy/healthcheck.py
@@ -6,6 +6,6 @@ def init_healthcheck(app):
def healthcheck():
"""Health check route to monitor service status"""
try:
- return Response("Works normally", status=200)
+ return Response("healthy", status=200)
except Exception as e:
return f"Error: {e}", 500
diff --git a/proxy/rss_proxy.py b/proxy/rss_proxy.py
index d06bd1a..d3c8e08 100755
--- a/proxy/rss_proxy.py
+++ b/proxy/rss_proxy.py
@@ -3,62 +3,58 @@ import os
import requests
import redis
import xml.etree.ElementTree as ET
-from flask import Flask, request, Response
+from flask import request, Response
-app = Flask(__name__)
PROXY_URL = os.getenv("PROXY_URL")
REDIS_URL = os.getenv("REDIS_URL", "redis://localhost:6379/0")
-CACHE_TTL = int(os.getenv("CACHE_TTL", 3600)) # По умолчанию 1 час
+CACHE_TTL = int(os.getenv("CACHE_TTL", 3600))
rdb = redis.from_url(REDIS_URL)
-@app.route("/proxy")
-def proxy():
- """Proxy RSS feed with per-item caching."""
- raw_query = request.query_string.decode()
- if raw_query.startswith("url="):
- url = urllib.parse.unquote(raw_query[4:])
- else:
- return "Missing URL", 400
+def init_proxy(app):
+ @app.route("/proxy")
+ def proxy():
+ """Proxy RSS feed with per-item caching."""
+ raw_query = request.query_string.decode()
+ if raw_query.startswith("url="):
+ url = urllib.parse.unquote(raw_query[4:])
+ else:
+ return "Missing URL", 400
- try:
- # Получаем ленту
- proxies = {"http": PROXY_URL, "https": PROXY_URL} if PROXY_URL else None
- r = requests.get(url, timeout=10, proxies=proxies)
- r.encoding = "windows-1251" if "windows-1251" in r.headers.get("content-type", "").lower() else r.apparent_encoding
- xml_data = r.text.replace('', '')
+ try:
+ # Получаем ленту
+ proxies = {"http": PROXY_URL, "https": PROXY_URL} if PROXY_URL else None
+ r = requests.get(url, timeout=10, proxies=proxies)
+ r.encoding = "windows-1251" if "windows-1251" in r.headers.get("content-type", "").lower() else r.apparent_encoding
+ xml_data = r.text.replace('', '')
- # Разбираем XML
- root = ET.fromstring(xml_data)
- items = root.findall(".//item")
+ # Разбираем XML
+ root = ET.fromstring(xml_data)
+ items = root.findall(".//item")
- cached_items = []
- new_items = []
+ cached_items = []
+ new_items = []
- for item in items:
- guid = item.find("guid").text if item.find("guid") is not None else None
- if guid:
- cache_key = f"rss:item:{guid}"
- cached_item = rdb.get(cache_key)
+ for item in items:
+ guid = item.find("guid").text if item.find("guid") is not None else None
+ if guid:
+ cache_key = f"rss:item:{guid}"
+ cached_item = rdb.get(cache_key)
- if cached_item:
- cached_items.append(cached_item.decode())
- else:
- item_str = ET.tostring(item, encoding="unicode")
- rdb.setex(cache_key, CACHE_TTL, item_str)
- new_items.append(item_str)
+ if cached_item:
+ cached_items.append(cached_item.decode())
+ else:
+ item_str = ET.tostring(item, encoding="unicode")
+ rdb.setex(cache_key, CACHE_TTL, item_str)
+ new_items.append(item_str)
- # Собираем финальный RSS
- final_items = cached_items + new_items
- response_xml = f'{"".join(final_items)}'
+ # Собираем финальный RSS
+ final_items = cached_items + new_items
+ response_xml = f'{"".join(final_items)}'
- return Response(response_xml, content_type="application/xml; charset=utf-8")
+ return Response(response_xml, content_type="application/xml; charset=utf-8")
- except Exception as e:
- return f"Error: {e}", 500
-
-
-if __name__ == "__main__":
- app.run(host="0.0.0.0", port=5050)
+ except Exception as e:
+ return f"Error: {e}", 500
diff --git a/tests/test_app.py b/tests/test_app.py
index 5367773..8c7f51d 100644
--- a/tests/test_app.py
+++ b/tests/test_app.py
@@ -15,7 +15,7 @@ class FlaskTestCase(unittest.TestCase):
"""Check health endpoint."""
response = self.app.get('/health')
self.assertEqual(response.status_code, 200)
- self.assertEqual(response.data, b'Works normally')
+ self.assertEqual(response.data, b'healthy')
@patch("proxy.rss_proxy.requests.get")
def test_proxy_success(self, mock_get):