1c6dfea5b5
Dashboard → System Health is grouped into AgentHub, Machine and Agent
activity. The machine (GET /api/host, every signed-in user) is drawn by
components/health/HostHealth.tsx: host card beside the CPU/memory history,
then CPU (threads as compact cells + temperatures/GPUs), disks & network,
busiest processes, and per-user tiles. Concurrency bars each show their own
agent type on hover.
The Health Score (client/src/lib/healthScore.ts) is now 100 minus what each
check costs, between an amber and a red threshold: event-loop p99
(server/lib/loop-delay.js, shared with /api/metrics), Linux PSI pressure for
CPU, memory and disk I/O (/api/host `pressure`; load per core without PSI),
RAM, the database's disk, V8 heap, hooks silent while agents work, and agent
errors in the last 24 h. All-time success rate, API errors and the transcript
cache hit rate no longer count. /api/settings/info adds server.event_loop and
activity {last_event_at, working_agents, agents_24h}.
Administration: a user row opens its detail in place (GET
/api/users/:id/details — spend, account pool share, live panes, workspaces,
newest sessions); the server panel is gone, member tmux folded into the table;
the Sessions list shows each row's owner in server mode.
188 lines
9.4 KiB
JSON
188 lines
9.4 KiB
JSON
{
|
||
"title": "Tổng quan",
|
||
"subtitle": "Góc nhìn thời gian thực về hoạt động Agent Claude Code",
|
||
"totalSessions": "Tổng số phiên",
|
||
"activeAgents": "Agent đang hoạt động",
|
||
"activeSubagents": "Subagent đang hoạt động",
|
||
"eventsToday": "Sự kiện hôm nay",
|
||
"totalEvents": "Tổng sự kiện",
|
||
"totalCost": "Tổng chi phí",
|
||
"viewAll": "Xem tất cả",
|
||
"activeAgentsSection": "Agent đang hoạt động",
|
||
"recentActivity": "Hoạt động gần đây",
|
||
"noAgents": "Không có Agent đang hoạt động",
|
||
"noAgentsDesc": "Agent sẽ xuất hiện ở đây khi phiên Claude Code đang chạy.",
|
||
"noActivity": "Chưa có hoạt động",
|
||
"noActivityDesc": "Sự kiện từ các phiên Claude Code sẽ được phát trực tiếp tại đây.",
|
||
"failedLoad": "Không thể tải dữ liệu",
|
||
"activeTrend": " đang hoạt động",
|
||
"totalTrend": " trong phiên hoạt động",
|
||
"tabs": {
|
||
"label": "Các chế độ xem tổng quan",
|
||
"analytics": "Phân tích",
|
||
"monitor": "Giám sát",
|
||
"health": "Sức khỏe hệ thống"
|
||
},
|
||
"collapseSubagents": "Thu gọn subagent",
|
||
"expandSubagents": "Mở rộng subagent",
|
||
"needsYou": {
|
||
"title": "Cần bạn xử lý",
|
||
"since": "đang chờ {{ago}}"
|
||
},
|
||
"health": {
|
||
"heap": "Heap V8",
|
||
"heapTip": "Heap V8: đã dùng {{pct}}%\n{{used}} / giới hạn {{limit}}\nĐã cấp phát: {{allocated}}\nNgoài heap: {{external}}",
|
||
"storage": "Lưu trữ",
|
||
"writeVelocityTip": "Tốc độ ghi (sự kiện):\n5 phút: {{m5}}\n15 phút: {{m15}}\n1 giờ: {{h1}}",
|
||
"database": "Cơ sở dữ liệu",
|
||
"recordsTip": "Phân bố bản ghi\n\nPhiên: {{sessions}} ({{sessPct}}%)\nAgent: {{agents}} ({{agentPct}}%)\nSự kiện: {{events}} ({{eventPct}}%)\n\nTổng: {{total}} bản ghi",
|
||
"total": "tổng",
|
||
"sessions": "Phiên",
|
||
"agents": "Agent",
|
||
"events": "Sự kiện",
|
||
"score": "Điểm sức khỏe",
|
||
"formula": "Công thức",
|
||
"cacheTip": "Tỉ lệ trúng cache transcript: {{pct}}% (chỉ để xem, không tính điểm — cache trống lại mỗi lần server khởi động)",
|
||
"compact": "Nén",
|
||
"compactTip": "Số lần nén transcript: {{count}}\nThu gọn cửa sổ ngữ cảnh bằng cách tóm tắt các lượt.",
|
||
"saved": "Tiết kiệm",
|
||
"savedTip": "Token thu hồi: {{tokens}}\nĐược giải phóng nhờ nén.",
|
||
"tokenUsage": "Sử dụng token",
|
||
"totalSuffix": "tổng {{value}}",
|
||
"modelTip": "{{model}}\nĐầu vào: {{input}}\nĐầu ra: {{output}}\nĐọc cache: {{cacheRead}}\nTỉ trọng: {{pct}}%",
|
||
"noModelData": "Chưa có dữ liệu mô hình",
|
||
"concurrency": "Đồng thời",
|
||
"intervals_one": "{{count}} loại agent",
|
||
"intervals_other": "{{count}} loại agent",
|
||
"concurrencyTip": "Đỉnh: {{peak}} phiên song song\nKhoảng có hoạt động: {{active}}\nTrung bình: {{avg}}",
|
||
"laneTip": "{{name}}\n{{count}} agent\nChạy từ {{start}}–{{end}}% thời lượng phiên (trung bình)",
|
||
"noConcurrencyData": "Chưa có dữ liệu đồng thời",
|
||
"peak": "Đỉnh",
|
||
"peakTip": "Đỉnh: {{count}} phiên chạy cùng lúc.",
|
||
"active": "Hoạt động",
|
||
"activeTip": "{{active}} trên {{total}} khoảng có phiên hoạt động.",
|
||
"avg": "TB",
|
||
"avgTip": "Mức đồng thời trung bình trên mọi khoảng.",
|
||
"toolUsage": "Sử dụng công cụ",
|
||
"top": "top {{count}}",
|
||
"invocationsTip_one": "{{tool}}: {{formatted}} lần gọi",
|
||
"invocationsTip_other": "{{tool}}: {{formatted}} lần gọi",
|
||
"noToolData": "Chưa có dữ liệu công cụ",
|
||
"subagentEffectiveness": "Hiệu quả subagent",
|
||
"defaultType": "mặc định",
|
||
"effectivenessTip": "{{type}}\nThành công: {{pct}}%\nTổng: {{total}} · OK: {{ok}} · Lỗi: {{errors}}",
|
||
"noSubagentData": "Chưa có dữ liệu subagent",
|
||
"integration": "Tích hợp",
|
||
"hooksActive": "Đang hoạt động",
|
||
"hookTip": "Đường dẫn: {{path}}\nTrạng thái: {{status}}",
|
||
"connected": "Đã kết nối",
|
||
"disconnected": "Mất kết nối",
|
||
"noHooks": "Chưa đăng ký hook dự án nào",
|
||
"wsTip": "Kết nối WebSocket: {{count}}\nGiao thức: RFC 6455",
|
||
"wsActive": "WebSocket đang hoạt động",
|
||
"connections_one": "{{count}} kết nối",
|
||
"connections_other": "{{count}} kết nối",
|
||
"platform": "Nền tảng",
|
||
"journalMode": "Chế độ journal",
|
||
"synchronous": "Đồng bộ",
|
||
"autoVacuum": "Tự dọn dẹp",
|
||
"foreignKeys": "Khóa ngoại",
|
||
"busyTimeout": "Thời gian chờ khóa",
|
||
"groupApp": "AgentHub",
|
||
"groupAppHint": "Tình trạng của chính dashboard: điểm, cơ sở dữ liệu, số phiên đồng thời",
|
||
"groupMachine": "Máy chủ",
|
||
"groupMachineHint": "Máy đang chạy AgentHub: CPU, bộ nhớ, ổ đĩa, tiến trình",
|
||
"groupActivity": "Hoạt động agent",
|
||
"groupActivityHint": "Agent đã dùng gì: token theo model, công cụ, subagent",
|
||
"scoreFormula": "100 trừ đi phần mỗi mục bị trừ:",
|
||
"scoreResult": "= {{score}} / 100",
|
||
"check": {
|
||
"loop": "Phản hồi AgentHub",
|
||
"cpu": "Chờ CPU",
|
||
"memory": "Chờ bộ nhớ",
|
||
"io": "Chờ ổ đĩa",
|
||
"ram": "RAM đang dùng",
|
||
"disk": "Ổ chứa dữ liệu",
|
||
"heap": "V8 heap",
|
||
"hooks": "Hook gần nhất",
|
||
"agents": "Agent lỗi 24h"
|
||
},
|
||
"checkTip": {
|
||
"loop": "Event loop của AgentHub bị nghẽn bao lâu (p99 trong phút vừa qua). Mọi trang, hook và phím gõ trong terminal đều phải chờ chừng ấy.",
|
||
"cpu": "Áp lực CPU (Linux PSI, 10 s gần nhất): tỉ lệ thời gian tác vụ phải chờ CPU rảnh — vài % trở lên là máy bắt đầu chậm.",
|
||
"cpuLoad": "Tải mỗi lõi (1 phút) — máy này không có PSI nên ước lượng chờ CPU từ load.",
|
||
"memory": "Áp lực bộ nhớ (Linux PSI, 10 s gần nhất): tỉ lệ thời gian tác vụ bị treo để thu hồi hoặc swap bộ nhớ.",
|
||
"io": "Áp lực I/O ổ đĩa (Linux PSI, 10 s gần nhất): tỉ lệ thời gian tác vụ phải chờ ổ đĩa — HDD chậm hoặc bận sẽ hiện ở đây.",
|
||
"ram": "Bộ nhớ đang dùng (tổng trừ phần còn khả dụng).",
|
||
"disk": "Mức đầy của ổ chứa cơ sở dữ liệu AgentHub ({{mount}}).",
|
||
"heap": "V8 heap của AgentHub so với giới hạn.",
|
||
"hooks": "Số phút từ hook gần nhất, chỉ tính khi có agent đang chạy: im lặng lúc đó nghĩa là dashboard không còn thấy agent.",
|
||
"agents": "Agent kết thúc với lỗi trong 24 giờ qua (lỗi / đã kết thúc; cần ít nhất 5)."
|
||
},
|
||
"checkNa": "Không đo được trên máy này — không trừ điểm.",
|
||
"checkThresholds": "Vàng từ {{warn}}{{unit}}, đỏ từ {{bad}}{{unit}}",
|
||
"checkPenalty": "Trừ {{n}} / tối đa {{max}} điểm",
|
||
"hooksMissing": "chưa cài",
|
||
"hooksIdle": "nghỉ",
|
||
"minutesAgo": "{{n}} phút trước",
|
||
"verdict": {
|
||
"ok": "Khỏe",
|
||
"warn": "Suy giảm",
|
||
"bad": "Có vấn đề"
|
||
},
|
||
"allOk": "Mọi mục đều ổn",
|
||
"badCount_one": "{{count}} đỏ",
|
||
"badCount_other": "{{count}} đỏ",
|
||
"warnCount_one": "{{count}} vàng",
|
||
"warnCount_other": "{{count}} vàng",
|
||
"lagGroup": "Độ trễ",
|
||
"systemGroup": "Tài nguyên & tín hiệu"
|
||
},
|
||
"errorBoundary": {
|
||
"title": "Đã xảy ra lỗi",
|
||
"body": "Không thể tải trang này. Tải lại thường sẽ khắc phục — ví dụ sau khi dashboard vừa được cập nhật.",
|
||
"reload": "Tải lại"
|
||
},
|
||
"host": {
|
||
"uptimeDays": "{{d}} ngày {{h}} giờ",
|
||
"uptimeHours": "{{h}} giờ {{m}} phút",
|
||
"cpu": "CPU",
|
||
"cpuHelp": "Tỷ lệ trên toàn máy: 100% nghĩa là mọi lõi đều bận.",
|
||
"memory": "Bộ nhớ",
|
||
"swap": "Swap",
|
||
"free": "trống",
|
||
"usageUnavailable": "Mức dùng theo người dùng được đọc từ /proc nên chỉ có trên Linux.",
|
||
"hostGroup": "Tài khoản máy chủ (AgentHub và tiến trình khác của host)",
|
||
"systemGroup": "Hệ thống (root và tài khoản khác)",
|
||
"homesBadge": "home",
|
||
"historyTitle": "Lịch sử",
|
||
"historyHelp": "Lưu trong bộ nhớ, mỗi {{s}} giây một điểm, từ khi máy chủ khởi động lúc {{at}}.",
|
||
"historyCpu": "CPU (% toàn máy)",
|
||
"historyMemory": "Bộ nhớ đã dùng (%)",
|
||
"range": "Khoảng thời gian",
|
||
"range1h": "1 giờ",
|
||
"range6h": "6 giờ",
|
||
"range24h": "24 giờ",
|
||
"coreN": "CPU {{n}}",
|
||
"threads": "{{n}} luồng",
|
||
"physical": "{{n}} lõi",
|
||
"perSecond": "{{v}}/giây",
|
||
"temperatures": "Nhiệt độ",
|
||
"topProcesses": "Tiến trình nặng nhất",
|
||
"cpuModel": "CPU",
|
||
"storageNetwork": "Ổ đĩa & mạng",
|
||
"processCount": "{{n}} tiến trình",
|
||
"title": "Máy chủ",
|
||
"os": "Hệ điều hành",
|
||
"uptime": "Thời gian chạy",
|
||
"load": "Tải (1/5/15 phút)",
|
||
"agenthubTip": "pid {{pid}} · Node {{node}}",
|
||
"sampling": "Đang lấy mẫu…",
|
||
"sampled": "mẫu {{s}} giây",
|
||
"historyNone": "Chưa có lịch sử — server chỉ giữ trong bộ nhớ trên Linux, tính từ lúc khởi động.",
|
||
"agenthub": "AgentHub",
|
||
"usersTitle": "Người dùng · CPU / RAM hiện tại",
|
||
"usersCount": "{{n}} người dùng"
|
||
}
|
||
}
|