58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""VPS Agent 主入口:采集本机信息并上报到中心服务器
|
|
|
|
环境变量(建议写入 /etc/vps-agent.env):
|
|
VPS_MANAGER_URL 中心地址,如 http://100.89.0.11:8000
|
|
VPS_ASSET_ID 本机对应的资产 ID
|
|
VPS_AGENT_KEY Agent Key(中心配置了 AGENT_KEY 时必填)
|
|
VPS_AGENT_RETRY 上报失败重试次数(默认 2,指数退避)
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
import httpx
|
|
|
|
from collector import collect_metrics, collect_security, collect_server_info
|
|
|
|
|
|
def main() -> int:
|
|
url = os.environ.get("VPS_MANAGER_URL", "").rstrip("/")
|
|
asset_id = os.environ.get("VPS_ASSET_ID", "")
|
|
key = os.environ.get("VPS_AGENT_KEY", "")
|
|
max_retry = int(os.environ.get("VPS_AGENT_RETRY", "2"))
|
|
|
|
if not url or not asset_id:
|
|
print("错误:需设置 VPS_MANAGER_URL 和 VPS_ASSET_ID")
|
|
return 1
|
|
|
|
payload = {
|
|
"asset_id": int(asset_id),
|
|
"metrics": collect_metrics(),
|
|
"server_info": collect_server_info(),
|
|
"security": collect_security(),
|
|
}
|
|
headers = {"X-Agent-Key": key} if key else {}
|
|
|
|
for attempt in range(max_retry + 1):
|
|
try:
|
|
resp = httpx.post(
|
|
f"{url}/api/agent/report", json=payload, headers=headers, timeout=30
|
|
)
|
|
print(f"上报完成 HTTP {resp.status_code}: {resp.text}")
|
|
resp.raise_for_status()
|
|
return 0
|
|
except Exception as e: # noqa: BLE001
|
|
if attempt < max_retry:
|
|
wait = 2 ** attempt
|
|
print(f"上报失败({attempt + 1}/{max_retry + 1}),{wait}s 后重试: {e}")
|
|
time.sleep(wait)
|
|
else:
|
|
print(f"上报失败(已重试 {max_retry} 次): {e}")
|
|
return 1
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|