81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
# 日志推送模块 · HTTP POST到主服务器
|
||
# HLDP://zhuyuan-agent/log-pusher
|
||
|
||
import json
|
||
import urllib.request
|
||
from datetime import datetime
|
||
|
||
|
||
class LogPusher:
|
||
"""向主服务器推送操作日志、日记、GPU指标、训练进度"""
|
||
|
||
def __init__(self, base_url: str, api_key: str, hostname: str = "3090-server"):
|
||
self.base_url = base_url.rstrip("/")
|
||
self.api_key = api_key
|
||
self.hostname = hostname
|
||
self._headers = {
|
||
"Authorization": f"Bearer {api_key}",
|
||
"Content-Type": "application/json"
|
||
}
|
||
|
||
def _post(self, path: str, data: dict, timeout: int = 15) -> bool:
|
||
"""POST请求到主服务器"""
|
||
url = f"{self.base_url}{path}"
|
||
try:
|
||
req = urllib.request.Request(
|
||
url,
|
||
data=json.dumps(data).encode("utf-8"),
|
||
headers=self._headers,
|
||
method="POST"
|
||
)
|
||
resp = urllib.request.urlopen(req, timeout=timeout)
|
||
result = json.loads(resp.read())
|
||
return result.get("ok", False)
|
||
except Exception as e:
|
||
print(f"[PUSH ERROR] {path}: {e}")
|
||
return False
|
||
|
||
def push_gpu(self, gpu_data: dict) -> bool:
|
||
"""推送GPU指标"""
|
||
data = {
|
||
"hostname": self.hostname,
|
||
"gpus": gpu_data.get("gpus", [])
|
||
}
|
||
return self._post("/api/gpu/status", data)
|
||
|
||
def push_training(self, training_data: dict) -> bool:
|
||
"""推送训练进度"""
|
||
return self._post("/api/training/status", training_data)
|
||
|
||
def push_log(self, level: str, message: str, category: str = "agent") -> bool:
|
||
"""推送操作日志"""
|
||
return self._post("/api/agent/log", {
|
||
"level": level,
|
||
"message": message,
|
||
"category": category
|
||
})
|
||
|
||
def push_diary(self, entry_type: str, title: str, description: str = "") -> bool:
|
||
"""推送日记条目"""
|
||
return self._post("/api/agent/diary", {
|
||
"type": entry_type,
|
||
"title": title,
|
||
"description": description
|
||
})
|
||
|
||
def log_info(self, msg: str):
|
||
"""快捷:info级别日志"""
|
||
self.push_log("info", msg)
|
||
|
||
def log_success(self, msg: str):
|
||
"""快捷:success级别日志"""
|
||
self.push_log("success", msg)
|
||
|
||
def log_warn(self, msg: str):
|
||
"""快捷:warn级别日志"""
|
||
self.push_log("warn", msg)
|
||
|
||
def log_error(self, msg: str):
|
||
"""快捷:error级别日志"""
|
||
self.push_log("error", msg)
|