Completed the full GTM Engine implementation:\n\n- Implemented 'Dual Opener' (Primary/Secondary) generation in ClassificationService and DB.\n- Updated Frontend Inspector to display both openers.\n- Hardened analysis process (fixed duplicate scrapes, improved metric prompt).\n- Created robust, API-level E2E test script (test_opener_api.py).\n- Created a standalone health_check.py for diagnostics.\n- Updated all relevant documentation (README, GEMINI.md).
76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
import requests
|
|
import os
|
|
import time
|
|
import sys
|
|
|
|
# --- Configuration ---
|
|
# Load credentials from .env
|
|
def load_env_manual(path):
|
|
"""A simple parser for .env files to remove dependency on python-dotenv."""
|
|
if not os.path.exists(path):
|
|
print(f"⚠️ Warning: .env file not found at {path}")
|
|
return
|
|
with open(path) as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if line and not line.startswith('#') and '=' in line:
|
|
key, val = line.split('=', 1)
|
|
os.environ.setdefault(key.strip(), val.strip())
|
|
|
|
load_env_manual('/app/.env')
|
|
|
|
API_USER = os.getenv("API_USER")
|
|
API_PASS = os.getenv("API_PASSWORD")
|
|
CE_URL = "http://127.0.0.1:8000"
|
|
HEALTH_ENDPOINT = f"{CE_URL}/api/health"
|
|
|
|
def run_health_check():
|
|
"""
|
|
Attempts to connect to the Company Explorer API health endpoint.
|
|
"""
|
|
print("="*60)
|
|
print("🩺 Running Company Explorer Health Check...")
|
|
print(f" Target: {HEALTH_ENDPOINT}")
|
|
print("="*60)
|
|
|
|
if not API_USER or not API_PASS:
|
|
print("❌ FATAL: API_USER or API_PASSWORD not found in environment.")
|
|
print(" Please check your .env file.")
|
|
return False
|
|
|
|
try:
|
|
print(" Attempting to connect...")
|
|
response = requests.get(HEALTH_ENDPOINT, auth=(API_USER, API_PASS), timeout=5)
|
|
|
|
if response.status_code == 200:
|
|
print(" ✅ SUCCESS: Connection successful!")
|
|
print(f" Server Response: {response.json()}")
|
|
return True
|
|
elif response.status_code == 401:
|
|
print(" ❌ FAILURE: Connection successful, but Authentication failed (401).")
|
|
print(" Please check API_USER and API_PASSWORD in your .env file.")
|
|
return False
|
|
else:
|
|
print(f" ❌ FAILURE: Connected, but received an error status code: {response.status_code}")
|
|
print(f" Response: {response.text}")
|
|
return False
|
|
|
|
except requests.exceptions.ConnectionError:
|
|
print(" ❌ FATAL: Connection refused.")
|
|
print(" Is the Company Explorer container running?")
|
|
print(f" Is port 8000 correctly mapped to {CE_URL}?")
|
|
return False
|
|
except requests.exceptions.Timeout:
|
|
print(" ❌ FATAL: Connection timed out.")
|
|
print(" The server is not responding. Check for high load or container issues.")
|
|
return False
|
|
except Exception as e:
|
|
print(f" ❌ An unexpected error occurred: {e}")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
if run_health_check():
|
|
sys.exit(0) # Success
|
|
else:
|
|
sys.exit(1) # Failure
|