diff --git a/backend/src/jobs/agent-task.ts b/backend/src/jobs/agent-task.ts index c14d390..19dd953 100644 --- a/backend/src/jobs/agent-task.ts +++ b/backend/src/jobs/agent-task.ts @@ -99,8 +99,7 @@ async function handleAgentOfflineNotification( // 获取客户端完整信息 const agent = await getAgentById(agentId); - const agentData = agent[0]; - if (!agentData) { + if (!agent) { console.error(`找不到客户端数据 (ID: ${agentId})`); return; } @@ -111,16 +110,16 @@ async function handleAgentOfflineNotification( status: "offline", previous_status: "online", // 添加previous_status变量 time: new Date().toLocaleString("zh-CN"), - hostname: agentData.hostname || "未知", - ip_addresses: getFormattedIPAddresses(agentData.ip_addresses), - os: agentData.os || "未知", + hostname: agent.hostname || "未知", + ip_addresses: getFormattedIPAddresses(agent.ip_addresses), + os: agent.os || "未知", error: "客户端连接超时", details: `主机名: ${ - agentData.hostname || "未知" + agent.hostname || "未知" }\nIP地址: ${getFormattedIPAddresses( - agentData.ip_addresses - )}\n操作系统: ${agentData.os || "未知"}\n最后连接时间: ${new Date( - agentData.updated_at + agent.ip_addresses + )}\n操作系统: ${agent.os || "未知"}\n最后连接时间: ${new Date( + agent.updated_at ).toLocaleString("zh-CN")}`, }; @@ -163,8 +162,7 @@ export async function handleAgentThresholdNotification( console.error(`找不到客户端 (ID: ${agentId})`); throw new Error(`找不到客户端 (ID: ${agentId})`); } - - // @ts-ignore + const userId = agent.created_by; // 获取 userId // 根据具体的指标类型 diff --git a/backend/src/repositories/agent.ts b/backend/src/repositories/agent.ts index 838398e..769223f 100644 --- a/backend/src/repositories/agent.ts +++ b/backend/src/repositories/agent.ts @@ -31,12 +31,17 @@ export async function getAgentMetricsByIds(agentIds: number[]) { } // 获取单个客户端详情 -export async function getAgentById(id: number) { +export async function getAgentById(id: number): Promise { const agent = await db .select() .from(agents) .where(eq(agents.id, id)) .limit(1); + + if (!agent || agent.length === 0) { + return null; + } + return agent[0]; } diff --git a/backend/src/services/AgentService.ts b/backend/src/services/AgentService.ts index dca6bfb..f43d803 100644 --- a/backend/src/services/AgentService.ts +++ b/backend/src/services/AgentService.ts @@ -1,4 +1,5 @@ import { Bindings } from "../models/db"; +import type { Agent } from "../models/agent"; import * as AgentRepository from "../repositories"; import { generateToken, verifyToken } from "../utils/jwt"; import { handleAgentThresholdNotification } from "../jobs/agent-task"; @@ -84,15 +85,29 @@ export async function updateAgentService( if (updateData.ip_addresses && updateData.ip_addresses.length > 0) { agent.ip_addresses = JSON.stringify(updateData.ip_addresses); - } else { + } else if (updateData.ip_addresses) { agent.ip_addresses = "[]"; } - agent.name = updateData.name; - agent.hostname = updateData.hostname; - agent.os = updateData.os; - agent.version = updateData.version; - agent.status = updateData.status; + if (typeof updateData.name === "string") { + agent.name = updateData.name; + } + + if (updateData.hostname !== undefined) { + agent.hostname = updateData.hostname ?? null; + } + + if (updateData.os !== undefined) { + agent.os = updateData.os ?? null; + } + + if (updateData.version !== undefined) { + agent.version = updateData.version ?? null; + } + + if (updateData.status !== undefined) { + agent.status = updateData.status ?? null; + } // 执行更新 const updatedAgent = await AgentRepository.updateAgent(agent); @@ -359,8 +374,9 @@ export async function updateAgentStatusService(status: any) { } } -export async function getAgentById(id: number) { - return await AgentRepository.getAgentById(id); +export async function getAgentById(id: number): Promise { + const agent = await AgentRepository.getAgentById(id); + return agent ?? null; } export async function getActiveAgents() {