dev
This commit is contained in:
65
domain-api/app/services/detect_service.py
Normal file
65
domain-api/app/services/detect_service.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
from app.core.db import get_db
|
||||
from app.core.files import tail_lines
|
||||
from app.services.runtime_settings_service import get_runtime_settings
|
||||
from app.services.settings_service import get_settings_payload
|
||||
from app.services.worker_control_service import detect_worker_runtime
|
||||
|
||||
|
||||
def get_detect_status() -> dict:
|
||||
queries = {
|
||||
"pending": "select count(*) from domains where detect_status = 0",
|
||||
"completed": "select count(*) from domains where detect_status = 1",
|
||||
"running": "select count(*) from domains where detect_status = 2",
|
||||
"blacklisted": "select count(*) from domains where detect_status = 3",
|
||||
"failed": "select count(*) from domains where detect_status = 4",
|
||||
}
|
||||
progress: dict[str, int] = {}
|
||||
with get_db() as conn:
|
||||
with conn.cursor() as cur:
|
||||
for key, query in queries.items():
|
||||
cur.execute(query)
|
||||
progress[key] = cur.fetchone()[0]
|
||||
|
||||
settings_payload = get_settings_payload()
|
||||
worker_log = Path(__file__).resolve().parents[3] / "domainCheck" / "detect_worker.log"
|
||||
if not worker_log.exists():
|
||||
worker_log = Path(__file__).resolve().parents[3] / "domainCheck" / "logs" / "detect_worker.log"
|
||||
|
||||
worker_online = False
|
||||
last_log_time = None
|
||||
if worker_log.exists():
|
||||
modified = datetime.fromtimestamp(worker_log.stat().st_mtime, tz=timezone.utc)
|
||||
last_log_time = modified.isoformat()
|
||||
worker_online = (datetime.now(timezone.utc) - modified).total_seconds() < 180
|
||||
|
||||
recent_lines = tail_lines("detect_worker.log", max_lines=80)
|
||||
recent_proxy_warning = next(
|
||||
(line for line in reversed(recent_lines) if "代理" in line or "Redis订阅失败" in line),
|
||||
"",
|
||||
)
|
||||
runtime = detect_worker_runtime()
|
||||
runtime_settings = get_runtime_settings()
|
||||
worker_online = worker_online or runtime.get("running", False)
|
||||
|
||||
return {
|
||||
"worker_online": worker_online,
|
||||
"worker_mode": runtime.get("mode", "windows-local"),
|
||||
"worker_service_name": runtime_settings.get("worker_service_name", ""),
|
||||
"api_service_name": runtime_settings.get("api_service_name", ""),
|
||||
"worker_process_count": runtime.get("process_count", 0),
|
||||
"worker_latest_start_time": runtime.get("latest_start_time", ""),
|
||||
"worker_runtime_message": runtime.get("message", ""),
|
||||
"thread_count": settings_payload["thread_count"],
|
||||
"proxy_enable": settings_payload["proxy_config"].get("proxy_enable", False),
|
||||
"allow_direct": settings_payload["proxy_config"].get("allow_direct", False),
|
||||
"proxy_pool_count": len(settings_payload["proxy_config"].get("proxy_urls", [])),
|
||||
"available_proxy_count": 0,
|
||||
"last_worker_log_time": last_log_time,
|
||||
"progress": progress,
|
||||
"recent_warning": recent_proxy_warning,
|
||||
}
|
||||
Reference in New Issue
Block a user