@calltelemetry/cli 0.4.25 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/diag.d.ts.map +1 -1
- package/dist/commands/diag.js +29 -0
- package/dist/commands/diag.js.map +1 -1
- package/dist/commands/k8s.d.ts +3 -0
- package/dist/commands/k8s.d.ts.map +1 -0
- package/dist/commands/k8s.js +192 -0
- package/dist/commands/k8s.js.map +1 -0
- package/dist/commands/network.d.ts +3 -0
- package/dist/commands/network.d.ts.map +1 -0
- package/dist/commands/network.js +120 -0
- package/dist/commands/network.js.map +1 -0
- package/dist/commands/shell.d.ts +3 -0
- package/dist/commands/shell.d.ts.map +1 -0
- package/dist/commands/shell.js +10 -0
- package/dist/commands/shell.js.map +1 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/backend.d.ts +85 -0
- package/dist/lib/backend.d.ts.map +1 -0
- package/dist/lib/backend.js +6 -0
- package/dist/lib/backend.js.map +1 -0
- package/dist/lib/bundle.d.ts.map +1 -1
- package/dist/lib/bundle.js +3 -0
- package/dist/lib/bundle.js.map +1 -1
- package/dist/lib/compose-backend.d.ts +19 -0
- package/dist/lib/compose-backend.d.ts.map +1 -0
- package/dist/lib/compose-backend.js +78 -0
- package/dist/lib/compose-backend.js.map +1 -0
- package/dist/lib/deployment.d.ts +6 -0
- package/dist/lib/deployment.d.ts.map +1 -0
- package/dist/lib/deployment.js +51 -0
- package/dist/lib/deployment.js.map +1 -0
- package/dist/lib/doctor.d.ts +13 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +82 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/helmfile.d.ts +14 -0
- package/dist/lib/helmfile.d.ts.map +1 -0
- package/dist/lib/helmfile.js +78 -0
- package/dist/lib/helmfile.js.map +1 -0
- package/dist/lib/k8s-backend.d.ts +36 -0
- package/dist/lib/k8s-backend.d.ts.map +1 -0
- package/dist/lib/k8s-backend.js +301 -0
- package/dist/lib/k8s-backend.js.map +1 -0
- package/dist/lib/k8s-client.d.ts +14 -0
- package/dist/lib/k8s-client.d.ts.map +1 -0
- package/dist/lib/k8s-client.js +42 -0
- package/dist/lib/k8s-client.js.map +1 -0
- package/dist/lib/metadata-artifacts.d.ts +2 -0
- package/dist/lib/metadata-artifacts.d.ts.map +1 -0
- package/dist/lib/metadata-artifacts.js +36 -0
- package/dist/lib/metadata-artifacts.js.map +1 -0
- package/dist/lib/offline-steps.d.ts.map +1 -1
- package/dist/lib/offline-steps.js +3 -0
- package/dist/lib/offline-steps.js.map +1 -1
- package/dist/lib/prefs.d.ts +3 -0
- package/dist/lib/prefs.d.ts.map +1 -1
- package/dist/lib/prefs.js +9 -1
- package/dist/lib/prefs.js.map +1 -1
- package/dist/shell/commands/config.d.ts +11 -0
- package/dist/shell/commands/config.d.ts.map +1 -0
- package/dist/shell/commands/config.js +193 -0
- package/dist/shell/commands/config.js.map +1 -0
- package/dist/shell/commands/connect.d.ts +18 -0
- package/dist/shell/commands/connect.d.ts.map +1 -0
- package/dist/shell/commands/connect.js +99 -0
- package/dist/shell/commands/connect.js.map +1 -0
- package/dist/shell/commands/db.d.ts +11 -0
- package/dist/shell/commands/db.d.ts.map +1 -0
- package/dist/shell/commands/db.js +237 -0
- package/dist/shell/commands/db.js.map +1 -0
- package/dist/shell/commands/debug.d.ts +15 -0
- package/dist/shell/commands/debug.d.ts.map +1 -0
- package/dist/shell/commands/debug.js +310 -0
- package/dist/shell/commands/debug.js.map +1 -0
- package/dist/shell/commands/diag.d.ts +16 -0
- package/dist/shell/commands/diag.d.ts.map +1 -0
- package/dist/shell/commands/diag.js +555 -0
- package/dist/shell/commands/diag.js.map +1 -0
- package/dist/shell/commands/registry.d.ts +7 -0
- package/dist/shell/commands/registry.d.ts.map +1 -0
- package/dist/shell/commands/registry.js +391 -0
- package/dist/shell/commands/registry.js.map +1 -0
- package/dist/shell/commands/secrets.d.ts +18 -0
- package/dist/shell/commands/secrets.d.ts.map +1 -0
- package/dist/shell/commands/secrets.js +100 -0
- package/dist/shell/commands/secrets.js.map +1 -0
- package/dist/shell/commands/services.d.ts +7 -0
- package/dist/shell/commands/services.d.ts.map +1 -0
- package/dist/shell/commands/services.js +115 -0
- package/dist/shell/commands/services.js.map +1 -0
- package/dist/shell/commands/show.d.ts +26 -0
- package/dist/shell/commands/show.d.ts.map +1 -0
- package/dist/shell/commands/show.js +897 -0
- package/dist/shell/commands/show.js.map +1 -0
- package/dist/shell/commands/system.d.ts +13 -0
- package/dist/shell/commands/system.d.ts.map +1 -0
- package/dist/shell/commands/system.js +270 -0
- package/dist/shell/commands/system.js.map +1 -0
- package/dist/shell/commands/test.d.ts +12 -0
- package/dist/shell/commands/test.d.ts.map +1 -0
- package/dist/shell/commands/test.js +197 -0
- package/dist/shell/commands/test.js.map +1 -0
- package/dist/shell/commands/users.d.ts +14 -0
- package/dist/shell/commands/users.d.ts.map +1 -0
- package/dist/shell/commands/users.js +86 -0
- package/dist/shell/commands/users.js.map +1 -0
- package/dist/shell/completer.d.ts +16 -0
- package/dist/shell/completer.d.ts.map +1 -0
- package/dist/shell/completer.js +124 -0
- package/dist/shell/completer.js.map +1 -0
- package/dist/shell/context.d.ts +12 -0
- package/dist/shell/context.d.ts.map +1 -0
- package/dist/shell/context.js +2 -0
- package/dist/shell/context.js.map +1 -0
- package/dist/shell/footer.d.ts +8 -0
- package/dist/shell/footer.d.ts.map +1 -0
- package/dist/shell/footer.js +47 -0
- package/dist/shell/footer.js.map +1 -0
- package/dist/shell/formatter.d.ts +47 -0
- package/dist/shell/formatter.d.ts.map +1 -0
- package/dist/shell/formatter.js +135 -0
- package/dist/shell/formatter.js.map +1 -0
- package/dist/shell/mcp-bridge.d.ts +13 -0
- package/dist/shell/mcp-bridge.d.ts.map +1 -0
- package/dist/shell/mcp-bridge.js +23 -0
- package/dist/shell/mcp-bridge.js.map +1 -0
- package/dist/shell/parser.d.ts +33 -0
- package/dist/shell/parser.d.ts.map +1 -0
- package/dist/shell/parser.js +100 -0
- package/dist/shell/parser.js.map +1 -0
- package/dist/shell/repl.d.ts +5 -0
- package/dist/shell/repl.d.ts.map +1 -0
- package/dist/shell/repl.js +251 -0
- package/dist/shell/repl.js.map +1 -0
- package/dist/shell/sparkline.d.ts +16 -0
- package/dist/shell/sparkline.d.ts.map +1 -0
- package/dist/shell/sparkline.js +56 -0
- package/dist/shell/sparkline.js.map +1 -0
- package/dist/shell/theme.d.ts +72 -0
- package/dist/shell/theme.d.ts.map +1 -0
- package/dist/shell/theme.js +60 -0
- package/dist/shell/theme.js.map +1 -0
- package/dist/ui/views/DbHealthView.d.ts +6 -0
- package/dist/ui/views/DbHealthView.d.ts.map +1 -0
- package/dist/ui/views/DbHealthView.js +180 -0
- package/dist/ui/views/DbHealthView.js.map +1 -0
- package/dist/ui/views/K8sDeployView.d.ts +8 -0
- package/dist/ui/views/K8sDeployView.d.ts.map +1 -0
- package/dist/ui/views/K8sDeployView.js +81 -0
- package/dist/ui/views/K8sDeployView.js.map +1 -0
- package/dist/ui/views/K8sRunbookView.d.ts +8 -0
- package/dist/ui/views/K8sRunbookView.d.ts.map +1 -0
- package/dist/ui/views/K8sRunbookView.js +181 -0
- package/dist/ui/views/K8sRunbookView.js.map +1 -0
- package/dist/ui/views/K8sServicesView.d.ts +8 -0
- package/dist/ui/views/K8sServicesView.d.ts.map +1 -0
- package/dist/ui/views/K8sServicesView.js +106 -0
- package/dist/ui/views/K8sServicesView.js.map +1 -0
- package/dist/ui/views/K8sStatusView.d.ts +8 -0
- package/dist/ui/views/K8sStatusView.d.ts.map +1 -0
- package/dist/ui/views/K8sStatusView.js +135 -0
- package/dist/ui/views/K8sStatusView.js.map +1 -0
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +54 -24
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/dist/ui/views/SettingsView.d.ts.map +1 -1
- package/dist/ui/views/SettingsView.js +19 -1
- package/dist/ui/views/SettingsView.js.map +1 -1
- package/dist/ui/views/SetupWizardView.d.ts +7 -0
- package/dist/ui/views/SetupWizardView.d.ts.map +1 -0
- package/dist/ui/views/SetupWizardView.js +244 -0
- package/dist/ui/views/SetupWizardView.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { composeExec } from '../../lib/compose.js';
|
|
5
|
+
import { DB_USER, DB_NAME, PG_ENV } from '../../lib/db.js';
|
|
6
|
+
import { readEnvKeys, updateEnvKeys } from '../../lib/env.js';
|
|
7
|
+
import { AppShell, Section, MeterBar, Spinner, StatusLine } from '../components/index.js';
|
|
8
|
+
import { usePolling } from '../hooks/index.js';
|
|
9
|
+
const PROFILES = {
|
|
10
|
+
small: { PG_SHM_SIZE: '1gb', PG_SHARED_BUFFERS: '512MB', PG_EFFECTIVE_CACHE_SIZE: '1536MB', PG_WORK_MEM: '8MB', PG_MAINTENANCE_WORK_MEM: '128MB', label: 'small (8GB appliance, <40GB DB)' },
|
|
11
|
+
medium: { PG_SHM_SIZE: '4gb', PG_SHARED_BUFFERS: '2GB', PG_EFFECTIVE_CACHE_SIZE: '6GB', PG_WORK_MEM: '16MB', PG_MAINTENANCE_WORK_MEM: '256MB', label: 'medium (16GB server, 40-100GB DB)' },
|
|
12
|
+
large: { PG_SHM_SIZE: '8gb', PG_SHARED_BUFFERS: '4GB', PG_EFFECTIVE_CACHE_SIZE: '12GB', PG_WORK_MEM: '32MB', PG_MAINTENANCE_WORK_MEM: '512MB', label: 'large (32GB+ server, 100GB+ DB)' },
|
|
13
|
+
};
|
|
14
|
+
const PROFILE_ORDER = ['small', 'medium', 'large'];
|
|
15
|
+
/* ── SQL helpers ───────────────────────────────────────────────────── */
|
|
16
|
+
async function psql(sql) {
|
|
17
|
+
const result = await composeExec('db', ['psql', '-U', DB_USER, '-d', DB_NAME, '-t', '-A', '-c', sql], { env: PG_ENV, pipe: true });
|
|
18
|
+
return (result.stdout ?? '').trim();
|
|
19
|
+
}
|
|
20
|
+
async function fetchDbHealth() {
|
|
21
|
+
const [connRaw, maxConnRaw, cacheRaw, sbRaw, wmRaw, mwmRaw, avRaw, ckptRaw, sizeRaw, tablesRaw,] = await Promise.allSettled([
|
|
22
|
+
// 0: active/idle counts
|
|
23
|
+
psql(`SELECT state, count(*) FROM pg_stat_activity GROUP BY state`),
|
|
24
|
+
// 1: max_connections
|
|
25
|
+
psql(`SHOW max_connections`),
|
|
26
|
+
// 2: buffer cache hit rate
|
|
27
|
+
psql(`SELECT CASE WHEN (blks_hit + blks_read) = 0 THEN NULL ELSE round(blks_hit * 100.0 / (blks_hit + blks_read), 2) END FROM pg_stat_bgwriter`),
|
|
28
|
+
// 3: shared_buffers live value
|
|
29
|
+
psql(`SHOW shared_buffers`),
|
|
30
|
+
// 4: work_mem live value
|
|
31
|
+
psql(`SHOW work_mem`),
|
|
32
|
+
// 5: maintenance_work_mem live value
|
|
33
|
+
psql(`SHOW maintenance_work_mem`),
|
|
34
|
+
// 6: autovacuum - top tables by dead tuples
|
|
35
|
+
psql(`SELECT relname, n_dead_tup, n_live_tup, CASE WHEN (n_live_tup + n_dead_tup) = 0 THEN 0 ELSE round(n_dead_tup * 100.0 / (n_live_tup + n_dead_tup), 1) END AS ratio, COALESCE(to_char(last_autovacuum, 'HH24:MI'), COALESCE(to_char(last_vacuum, 'HH24:MI'), 'never')) AS last_vac FROM pg_stat_user_tables WHERE n_dead_tup > 100 ORDER BY n_dead_tup DESC LIMIT 5`),
|
|
36
|
+
// 7: checkpoint stats
|
|
37
|
+
psql(`SELECT checkpoints_timed, checkpoints_req, CASE WHEN (blk_write_time + blk_read_time) = 0 THEN 0 ELSE round(blk_write_time * 100.0 / (blk_write_time + blk_read_time + 1), 1) END FROM pg_stat_bgwriter`),
|
|
38
|
+
// 8: total db size in bytes
|
|
39
|
+
psql(`SELECT pg_database_size(current_database())`),
|
|
40
|
+
// 9: top 5 tables by size
|
|
41
|
+
psql(`SELECT relname, pg_size_pretty(pg_total_relation_size(quote_ident(relname))) FROM pg_stat_user_tables ORDER BY pg_total_relation_size(quote_ident(relname)) DESC LIMIT 5`),
|
|
42
|
+
]);
|
|
43
|
+
// Parse connection counts
|
|
44
|
+
let activeConns = 0;
|
|
45
|
+
let idleConns = 0;
|
|
46
|
+
if (connRaw.status === 'fulfilled') {
|
|
47
|
+
for (const line of connRaw.value.split('\n').filter(Boolean)) {
|
|
48
|
+
const parts = line.split('|');
|
|
49
|
+
const state = parts[0]?.trim() ?? '';
|
|
50
|
+
const count = parseInt(parts[1]?.trim() ?? '0', 10);
|
|
51
|
+
if (state === 'active')
|
|
52
|
+
activeConns = count;
|
|
53
|
+
else if (state === 'idle')
|
|
54
|
+
idleConns = count;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const maxConns = maxConnRaw.status === 'fulfilled' ? parseInt(maxConnRaw.value, 10) || 300 : 300;
|
|
58
|
+
const cacheHitPct = cacheRaw.status === 'fulfilled' && cacheRaw.value ? parseFloat(cacheRaw.value) : null;
|
|
59
|
+
const sharedBuffers = sbRaw.status === 'fulfilled' ? sbRaw.value : '?';
|
|
60
|
+
const workMem = wmRaw.status === 'fulfilled' ? wmRaw.value : '?';
|
|
61
|
+
const maintenanceWorkMem = mwmRaw.status === 'fulfilled' ? mwmRaw.value : '?';
|
|
62
|
+
// Parse autovacuum rows
|
|
63
|
+
const autovacuumRows = [];
|
|
64
|
+
if (avRaw.status === 'fulfilled') {
|
|
65
|
+
for (const line of avRaw.value.split('\n').filter(Boolean)) {
|
|
66
|
+
const p = line.split('|');
|
|
67
|
+
if (p.length >= 5) {
|
|
68
|
+
autovacuumRows.push({
|
|
69
|
+
table: p[0]?.trim() ?? '',
|
|
70
|
+
deadTup: parseInt(p[1]?.trim() ?? '0', 10),
|
|
71
|
+
liveTup: parseInt(p[2]?.trim() ?? '0', 10),
|
|
72
|
+
ratio: parseFloat(p[3]?.trim() ?? '0'),
|
|
73
|
+
lastVacuum: p[4]?.trim() ?? 'never',
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Parse checkpoint stats
|
|
79
|
+
let checkpointsScheduled = 0;
|
|
80
|
+
let checkpointsRequested = 0;
|
|
81
|
+
let writeTimePct = null;
|
|
82
|
+
if (ckptRaw.status === 'fulfilled') {
|
|
83
|
+
const p = ckptRaw.value.split('|');
|
|
84
|
+
checkpointsScheduled = parseInt(p[0]?.trim() ?? '0', 10);
|
|
85
|
+
checkpointsRequested = parseInt(p[1]?.trim() ?? '0', 10);
|
|
86
|
+
writeTimePct = parseFloat(p[2]?.trim() ?? '0');
|
|
87
|
+
}
|
|
88
|
+
const totalSizeBytes = sizeRaw.status === 'fulfilled' ? parseInt(sizeRaw.value, 10) || 0 : 0;
|
|
89
|
+
const topTables = [];
|
|
90
|
+
if (tablesRaw.status === 'fulfilled') {
|
|
91
|
+
for (const line of tablesRaw.value.split('\n').filter(Boolean)) {
|
|
92
|
+
const p = line.split('|');
|
|
93
|
+
if (p.length >= 2) {
|
|
94
|
+
topTables.push({ table: p[0]?.trim() ?? '', size: p[1]?.trim() ?? '' });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
activeConns, idleConns, maxConns,
|
|
100
|
+
cacheHitPct,
|
|
101
|
+
sharedBuffers, workMem, maintenanceWorkMem,
|
|
102
|
+
autovacuumRows,
|
|
103
|
+
checkpointsScheduled, checkpointsRequested, writeTimePct,
|
|
104
|
+
totalSizeBytes, topTables,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function fmtBytes(bytes) {
|
|
108
|
+
if (bytes >= 1e12)
|
|
109
|
+
return `${(bytes / 1e12).toFixed(1)} TB`;
|
|
110
|
+
if (bytes >= 1e9)
|
|
111
|
+
return `${(bytes / 1e9).toFixed(1)} GB`;
|
|
112
|
+
if (bytes >= 1e6)
|
|
113
|
+
return `${(bytes / 1e6).toFixed(1)} MB`;
|
|
114
|
+
return `${bytes} B`;
|
|
115
|
+
}
|
|
116
|
+
/* ── Component ─────────────────────────────────────────────────────── */
|
|
117
|
+
export function DbHealthView({ onBack }) {
|
|
118
|
+
const [profileCursor, setProfileCursor] = useState(0);
|
|
119
|
+
const [applyStatus, setApplyStatus] = useState('idle');
|
|
120
|
+
const [applyError, setApplyError] = useState('');
|
|
121
|
+
// Read current profile from .env
|
|
122
|
+
const envKeys = readEnvKeys();
|
|
123
|
+
const currentProfile = (envKeys['PG_PROFILE'] ?? 'small');
|
|
124
|
+
const { data, error, isPolling } = usePolling(fetchDbHealth, 10_000, true);
|
|
125
|
+
// Keyboard
|
|
126
|
+
useInput((input, key) => {
|
|
127
|
+
if (input === 'q' || key.escape) {
|
|
128
|
+
if (onBack)
|
|
129
|
+
onBack();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (key.leftArrow) {
|
|
133
|
+
setProfileCursor(prev => Math.max(0, prev - 1));
|
|
134
|
+
setApplyStatus('idle');
|
|
135
|
+
}
|
|
136
|
+
else if (key.rightArrow) {
|
|
137
|
+
setProfileCursor(prev => Math.min(PROFILE_ORDER.length - 1, prev + 1));
|
|
138
|
+
setApplyStatus('idle');
|
|
139
|
+
}
|
|
140
|
+
else if (key.return && applyStatus !== 'saving') {
|
|
141
|
+
const selectedProfile = PROFILE_ORDER[profileCursor];
|
|
142
|
+
if (!selectedProfile)
|
|
143
|
+
return;
|
|
144
|
+
setApplyStatus('saving');
|
|
145
|
+
const profile = PROFILES[selectedProfile];
|
|
146
|
+
updateEnvKeys({
|
|
147
|
+
PG_PROFILE: selectedProfile,
|
|
148
|
+
PG_SHM_SIZE: profile.PG_SHM_SIZE,
|
|
149
|
+
PG_SHARED_BUFFERS: profile.PG_SHARED_BUFFERS,
|
|
150
|
+
PG_EFFECTIVE_CACHE_SIZE: profile.PG_EFFECTIVE_CACHE_SIZE,
|
|
151
|
+
PG_WORK_MEM: profile.PG_WORK_MEM,
|
|
152
|
+
PG_MAINTENANCE_WORK_MEM: profile.PG_MAINTENANCE_WORK_MEM,
|
|
153
|
+
}).then(() => {
|
|
154
|
+
setApplyStatus('saved');
|
|
155
|
+
}).catch((err) => {
|
|
156
|
+
setApplyStatus('error');
|
|
157
|
+
setApplyError(err.message);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
const connTotal = (data?.activeConns ?? 0) + (data?.idleConns ?? 0);
|
|
162
|
+
const connPct = data ? Math.round(connTotal * 100 / data.maxConns) : 0;
|
|
163
|
+
const cacheOk = data?.cacheHitPct !== null && data?.cacheHitPct !== undefined && data.cacheHitPct >= 99;
|
|
164
|
+
const cacheWarn = data?.cacheHitPct !== null && data?.cacheHitPct !== undefined && data.cacheHitPct >= 95 && data.cacheHitPct < 99;
|
|
165
|
+
const reqPct = data
|
|
166
|
+
? data.checkpointsScheduled + data.checkpointsRequested > 0
|
|
167
|
+
? Math.round(data.checkpointsRequested * 100 / (data.checkpointsScheduled + data.checkpointsRequested))
|
|
168
|
+
: 0
|
|
169
|
+
: 0;
|
|
170
|
+
return (_jsxs(AppShell, { command: "ct db health", children: [_jsxs(Section, { title: "Memory Profile", children: [_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [PROFILE_ORDER.map((p, i) => {
|
|
171
|
+
const isCurrent = p === currentProfile;
|
|
172
|
+
const isFocused = i === profileCursor;
|
|
173
|
+
const label = p.charAt(0).toUpperCase() + p.slice(1);
|
|
174
|
+
return (_jsx(Box, { marginRight: 2, children: _jsx(Text, { color: isFocused ? 'cyan' : isCurrent ? 'green' : undefined, bold: isFocused || isCurrent, children: isFocused ? `[${label}]` : isCurrent ? `(${label})` : ` ${label} ` }) }, p));
|
|
175
|
+
}), applyStatus === 'saving' && _jsx(Text, { color: "yellow", children: " Saving..." }), applyStatus === 'saved' && _jsx(Text, { color: "yellow", children: " \u21BA Restart required: ct-cli restart" }), applyStatus === 'error' && _jsxs(Text, { color: "red", children: [" Error: ", applyError] })] }), _jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { dimColor: true, children: 'shared_buffers: ' }), _jsx(Text, { children: data?.sharedBuffers ?? '...' }), _jsx(Text, { dimColor: true, children: ' (live)' })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { dimColor: true, children: 'work_mem: ' }), _jsx(Text, { children: data?.workMem ?? '...' }), _jsx(Text, { dimColor: true, children: ' (live)' })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { dimColor: true, children: 'maintenance_work_mem: ' }), _jsx(Text, { children: data?.maintenanceWorkMem ?? '...' }), _jsx(Text, { dimColor: true, children: ' (live)' })] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Profile set: " }), _jsx(Text, { color: "green", children: currentProfile }), _jsx(Text, { dimColor: true, children: ' — ' }), _jsx(Text, { dimColor: true, children: PROFILES[currentProfile]?.label ?? '' })] })] })] }), !data && !error && (_jsx(Section, { title: "Loading", children: _jsx(Spinner, { label: "Fetching database metrics..." }) })), error && (_jsx(Section, { title: "Error", children: _jsx(StatusLine, { status: "fail", label: `Failed to fetch metrics: ${error.message}` }) })), data && (_jsxs(_Fragment, { children: [_jsxs(Box, { flexDirection: "row", marginBottom: 0, children: [_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsxs(Section, { title: "Connection Health", children: [_jsx(MeterBar, { label: "Conns", percent: connPct, detail: `${connTotal} / ${data.maxConns}`, thresholds: [50, 80] }), _jsxs(Box, { marginLeft: 2, marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: `Active: ${data.activeConns} Idle: ${data.idleConns}` }), _jsx(StatusLine, { status: connPct < 50 ? 'ok' : connPct < 80 ? 'warn' : 'fail', label: connPct < 50 ? 'healthy' : connPct < 80 ? 'elevated' : 'critical' })] })] }) }), _jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Section, { title: "Cache Hit Rate", children: data.cacheHitPct !== null ? (_jsxs(_Fragment, { children: [_jsx(MeterBar, { label: "Cache", percent: data.cacheHitPct, detail: `${data.cacheHitPct}%`, thresholds: [95, 99] }), _jsx(Box, { marginLeft: 2, marginTop: 1, children: _jsx(StatusLine, { status: cacheOk ? 'ok' : cacheWarn ? 'warn' : 'fail', label: cacheOk ? '>= 99% healthy' : cacheWarn ? '95-99% consider larger shared_buffers' : '< 95% shared_buffers too small' }) })] })) : (_jsx(StatusLine, { status: "info", label: "No read activity yet" })) }) })] }), _jsx(Section, { title: "Autovacuum Health (tables with > 100 dead tuples)", children: data.autovacuumRows.length === 0 ? (_jsx(StatusLine, { status: "ok", label: "All tables clean" })) : (_jsxs(_Fragment, { children: [_jsx(Box, { flexDirection: "row", marginBottom: 0, children: _jsx(Text, { bold: true, dimColor: true, children: ' Table Dead Tup Ratio Last Vac' }) }), data.autovacuumRows.map((row, i) => {
|
|
176
|
+
const color = row.ratio > 20 ? 'red' : row.ratio > 10 ? 'yellow' : undefined;
|
|
177
|
+
return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: color, children: ' ' }), _jsx(Text, { color: color, children: row.table.padEnd(26) }), _jsx(Text, { color: color, children: String(row.deadTup).padStart(9) }), _jsx(Text, { color: color, children: ` ${row.ratio.toFixed(1)}%`.padEnd(9) }), _jsxs(Text, { dimColor: true, children: [" ", row.lastVacuum] })] }, i));
|
|
178
|
+
})] })) }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Section, { title: "Checkpoint Stats", children: _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [_jsx(Text, { children: `Scheduled: ${data.checkpointsScheduled}` }), _jsx(Text, { children: `Requested: ${data.checkpointsRequested} (${reqPct}%)` }), data.writeTimePct !== null && (_jsx(Text, { children: `Write time: ${data.writeTimePct}%` })), _jsx(StatusLine, { status: reqPct < 5 ? 'ok' : reqPct < 20 ? 'warn' : 'fail', label: reqPct < 5 ? 'healthy' : reqPct < 20 ? 'elevated — check wal settings' : 'high — too many writes' })] }) }) }), _jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Section, { title: `DB Size (${fmtBytes(data.totalSizeBytes)})`, children: data.topTables.map((t, i) => (_jsxs(Box, { marginLeft: 2, children: [_jsx(Text, { children: t.table.padEnd(24) }), _jsx(Text, { color: "cyan", children: t.size })] }, i))) }) })] })] })), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsxs(Text, { dimColor: true, children: ['\u2190\u2192 Select profile Enter Apply q Back', isPolling ? ' \u21bb auto-refresh 10s' : ''] }) })] }));
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=DbHealthView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DbHealthView.js","sourceRoot":"","sources":["../../../src/ui/views/DbHealthView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DeploymentBackend } from '../../lib/backend.js';
|
|
2
|
+
interface K8sDeployViewProps {
|
|
3
|
+
backend: DeploymentBackend;
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function K8sDeployView({ backend, onBack }: K8sDeployViewProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=K8sDeployView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"K8sDeployView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/K8sDeployView.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,sBAAsB,CAAC;AAE3E,UAAU,kBAAkB;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,kBAAkB,2CA+JpE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { AppShell, Section, Spinner } from '../components/index.js';
|
|
5
|
+
import { useAsyncTask } from '../hooks/index.js';
|
|
6
|
+
import { getPrefs } from '../../lib/prefs.js';
|
|
7
|
+
import { resolveHelmfilePath, helmfileSync, helmfileDiff, helmfileDestroy, } from '../../lib/helmfile.js';
|
|
8
|
+
export function K8sDeployView({ backend, onBack }) {
|
|
9
|
+
const [phase, setPhase] = useState('list');
|
|
10
|
+
const [cursor, setCursor] = useState(0);
|
|
11
|
+
const [actionLabel, setActionLabel] = useState('');
|
|
12
|
+
const [actionOutput, setActionOutput] = useState('');
|
|
13
|
+
const [actionError, setActionError] = useState(null);
|
|
14
|
+
const releasesTask = useAsyncTask(() => backend.getHelmReleases());
|
|
15
|
+
const prefs = getPrefs();
|
|
16
|
+
const helmfileOpts = {
|
|
17
|
+
helmfilePath: resolveHelmfilePath(),
|
|
18
|
+
environment: prefs.k8sEnvironment,
|
|
19
|
+
};
|
|
20
|
+
const runAction = useCallback(async (label, fn) => {
|
|
21
|
+
setPhase('action');
|
|
22
|
+
setActionLabel(label);
|
|
23
|
+
setActionOutput('');
|
|
24
|
+
setActionError(null);
|
|
25
|
+
try {
|
|
26
|
+
const result = await fn();
|
|
27
|
+
setActionOutput(result ?? 'Done');
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
setActionError(err.message);
|
|
31
|
+
}
|
|
32
|
+
setPhase('list');
|
|
33
|
+
// Refresh releases
|
|
34
|
+
releasesTask.run();
|
|
35
|
+
}, [releasesTask]);
|
|
36
|
+
useInput((input, key) => {
|
|
37
|
+
if (phase === 'confirm-destroy') {
|
|
38
|
+
if (input === 'y' || input === 'Y') {
|
|
39
|
+
runAction('Destroying releases...', () => helmfileDestroy(helmfileOpts).then(() => 'Destroyed'));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
setPhase('list');
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (phase !== 'list')
|
|
47
|
+
return;
|
|
48
|
+
const releases = releasesTask.data ?? [];
|
|
49
|
+
if (key.upArrow) {
|
|
50
|
+
setCursor(prev => (prev > 0 ? prev - 1 : Math.max(0, releases.length - 1)));
|
|
51
|
+
}
|
|
52
|
+
else if (key.downArrow) {
|
|
53
|
+
setCursor(prev => (prev < releases.length - 1 ? prev + 1 : 0));
|
|
54
|
+
}
|
|
55
|
+
else if (input === 's') {
|
|
56
|
+
runAction('Syncing (deploy/upgrade)...', () => helmfileSync(helmfileOpts).then(() => 'Sync complete'));
|
|
57
|
+
}
|
|
58
|
+
else if (input === 'd') {
|
|
59
|
+
runAction('Computing diff...', () => helmfileDiff(helmfileOpts));
|
|
60
|
+
}
|
|
61
|
+
else if (input === 'x') {
|
|
62
|
+
setPhase('confirm-destroy');
|
|
63
|
+
}
|
|
64
|
+
else if (input === 'q' || key.escape || key.leftArrow) {
|
|
65
|
+
onBack?.();
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
if (phase === 'action') {
|
|
69
|
+
return (_jsx(AppShell, { command: "ct k8s deploy", children: _jsx(Section, { title: "Kubernetes Deployment", children: _jsx(Spinner, { label: actionLabel }) }) }));
|
|
70
|
+
}
|
|
71
|
+
if (phase === 'confirm-destroy') {
|
|
72
|
+
return (_jsx(AppShell, { command: "ct k8s deploy", children: _jsx(Section, { title: "Confirm Destroy", children: _jsxs(Box, { paddingLeft: 2, flexDirection: "column", children: [_jsx(Text, { color: "red", bold: true, children: "This will destroy all Helm releases in the namespace." }), _jsx(Text, { children: "Are you sure? (y/N)" })] }) }) }));
|
|
73
|
+
}
|
|
74
|
+
const releases = releasesTask.data ?? [];
|
|
75
|
+
return (_jsxs(AppShell, { command: "ct k8s deploy", children: [_jsxs(Section, { title: "Kubernetes Deployment", children: [_jsxs(Box, { paddingLeft: 2, marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "Environment: " }), _jsx(Text, { bold: true, children: prefs.k8sEnvironment }), _jsx(Text, { dimColor: true, children: " Helmfile: " }), _jsx(Text, { children: helmfileOpts.helmfilePath.split('/').slice(-2).join('/') })] }), releasesTask.status === 'pending' && _jsx(Spinner, { label: "Loading Helm releases..." }), actionError && (_jsx(Box, { paddingLeft: 2, marginBottom: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", actionError] }) })), actionOutput && !actionError && (_jsx(Box, { paddingLeft: 2, marginBottom: 1, children: _jsx(Text, { color: "green", children: actionOutput }) })), releases.length > 0 && (_jsxs(_Fragment, { children: [_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { dimColor: true, bold: true, children: ' '.padEnd(3) }), _jsx(Text, { dimColor: true, bold: true, children: 'Release'.padEnd(18) }), _jsx(Text, { dimColor: true, bold: true, children: 'Status'.padEnd(12) }), _jsx(Text, { dimColor: true, bold: true, children: 'Chart'.padEnd(20) }), _jsx(Text, { dimColor: true, bold: true, children: 'Version' })] }), releases.map((r, i) => {
|
|
76
|
+
const isActive = i === cursor;
|
|
77
|
+
const statusColor = r.status === 'deployed' ? 'green' : r.status === 'failed' ? 'red' : 'yellow';
|
|
78
|
+
return (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: isActive ? 'cyan' : statusColor, children: isActive ? ' \u276F ' : ' \u25CF ' }), _jsx(Text, { color: isActive ? 'cyan' : undefined, bold: isActive, children: r.name.padEnd(18) }), _jsx(Text, { color: statusColor, children: r.status.padEnd(12) }), _jsx(Text, { dimColor: !isActive, children: r.chart.padEnd(20) }), _jsx(Text, { dimColor: !isActive, children: r.appVersion })] }, r.name));
|
|
79
|
+
})] })), releasesTask.status === 'done' && releases.length === 0 && (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "No Helm releases found." }) }))] }), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: 's Sync d Diff x Destroy q Back' }) })] }));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=K8sDeployView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"K8sDeployView.js","sourceRoot":"","sources":["../../../src/ui/views/K8sDeployView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DeploymentBackend } from '../../lib/backend.js';
|
|
2
|
+
interface K8sRunbookViewProps {
|
|
3
|
+
backend: DeploymentBackend;
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function K8sRunbookView({ backend, onBack }: K8sRunbookViewProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=K8sRunbookView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"K8sRunbookView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/K8sRunbookView.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,UAAU,mBAAmB;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AA6ID,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CA0CtE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { AppShell, Section, StepList } from '../components/index.js';
|
|
5
|
+
import { useStepRunner } from '../hooks/index.js';
|
|
6
|
+
function buildRunbookSteps(backend) {
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
label: 'Node health',
|
|
10
|
+
run: async (ctx) => {
|
|
11
|
+
const nodes = await backend.getNodes();
|
|
12
|
+
const ready = nodes.filter(n => n.status === 'Ready').length;
|
|
13
|
+
ctx?.log(`${ready}/${nodes.length} nodes ready`);
|
|
14
|
+
if (ready < nodes.length)
|
|
15
|
+
throw new Error(`${nodes.length - ready} node(s) not ready`);
|
|
16
|
+
return `${ready}/${nodes.length} Ready`;
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
label: 'CNPG cluster',
|
|
21
|
+
run: async (ctx) => {
|
|
22
|
+
const status = await backend.getCnpgClusterStatus();
|
|
23
|
+
ctx?.log(`Phase: ${status.phase}, Instances: ${status.readyInstances}/${status.instances}`);
|
|
24
|
+
if (status.phase !== 'Healthy')
|
|
25
|
+
throw new Error(`CNPG phase: ${status.phase}`);
|
|
26
|
+
if (status.readyInstances < status.instances)
|
|
27
|
+
throw new Error(`Only ${status.readyInstances}/${status.instances} instances ready`);
|
|
28
|
+
return `${status.phase} (${status.readyInstances}/${status.instances})`;
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
label: 'WAL archiving',
|
|
33
|
+
run: async (ctx) => {
|
|
34
|
+
const status = await backend.getCnpgClusterStatus();
|
|
35
|
+
const wal = status.walArchiving ?? 'Unknown';
|
|
36
|
+
ctx?.log(`WAL archiving: ${wal}`);
|
|
37
|
+
if (wal !== 'OK')
|
|
38
|
+
throw new Error(`WAL archiving: ${wal}`);
|
|
39
|
+
return wal;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: 'Last backup',
|
|
44
|
+
run: async (ctx) => {
|
|
45
|
+
const status = await backend.getCnpgClusterStatus();
|
|
46
|
+
if (!status.lastBackup) {
|
|
47
|
+
ctx?.log('No backup found');
|
|
48
|
+
throw new Error('No backup recorded');
|
|
49
|
+
}
|
|
50
|
+
const hoursAgo = Math.floor((Date.now() - new Date(status.lastBackup).getTime()) / 3600000);
|
|
51
|
+
ctx?.log(`Last backup: ${hoursAgo}h ago (${status.lastBackup})`);
|
|
52
|
+
if (hoursAgo > 24)
|
|
53
|
+
throw new Error(`Last backup was ${hoursAgo}h ago (>24h)`);
|
|
54
|
+
return `${hoursAgo}h ago`;
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: 'Helm releases',
|
|
59
|
+
run: async (ctx) => {
|
|
60
|
+
const releases = await backend.getHelmReleases();
|
|
61
|
+
const deployed = releases.filter(r => r.status === 'deployed').length;
|
|
62
|
+
const failed = releases.filter(r => r.status === 'failed');
|
|
63
|
+
ctx?.log(`${deployed} deployed, ${failed.length} failed`);
|
|
64
|
+
for (const r of releases)
|
|
65
|
+
ctx?.log(` ${r.name}: ${r.status} (${r.chart})`);
|
|
66
|
+
if (failed.length > 0)
|
|
67
|
+
throw new Error(`${failed.length} release(s) failed: ${failed.map(r => r.name).join(', ')}`);
|
|
68
|
+
return `${deployed} deployed`;
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
label: 'Pod health',
|
|
73
|
+
run: async (ctx) => {
|
|
74
|
+
const pods = await backend.listServices();
|
|
75
|
+
const running = pods.filter(p => p.status === 'Running').length;
|
|
76
|
+
const crashloop = pods.filter(p => p.status === 'CrashLoopBackOff');
|
|
77
|
+
ctx?.log(`${running}/${pods.length} running`);
|
|
78
|
+
if (crashloop.length > 0) {
|
|
79
|
+
for (const p of crashloop)
|
|
80
|
+
ctx?.log(` CrashLoopBackOff: ${p.name}`);
|
|
81
|
+
throw new Error(`${crashloop.length} pod(s) in CrashLoopBackOff`);
|
|
82
|
+
}
|
|
83
|
+
if (running < pods.length)
|
|
84
|
+
throw new Error(`Only ${running}/${pods.length} pods running`);
|
|
85
|
+
return `${running}/${pods.length} Running`;
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
label: 'API health',
|
|
90
|
+
run: async (ctx) => {
|
|
91
|
+
const health = await backend.getHealth();
|
|
92
|
+
ctx?.log(`API: ${health.api ? 'ok' : 'fail'}`);
|
|
93
|
+
if (!health.api)
|
|
94
|
+
throw new Error(health.errors['api'] || 'API not responding');
|
|
95
|
+
return 'responding';
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
label: 'CURRI health',
|
|
100
|
+
run: async (ctx) => {
|
|
101
|
+
const health = await backend.getHealth();
|
|
102
|
+
ctx?.log(`CURRI: ${health.curri ? 'ok' : 'fail'}`);
|
|
103
|
+
if (!health.curri)
|
|
104
|
+
throw new Error(health.errors['curri'] || 'CURRI not responding');
|
|
105
|
+
return 'responding';
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
label: 'DB pool',
|
|
110
|
+
run: async (ctx) => {
|
|
111
|
+
const health = await backend.getHealth();
|
|
112
|
+
ctx?.log(`DB pool: ${health.dbConnected ? 'ok' : 'fail'}`);
|
|
113
|
+
if (!health.dbConnected)
|
|
114
|
+
throw new Error(health.errors['db'] || 'DB pool not connected');
|
|
115
|
+
return 'connected';
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
label: 'SFTP daemon',
|
|
120
|
+
run: async (ctx) => {
|
|
121
|
+
const health = await backend.getHealth();
|
|
122
|
+
ctx?.log(`SFTP: ${health.sftp ? 'ok' : 'fail'}`);
|
|
123
|
+
if (!health.sftp)
|
|
124
|
+
throw new Error(health.errors['sftp'] || 'SFTP not running');
|
|
125
|
+
return 'listening';
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
label: 'Ingress endpoints',
|
|
130
|
+
run: async (ctx) => {
|
|
131
|
+
const health = await backend.getHealth();
|
|
132
|
+
ctx?.log(`Admin HTTPS: ${health.adminProxy ? 'ok' : 'fail'}`);
|
|
133
|
+
ctx?.log(`CURRI HTTP: ${health.curriProxy ? 'ok' : 'fail'}`);
|
|
134
|
+
if (!health.adminProxy || !health.curriProxy) {
|
|
135
|
+
const failed = [];
|
|
136
|
+
if (!health.adminProxy)
|
|
137
|
+
failed.push('HTTPS/443');
|
|
138
|
+
if (!health.curriProxy)
|
|
139
|
+
failed.push('HTTP/80');
|
|
140
|
+
throw new Error(`Ingress down: ${failed.join(', ')}`);
|
|
141
|
+
}
|
|
142
|
+
return 'ports 80/443 ok';
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
label: 'Storage (PVCs)',
|
|
147
|
+
run: async (ctx) => {
|
|
148
|
+
const pvcs = await backend.getPVCs();
|
|
149
|
+
const bound = pvcs.filter(p => p.status === 'Bound').length;
|
|
150
|
+
ctx?.log(`${bound}/${pvcs.length} PVCs bound`);
|
|
151
|
+
for (const p of pvcs)
|
|
152
|
+
ctx?.log(` ${p.name}: ${p.status} (${p.size})`);
|
|
153
|
+
const unbound = pvcs.filter(p => p.status !== 'Bound');
|
|
154
|
+
if (unbound.length > 0)
|
|
155
|
+
throw new Error(`${unbound.length} PVC(s) not bound: ${unbound.map(p => p.name).join(', ')}`);
|
|
156
|
+
return `${bound}/${pvcs.length} Bound`;
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
];
|
|
160
|
+
}
|
|
161
|
+
export function K8sRunbookView({ backend, onBack }) {
|
|
162
|
+
const steps = useMemo(() => buildRunbookSteps(backend), [backend]);
|
|
163
|
+
const { states, isDone, isRunning, run } = useStepRunner(steps);
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
run();
|
|
166
|
+
}, [run]);
|
|
167
|
+
useInput((input, key) => {
|
|
168
|
+
if (input === 'q' || key.escape || key.leftArrow) {
|
|
169
|
+
onBack?.();
|
|
170
|
+
}
|
|
171
|
+
if (input === 'r' && !isRunning) {
|
|
172
|
+
run();
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
const passed = states.filter(s => s.status === 'done').length;
|
|
176
|
+
const failed = states.filter(s => s.status === 'error').length;
|
|
177
|
+
const running = states.filter(s => s.status === 'running').length;
|
|
178
|
+
const pending = states.filter(s => s.status === 'pending').length;
|
|
179
|
+
return (_jsxs(AppShell, { command: "ct k8s runbook", onBack: onBack, isComplete: isDone, children: [_jsxs(Section, { title: "Deployment Runbook", children: [_jsx(StepList, { steps: states }), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsxs(Text, { children: ["Result: ", _jsxs(Text, { color: "green", children: [passed, " passed"] }), failed > 0 && _jsxs(Text, { color: "red", children: [", ", failed, " failed"] }), running > 0 && _jsxs(Text, { color: "yellow", children: [", ", running, " running"] }), pending > 0 && _jsxs(Text, { dimColor: true, children: [", ", pending, " pending"] })] }) })] }), _jsx(Box, { paddingLeft: 2, paddingTop: 1, children: _jsx(Text, { dimColor: true, children: 'r Re-run q Back' }) })] }));
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=K8sRunbookView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"K8sRunbookView.js","sourceRoot":"","sources":["../../../src/ui/views/K8sRunbookView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASlD,SAAS,iBAAiB,CAAC,OAA0B;IACnD,OAAO;QACL;YACE,KAAK,EAAE,aAAa;YACpB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAS,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC7D,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,cAAc,CAAC,CAAC;gBACjD,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,oBAAoB,CAAC,CAAC;gBACvF,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,QAAQ,CAAC;YAC1C,CAAC;SACF;QACD;YACE,KAAK,EAAE,cAAc;YACrB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAqB,EAAE,CAAC;gBACrD,GAAG,EAAE,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,gBAAgB,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC5F,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/E,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,kBAAkB,CAAC,CAAC;gBACnI,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;YAC1E,CAAC;SACF;QACD;YACE,KAAK,EAAE,eAAe;YACtB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAqB,EAAE,CAAC;gBACrD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;gBAC7C,GAAG,EAAE,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;gBAClC,IAAI,GAAG,KAAK,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;gBAC3D,OAAO,GAAG,CAAC;YACb,CAAC;SACF;QACD;YACE,KAAK,EAAE,aAAa;YACpB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAqB,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBACvB,GAAG,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC5F,GAAG,EAAE,GAAG,CAAC,gBAAgB,QAAQ,UAAU,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;gBACjE,IAAI,QAAQ,GAAG,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,cAAc,CAAC,CAAC;gBAC9E,OAAO,GAAG,QAAQ,OAAO,CAAC;YAC5B,CAAC;SACF;QACD;YACE,KAAK,EAAE,eAAe;YACtB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAgB,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;gBACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;gBAC3D,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,cAAc,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;gBAC1D,KAAK,MAAM,CAAC,IAAI,QAAQ;oBAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC5E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,uBAAuB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpH,OAAO,GAAG,QAAQ,WAAW,CAAC;YAChC,CAAC;SACF;QACD;YACE,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;gBAChE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC;gBACpE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,UAAU,CAAC,CAAC;gBAC9C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,KAAK,MAAM,CAAC,IAAI,SAAS;wBAAE,GAAG,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACrE,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,6BAA6B,CAAC,CAAC;gBACpE,CAAC;gBACD,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,OAAO,IAAI,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC;gBAC1F,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,UAAU,CAAC;YAC7C,CAAC;SACF;QACD;YACE,KAAK,EAAE,YAAY;YACnB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,GAAG,EAAE,GAAG,CAAC,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,CAAC;gBAC/E,OAAO,YAAY,CAAC;YACtB,CAAC;SACF;QACD;YACE,KAAK,EAAE,cAAc;YACrB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,GAAG,EAAE,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,sBAAsB,CAAC,CAAC;gBACrF,OAAO,YAAY,CAAC;YACtB,CAAC;SACF;QACD;YACE,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,GAAG,EAAE,GAAG,CAAC,YAAY,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,MAAM,CAAC,WAAW;oBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,CAAC;gBACzF,OAAO,WAAW,CAAC;YACrB,CAAC;SACF;QACD;YACE,KAAK,EAAE,aAAa;YACpB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,GAAG,EAAE,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC;gBAC/E,OAAO,WAAW,CAAC;YACrB,CAAC;SACF;QACD;YACE,KAAK,EAAE,mBAAmB;YAC1B,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,GAAG,EAAE,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,GAAG,EAAE,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7D,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBAC7C,MAAM,MAAM,GAAG,EAAE,CAAC;oBAClB,IAAI,CAAC,MAAM,CAAC,UAAU;wBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACjD,IAAI,CAAC,MAAM,CAAC,UAAU;wBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC/C,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBACD,OAAO,iBAAiB,CAAC;YAC3B,CAAC;SACF;QACD;YACE,KAAK,EAAE,gBAAgB;YACvB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAQ,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC5D,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC;gBAC/C,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBACvE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;gBACvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,sBAAsB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtH,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,QAAQ,CAAC;YACzC,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAuB;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,EAAE,CAAC;IACR,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACjD,MAAM,EAAE,EAAE,CAAC;QACb,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,GAAG,EAAE,CAAC;QACR,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAElE,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,gBAAgB,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aACnE,MAAC,OAAO,IAAC,KAAK,EAAC,oBAAoB,aACjC,KAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,GAAI,EAE3B,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAChC,MAAC,IAAI,2BACK,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,aAAE,MAAM,eAAe,EACjD,MAAM,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,mBAAI,MAAM,eAAe,EACxD,OAAO,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,mBAAI,OAAO,gBAAgB,EAC9D,OAAO,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,OAAO,gBAAgB,IACpD,GACH,IACE,EAEV,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAChC,KAAC,IAAI,IAAC,QAAQ,kBAAE,mBAAmB,GAAQ,GACvC,IACG,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DeploymentBackend } from '../../lib/backend.js';
|
|
2
|
+
interface K8sServicesViewProps {
|
|
3
|
+
backend: DeploymentBackend;
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function K8sServicesView({ backend, onBack }: K8sServicesViewProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=K8sServicesView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"K8sServicesView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/K8sServicesView.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,sBAAsB,CAAC;AAE3E,UAAU,oBAAoB;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,oBAAoB,2CAoKxE"}
|