主要变更: - RDP 远程桌面:新增 backend/pkg/rdp(RDP 引擎 + credssp/display/rle/trace)、 backend/controller/rdp*(连接/凭证/文件/会话/实时)、frontend RDP 组件与 API - Windows SMB 文件传输:backend/pkg/winsmb - 云账单同步:backend/pkg/billingsync + billing_sync/aliyun_billing,前端账单详情 - Agent CLI Kubernetes 工具:kubernetes_action/get、pod_execute/logs - 服务器导入助手:server_import_helpers、ImportCredentialSettings - 国际化与组件重构(cloud/deploy/monitor/server/system 等多模块) - 清理编译产物二进制:移除 backend/server、backend/agent/bin/aiops-agent-* - .gitignore:新增 backend/agent/ 与 .cache/(避免 334MB go-build 缓存误入库) Co-Authored-By: Claude <noreply@anthropic.com>
33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
import type { JsonData } from "@/types/common";
|
||
// Agent 监控相关工具函数(供组件与 API 层共享) // Logan.Li
|
||
|
||
/** 在线判定:3 分钟内有上报视为在线 */
|
||
export function isOnline(lastReport: unknown): boolean {
|
||
if (!lastReport) return false;
|
||
const t = new Date(lastReport as string | number | Date).getTime();
|
||
if (Number.isNaN(t)) return false;
|
||
return Date.now() - t < 3 * 60 * 1000;
|
||
}
|
||
|
||
/** 相对时间格式化("3分钟前" / "2小时前") */
|
||
export function timeAgo(ts: unknown): string {
|
||
if (!ts) return '--';
|
||
const t = new Date(ts as string | number | Date).getTime();
|
||
if (Number.isNaN(t)) return '--';
|
||
const diff = Math.floor((Date.now() - t) / 1000);
|
||
if (diff < 60) return `${diff}秒前`;
|
||
if (diff < 3600) return `${Math.floor(diff / 60)}分钟前`;
|
||
if (diff < 86400) return `${Math.floor(diff / 3600)}小时前`;
|
||
return new Date(ts as string | number | Date).toLocaleString();
|
||
}
|
||
|
||
/** 兼容多种列表响应包装:数组 / {list} / {items} / {data} */
|
||
|
||
export function asList(data: JsonData): JsonData[] {
|
||
if (!data) return [];
|
||
if (Array.isArray(data)) return data;
|
||
if (Array.isArray(data.list)) return data.list;
|
||
if (Array.isArray(data.items)) return data.items;
|
||
if (Array.isArray(data.data)) return data.data;
|
||
return [];
|
||
} |