- 引入 typed target 判别联合,支持 http 与 command 两种 checker - expect 重构为有序规则数组,按配置顺序快速失败并生成结构化 failure - 新增 command runner,支持 exec + args 本地命令执行 - 引入全局并发限制 maxConcurrentChecks 和 size 解析 (KB/MB/GB) - HTTP/command 各自独立 expect pipeline,应用领域默认成功语义 - SQLite schema、API、Dashboard 全链路调整为 checker 通用契约 - 补充完整测试覆盖(192 tests),更新 README 与示例配置
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import type { TargetStatus } from "../../shared/api";
|
|
import { StatusDot } from "./StatusDot";
|
|
import { SparklineChart } from "./SparklineChart";
|
|
|
|
interface TargetRowProps {
|
|
target: TargetStatus;
|
|
expanded: boolean;
|
|
onToggle: () => void;
|
|
}
|
|
|
|
export function TargetRow({ target, expanded, onToggle }: TargetRowProps) {
|
|
const isUp = target.latestCheck?.success && target.latestCheck?.matched;
|
|
|
|
const sparklineData = target.sparkline.map((duration) => ({ duration }));
|
|
|
|
return (
|
|
<tr className={`target-row ${expanded ? "expanded" : ""}`} onClick={onToggle}>
|
|
<td className="col-status">
|
|
<StatusDot up={!!isUp} />
|
|
</td>
|
|
<td className="col-name">{target.name}</td>
|
|
<td className="col-target">{target.target}</td>
|
|
<td className="col-type">{target.type === "http" ? "HTTP" : "Command"}</td>
|
|
<td className="col-duration">
|
|
{target.latestCheck?.durationMs !== null && target.latestCheck?.durationMs !== undefined
|
|
? `${Math.round(target.latestCheck.durationMs)}ms`
|
|
: "-"}
|
|
</td>
|
|
<td className="col-sparkline">
|
|
<SparklineChart data={sparklineData} />
|
|
</td>
|
|
</tr>
|
|
);
|
|
}
|