fixes and improvements
This commit is contained in:
@@ -55,7 +55,9 @@ def post_machine(
|
||||
store: SettingsStore = Depends(get_settings_store),
|
||||
) -> dict[str, Any]:
|
||||
saved = store.upsert_machine(machine.model_dump(exclude_none=True), machine.id)
|
||||
get_monitoring_poller().start()
|
||||
poller = get_monitoring_poller()
|
||||
poller.start()
|
||||
poller.kick()
|
||||
return saved
|
||||
|
||||
|
||||
@@ -68,7 +70,9 @@ def put_machine(
|
||||
if not store.get_machine(machine_id):
|
||||
raise HTTPException(status_code=404, detail="Machine not found")
|
||||
saved = store.upsert_machine(machine.model_dump(exclude_none=True), machine_id)
|
||||
get_monitoring_poller().start()
|
||||
poller = get_monitoring_poller()
|
||||
poller.start()
|
||||
poller.kick()
|
||||
return saved
|
||||
|
||||
|
||||
@@ -85,6 +89,8 @@ class SSHKeyInput(BaseModel):
|
||||
name: str = Field(default="")
|
||||
private_key: str = Field(default="")
|
||||
passphrase: str = Field(default="")
|
||||
public_key: str = Field(default="")
|
||||
fingerprint: str = Field(default="")
|
||||
notes: str = Field(default="")
|
||||
|
||||
|
||||
@@ -104,12 +110,14 @@ def generate_ssh_key(
|
||||
key.write_private_key(private_buffer, password=payload.passphrase or None)
|
||||
private_key = private_buffer.getvalue()
|
||||
public_key = f"{key.get_name()} {key.get_base64()}"
|
||||
fingerprint = ":".join(f"{b:02x}" for b in key.get_fingerprint())
|
||||
return {
|
||||
"name": payload.name,
|
||||
"private_key": private_key,
|
||||
"passphrase": payload.passphrase,
|
||||
"notes": payload.notes,
|
||||
"public_key": public_key,
|
||||
"fingerprint": fingerprint,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -159,6 +159,8 @@ def run_task(
|
||||
machine_name = _machine_label(machine)
|
||||
try:
|
||||
result = client.run(command, timeout=1200)
|
||||
stdout = result.stdout or ""
|
||||
stderr = result.stderr or ""
|
||||
status_text = "success" if result.exit_status == 0 else "error"
|
||||
store.record_task_run(
|
||||
task,
|
||||
@@ -167,9 +169,9 @@ def run_task(
|
||||
machine_name=machine_name,
|
||||
task_type=task_type,
|
||||
duration_ms=int((time.perf_counter() - start) * 1000),
|
||||
stdout_tail=result.stdout[-4000:],
|
||||
stderr_tail=result.stderr[-4000:],
|
||||
error="" if result.exit_status == 0 else (result.stderr or result.stdout or "Task failed"),
|
||||
stdout_tail=stdout[-4000:],
|
||||
stderr_tail=stderr[-4000:],
|
||||
error="" if result.exit_status == 0 else (stderr or stdout or "Task failed"),
|
||||
)
|
||||
return {
|
||||
"task_id": task["id"],
|
||||
@@ -178,20 +180,31 @@ def run_task(
|
||||
"machine_name": machine_name,
|
||||
"task_type": task_type,
|
||||
"exit_status": result.exit_status,
|
||||
"stdout": result.stdout,
|
||||
"stderr": result.stderr,
|
||||
"stdout": stdout,
|
||||
"stderr": stderr,
|
||||
}
|
||||
except Exception as exc:
|
||||
duration_ms = int((time.perf_counter() - start) * 1000)
|
||||
error_text = str(exc)
|
||||
store.record_task_run(
|
||||
task,
|
||||
"error",
|
||||
machine_id=str(machine.get("id") or ""),
|
||||
machine_name=machine_name,
|
||||
task_type=task_type,
|
||||
duration_ms=int((time.perf_counter() - start) * 1000),
|
||||
duration_ms=duration_ms,
|
||||
stdout_tail="",
|
||||
stderr_tail="",
|
||||
error=str(exc),
|
||||
stderr_tail=error_text[-4000:],
|
||||
error=error_text,
|
||||
)
|
||||
logger.exception("Task execution failed task_id=%s", task["id"])
|
||||
raise
|
||||
return {
|
||||
"task_id": task["id"],
|
||||
"task_name": task["name"],
|
||||
"machine_id": str(machine.get("id") or ""),
|
||||
"machine_name": machine_name,
|
||||
"task_type": task_type,
|
||||
"exit_status": 1,
|
||||
"stdout": "",
|
||||
"stderr": error_text,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user