nodes: store and show host disk free; warn when low (node-26#41)
Checkin now carries disk_free_bytes/disk_total_bytes. Stored on the node doc (not overwritten by older nodes that don't send them). Node page shows a Disk row; node cards warn amber under 15% free, red under 5% or 2 GB. A full disk stopped node-002 recording for 17 days while it showed Online. Frontend unverified locally (no Node, #207); CI build typechecks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
4a93390967
commit
268470b6c0
@@ -1,6 +1,7 @@
|
||||
import Link from "next/link";
|
||||
import { StatusBadge } from "@/components/StatusBadge";
|
||||
import type { NodeRecord, SystemRecord } from "@/lib/types";
|
||||
import { diskState } from "@/lib/nodeDisk";
|
||||
|
||||
interface Props {
|
||||
node: NodeRecord;
|
||||
@@ -45,6 +46,15 @@ export function NodeCard({ node, system, linkToDetail = true }: Props) {
|
||||
<span className="text-ink-2">{lastSeen}</span>
|
||||
</div>
|
||||
</div>
|
||||
{(() => {
|
||||
const disk = diskState(node);
|
||||
if (!disk || disk.level === "ok") return null;
|
||||
return (
|
||||
<div className={`mt-3 text-xs font-mono border-t border-line pt-2 ${disk.level === "critical" ? "text-sev-major" : "text-sev-moderate"}`}>
|
||||
⚠ Disk {disk.level === "critical" ? "nearly full" : "low"}: {disk.label}
|
||||
</div>
|
||||
);
|
||||
})()}
|
||||
{!node.configured && (
|
||||
<div className="mt-3 text-xs text-indigo-400 font-mono border-t border-line pt-2">
|
||||
⚠ Needs configuration
|
||||
|
||||
Reference in New Issue
Block a user