- |
+ |
|
-
+ |
{assignment.server?.ip_address ?? "n/a"}
|
-
+ |
{assignment.revoked_at ? "revoked" : "active"}
|
-
+ |
{new Date(assignment.assigned_at).toLocaleDateString()}
|
-
+ |
{assignment.revoked_at
? new Date(assignment.revoked_at).toLocaleDateString()
diff --git a/web/app/(app)/keys/page.tsx b/web/app/(app)/keys/page.tsx
index 8f1805c..26cd967 100644
--- a/web/app/(app)/keys/page.tsx
+++ b/web/app/(app)/keys/page.tsx
@@ -146,21 +146,21 @@ export default function KeysPage() {
{keys.map((key: Key) => (
- |
+ |
{key.label}
|
-
+ |
{key.fingerprint}
|
-
+ |
{key.source}
|
-
+ |
{key.assigned_count ?? 0} server{(key.assigned_count ?? 0) !== 1 ? "s" : ""}
|
-
+ |
{new Date(key.created_at).toLocaleDateString()}
|
diff --git a/web/app/(app)/monitors/[id]/page.tsx b/web/app/(app)/monitors/[id]/page.tsx
index f5239ff..43edc76 100644
--- a/web/app/(app)/monitors/[id]/page.tsx
+++ b/web/app/(app)/monitors/[id]/page.tsx
@@ -180,17 +180,17 @@ export default function MonitorDetailPage() {
|
{incidents.map((inc) => (
- |
+ |
{new Date(inc.started_at).toLocaleString()}
|
-
+ |
{inc.resolved_at ? (
{new Date(inc.resolved_at).toLocaleString()}
) : (
ongoing
)}
|
-
+ |
{inc.cause || "n/a"}
|
diff --git a/web/app/(app)/monitors/page.tsx b/web/app/(app)/monitors/page.tsx
index b93fbf4..5c17228 100644
--- a/web/app/(app)/monitors/page.tsx
+++ b/web/app/(app)/monitors/page.tsx
@@ -76,24 +76,24 @@ export default function MonitorsPage() {
{monitors.map((m) => (
- |
+ |
{m.name}
|
-
+ |
{m.type}
|
-
+ |
{targetSummary(m)}
|
-
+ |
{m.state.status}
|
-
+ |
{m.state.latency_ms}ms
|
-
+ |
{m.state.last_check_at ? new Date(m.state.last_check_at).toLocaleTimeString() : "n/a"}
diff --git a/web/app/(app)/secrets/[group]/page.tsx b/web/app/(app)/secrets/[group]/page.tsx
index aeb23b3..0745b68 100644
--- a/web/app/(app)/secrets/[group]/page.tsx
+++ b/web/app/(app)/secrets/[group]/page.tsx
@@ -138,11 +138,11 @@ function SecretRow({ group, secret }: { group: string; secret: Secret }) {
return (
|
- |
+ |
{secret.key}
|
- {revealed == null ? •••••••••••• : {revealed}} |
-
+ | {revealed == null ? •••••••••••• : {revealed}} |
+
{new Date(secret.updated_at).toLocaleString()}
|
diff --git a/web/app/(app)/secrets/page.tsx b/web/app/(app)/secrets/page.tsx
index 85ad4d4..e935803 100644
--- a/web/app/(app)/secrets/page.tsx
+++ b/web/app/(app)/secrets/page.tsx
@@ -139,15 +139,15 @@ export default function SecretsPage() {
|
{groups.map((g: SecretGroupSummary) => (
- |
+ |
{g.group}
|
-
+ |
{g.key_count} key{g.key_count !== 1 ? "s" : ""}
|
-
+ |
{new Date(g.updated_at).toLocaleString()}
diff --git a/web/app/(app)/servers/[id]/page.tsx b/web/app/(app)/servers/[id]/page.tsx
index d886b2f..28b3356 100644
--- a/web/app/(app)/servers/[id]/page.tsx
+++ b/web/app/(app)/servers/[id]/page.tsx
@@ -269,13 +269,13 @@ function UpdatesModal({ updates, onClose, onApply, isApplying, applySuccess }: {
|
{updates.map((u) => (
- |
+ |
{u.name}
|
-
+ |
{u.current_version || "n/a"}
|
-
+ |
{u.new_version}
|
@@ -585,19 +585,19 @@ export default function ServerDetailPage() {
.filter((a) => a.key)
.map((assignment) => (
- |
+ |
{assignment.key.label}
|
-
+ |
{assignment.key.fingerprint}
|
-
+ |
{assignment.key.source}
|
-
+ |
{assignment.revoked_at ? "revoked" : "active"}
|
-
+ |
{formatDate(assignment.assigned_at)}
|
diff --git a/web/app/(app)/servers/page.tsx b/web/app/(app)/servers/page.tsx
index 3b966de..ab842e1 100644
--- a/web/app/(app)/servers/page.tsx
+++ b/web/app/(app)/servers/page.tsx
@@ -113,23 +113,23 @@ export default function ServersPage() {
|
{servers.map((server: Server) => (
- |
+ |
{server.hostname}
|
-
+ |
{server.ip_address}
|
-
+ |
{server.os_info}
|
-
+ |
|
-
+ |
{server.last_seen
? formatLastSeen(server.last_seen)
diff --git a/web/app/(app)/workflows/[id]/runs/page.tsx b/web/app/(app)/workflows/[id]/runs/page.tsx
index d5c15b3..43958d6 100644
--- a/web/app/(app)/workflows/[id]/runs/page.tsx
+++ b/web/app/(app)/workflows/[id]/runs/page.tsx
@@ -51,7 +51,7 @@ export default function WorkflowRunsPage() {
{runs.map((r: WorkflowRun) => (
- |
+ |
|
-
+ |
{r.status}
|
- {new Date(r.started_at).toLocaleString()} |
- {r.triggered_by} |
- {r.server_runs.length} |
+ {new Date(r.started_at).toLocaleString()} |
+ {r.triggered_by} |
+ {r.server_runs.length} |
))}
diff --git a/web/app/(app)/workflows/page.tsx b/web/app/(app)/workflows/page.tsx
index 2e347d4..704af38 100644
--- a/web/app/(app)/workflows/page.tsx
+++ b/web/app/(app)/workflows/page.tsx
@@ -70,15 +70,15 @@ export default function WorkflowsPage() {
{workflows.map((w: Workflow) => (
- |
+ |
{w.name}
|
-
+ |
{w.target_server_ids.length} server{w.target_server_ids.length !== 1 ? "s" : ""}
|
-
+ |
{w.steps.length}
|
diff --git a/web/components/settings/MembersCard.tsx b/web/components/settings/MembersCard.tsx
index fd2485c..702b4e4 100644
--- a/web/components/settings/MembersCard.tsx
+++ b/web/components/settings/MembersCard.tsx
@@ -115,11 +115,11 @@ export function MembersCard() {
const locked = isSelf || managedByHQ || (u.role === "owner" && !isOwner);
return (
|
- |
+ |
{u.email}
{isSelf && (you)}
|
-
+ |
{locked ? (
{u.role}
) : (
@@ -136,11 +136,11 @@ export function MembersCard() {
)}
|
-
+ |
{u.auth_source === "oidc" ? "SSO" : u.auth_source === "hq" ? "Vantage HQ" : "Password"}
|
- {u.last_login ? new Date(u.last_login).toLocaleString() : "Never"} |
-
+ | {u.last_login ? new Date(u.last_login).toLocaleString() : "Never"} |
+
{managedByHQ ? (
hqUrl ? (
| | |