Повторный фикс url
This commit is contained in:
@@ -6,6 +6,7 @@ from typing import Callable, Optional
|
|||||||
from .async_parser import AsyncLyngSatParser
|
from .async_parser import AsyncLyngSatParser
|
||||||
from .models import LyngSat
|
from .models import LyngSat
|
||||||
from mainapp.models import Polarization, Standard, Modulation, Satellite
|
from mainapp.models import Polarization, Standard, Modulation, Satellite
|
||||||
|
from dbapp.settings.base import FLARESOLVERR_URL
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -189,7 +190,7 @@ def fill_lyngsat_data_async(
|
|||||||
try:
|
try:
|
||||||
# Создаем парсер
|
# Создаем парсер
|
||||||
parser = AsyncLyngSatParser(
|
parser = AsyncLyngSatParser(
|
||||||
flaresolver_url="http://localhost:8191/v1",
|
flaresolver_url=FLARESOLVERR_URL,
|
||||||
target_sats=target_sats,
|
target_sats=target_sats,
|
||||||
regions=regions,
|
regions=regions,
|
||||||
use_cache=use_cache
|
use_cache=use_cache
|
||||||
|
|||||||
243
dbapp/test_lyngsat_connection.py
Normal file
243
dbapp/test_lyngsat_connection.py
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Diagnostic script to test LyngSat parser connectivity in Docker environment.
|
||||||
|
Run this inside the container to verify FlareSolver connection.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
# Inside Docker container:
|
||||||
|
python test_lyngsat_connection.py
|
||||||
|
|
||||||
|
# Or with Django environment:
|
||||||
|
python manage.py shell < test_lyngsat_connection.py
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import requests
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
# Add Django project to path
|
||||||
|
sys.path.insert(0, '/app')
|
||||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dbapp.settings.production')
|
||||||
|
|
||||||
|
|
||||||
|
def test_connection(url: str, timeout: int = 10) -> dict:
|
||||||
|
"""Test connection to a given URL"""
|
||||||
|
result = {
|
||||||
|
"url": url,
|
||||||
|
"success": False,
|
||||||
|
"status_code": None,
|
||||||
|
"error": None,
|
||||||
|
"response_time": None
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
start_time = datetime.now()
|
||||||
|
response = requests.get(url, timeout=timeout)
|
||||||
|
end_time = datetime.now()
|
||||||
|
|
||||||
|
result["success"] = True
|
||||||
|
result["status_code"] = response.status_code
|
||||||
|
result["response_time"] = (end_time - start_time).total_seconds()
|
||||||
|
|
||||||
|
except requests.exceptions.ConnectionError as e:
|
||||||
|
result["error"] = f"Connection Error: {str(e)}"
|
||||||
|
except requests.exceptions.Timeout as e:
|
||||||
|
result["error"] = f"Timeout Error: {str(e)}"
|
||||||
|
except Exception as e:
|
||||||
|
result["error"] = f"Unexpected Error: {str(e)}"
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def test_flaresolverr(base_url: str) -> dict:
|
||||||
|
"""Test FlareSolver API endpoint"""
|
||||||
|
result = {
|
||||||
|
"base_url": base_url,
|
||||||
|
"success": False,
|
||||||
|
"error": None,
|
||||||
|
"response_time": None
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
start_time = datetime.now()
|
||||||
|
payload = {
|
||||||
|
"cmd": "request.get",
|
||||||
|
"url": "https://www.lyngsat.com/europe.html",
|
||||||
|
"maxTimeout": 60000
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.post(f"{base_url}/v1", json=payload, timeout=30)
|
||||||
|
end_time = datetime.now()
|
||||||
|
|
||||||
|
result["success"] = response.status_code == 200
|
||||||
|
result["status_code"] = response.status_code
|
||||||
|
result["response_time"] = (end_time - start_time).total_seconds()
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
json_response = response.json()
|
||||||
|
result["solution_status"] = json_response.get("status")
|
||||||
|
result["has_solution"] = "solution" in json_response
|
||||||
|
|
||||||
|
except requests.exceptions.ConnectionError as e:
|
||||||
|
result["error"] = f"Connection Error: {str(e)}"
|
||||||
|
except requests.exceptions.Timeout as e:
|
||||||
|
result["error"] = f"Timeout Error: {str(e)}"
|
||||||
|
except Exception as e:
|
||||||
|
result["error"] = f"Unexpected Error: {str(e)}"
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def print_result(title: str, result: dict):
|
||||||
|
"""Pretty print test result"""
|
||||||
|
print(f"\n{'='*60}")
|
||||||
|
print(f" {title}")
|
||||||
|
print(f"{'='*60}")
|
||||||
|
|
||||||
|
for key, value in result.items():
|
||||||
|
if value is not None:
|
||||||
|
status_icon = "✓" if (key == "success" and value) else ("✗" if key == "success" else "→")
|
||||||
|
print(f"{status_icon} {key}: {value}")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("\n" + "="*60)
|
||||||
|
print(" LyngSat Parser Connection Diagnostic")
|
||||||
|
print("="*60)
|
||||||
|
print(f"Timestamp: {datetime.now().isoformat()}")
|
||||||
|
print(f"Python: {sys.version}")
|
||||||
|
|
||||||
|
# Environment info
|
||||||
|
print("\n" + "-"*60)
|
||||||
|
print("Environment Variables:")
|
||||||
|
print("-"*60)
|
||||||
|
env_vars = [
|
||||||
|
"DJANGO_SETTINGS_MODULE",
|
||||||
|
"CELERY_BROKER_URL",
|
||||||
|
"REDIS_URL",
|
||||||
|
"FLARESOLVERR_URL",
|
||||||
|
"DB_HOST",
|
||||||
|
"DB_NAME"
|
||||||
|
]
|
||||||
|
for key in env_vars:
|
||||||
|
value = os.environ.get(key, "NOT SET")
|
||||||
|
print(f" {key}: {value}")
|
||||||
|
|
||||||
|
# Try to load Django settings
|
||||||
|
print("\n" + "-"*60)
|
||||||
|
print("Django Settings:")
|
||||||
|
print("-"*60)
|
||||||
|
try:
|
||||||
|
import django
|
||||||
|
django.setup()
|
||||||
|
from django.conf import settings
|
||||||
|
print(f" FLARESOLVERR_URL from settings: {getattr(settings, 'FLARESOLVERR_URL', 'NOT SET')}")
|
||||||
|
print(f" CELERY_BROKER_URL from settings: {getattr(settings, 'CELERY_BROKER_URL', 'NOT SET')}")
|
||||||
|
print(f" DEBUG: {settings.DEBUG}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f" ✗ Cannot load Django settings: {str(e)}")
|
||||||
|
|
||||||
|
# Test different FlareSolver URLs
|
||||||
|
test_urls = [
|
||||||
|
("localhost:8191", "http://localhost:8191"),
|
||||||
|
("flaresolverr:8191 (Docker service)", "http://flaresolverr:8191"),
|
||||||
|
("127.0.0.1:8191", "http://127.0.0.1:8191"),
|
||||||
|
]
|
||||||
|
|
||||||
|
print("\n" + "-"*60)
|
||||||
|
print("Testing Basic Connectivity:")
|
||||||
|
print("-"*60)
|
||||||
|
|
||||||
|
for name, url in test_urls:
|
||||||
|
result = test_connection(url)
|
||||||
|
print_result(f"Connection Test: {name}", result)
|
||||||
|
|
||||||
|
# Test FlareSolver API
|
||||||
|
print("\n" + "-"*60)
|
||||||
|
print("Testing FlareSolver API:")
|
||||||
|
print("-"*60)
|
||||||
|
|
||||||
|
api_urls = [
|
||||||
|
("localhost", "http://localhost:8191"),
|
||||||
|
("flaresolverr (Docker)", "http://flaresolverr:8191"),
|
||||||
|
]
|
||||||
|
|
||||||
|
for name, url in api_urls:
|
||||||
|
result = test_flaresolverr(url)
|
||||||
|
print_result(f"FlareSolver API Test: {name}", result)
|
||||||
|
|
||||||
|
# Test with actual parser
|
||||||
|
print("\n" + "-"*60)
|
||||||
|
print("Testing LyngSat Parser:")
|
||||||
|
print("-"*60)
|
||||||
|
|
||||||
|
try:
|
||||||
|
from lyngsatapp.parser import LyngSatParser
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
# Get URL from settings
|
||||||
|
settings_url = getattr(settings, 'FLARESOLVERR_URL', 'http://flaresolverr:8191/v1')
|
||||||
|
print(f"\nUsing FLARESOLVERR_URL from settings: {settings_url}")
|
||||||
|
|
||||||
|
# Test with different URLs
|
||||||
|
test_parser_urls = [
|
||||||
|
("Settings URL", settings_url),
|
||||||
|
("localhost", "http://localhost:8191/v1"),
|
||||||
|
("flaresolverr", "http://flaresolverr:8191/v1"),
|
||||||
|
]
|
||||||
|
|
||||||
|
for name, url in test_parser_urls:
|
||||||
|
print(f"\nTesting parser with {name} ({url})...")
|
||||||
|
try:
|
||||||
|
parser = LyngSatParser(flaresolver_url=url, regions=["europe"], target_sats=["express-am6"])
|
||||||
|
print(f" ✓ Parser initialized")
|
||||||
|
|
||||||
|
# Try to get one region page (with timeout)
|
||||||
|
print(f" → Fetching region page (this may take 10-30 seconds)...")
|
||||||
|
html_pages = parser.get_region_pages(["europe"])
|
||||||
|
if html_pages and html_pages[0]:
|
||||||
|
print(f" ✓ Successfully fetched page (length: {len(html_pages[0])} chars)")
|
||||||
|
# Check if it contains expected content
|
||||||
|
if "lyngsat" in html_pages[0].lower():
|
||||||
|
print(f" ✓ Page contains expected LyngSat content")
|
||||||
|
break # Success, no need to test other URLs
|
||||||
|
else:
|
||||||
|
print(f" ✗ Failed to fetch page (empty response)")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f" ✗ Parser error: {str(e)}")
|
||||||
|
import traceback
|
||||||
|
print(f" Traceback: {traceback.format_exc()}")
|
||||||
|
|
||||||
|
except ImportError as e:
|
||||||
|
print(f" ✗ Cannot import parser: {str(e)}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f" ✗ Unexpected error: {str(e)}")
|
||||||
|
|
||||||
|
# Recommendations
|
||||||
|
print("\n" + "="*60)
|
||||||
|
print(" Recommendations:")
|
||||||
|
print("="*60)
|
||||||
|
print("""
|
||||||
|
1. If 'flaresolverr:8191' works but 'localhost:8191' doesn't:
|
||||||
|
→ Update parser to use 'flaresolverr:8191' in Docker environment
|
||||||
|
|
||||||
|
2. If none work:
|
||||||
|
→ Check if FlareSolver container is running: docker ps | grep flaresolverr
|
||||||
|
→ Check Docker network: docker network inspect <network_name>
|
||||||
|
→ Check FlareSolver logs: docker logs flaresolverr
|
||||||
|
|
||||||
|
3. To fix in code:
|
||||||
|
→ Use environment variable for FlareSolver URL
|
||||||
|
→ Default to 'flaresolverr:8191' in production
|
||||||
|
→ Use 'localhost:8191' only in local development
|
||||||
|
""")
|
||||||
|
|
||||||
|
print("\n" + "="*60)
|
||||||
|
print(" Diagnostic Complete")
|
||||||
|
print("="*60 + "\n")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user