@calltelemetry/cli 0.4.26 → 0.5.1

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.
Files changed (168) hide show
  1. package/dist/commands/diag.d.ts.map +1 -1
  2. package/dist/commands/diag.js +29 -0
  3. package/dist/commands/diag.js.map +1 -1
  4. package/dist/commands/k8s.d.ts +3 -0
  5. package/dist/commands/k8s.d.ts.map +1 -0
  6. package/dist/commands/k8s.js +192 -0
  7. package/dist/commands/k8s.js.map +1 -0
  8. package/dist/commands/network.d.ts +3 -0
  9. package/dist/commands/network.d.ts.map +1 -0
  10. package/dist/commands/network.js +135 -0
  11. package/dist/commands/network.js.map +1 -0
  12. package/dist/commands/shell.d.ts +3 -0
  13. package/dist/commands/shell.d.ts.map +1 -0
  14. package/dist/commands/shell.js +10 -0
  15. package/dist/commands/shell.js.map +1 -0
  16. package/dist/index.js +7 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/backend.d.ts +85 -0
  19. package/dist/lib/backend.d.ts.map +1 -0
  20. package/dist/lib/backend.js +6 -0
  21. package/dist/lib/backend.js.map +1 -0
  22. package/dist/lib/compose-backend.d.ts +19 -0
  23. package/dist/lib/compose-backend.d.ts.map +1 -0
  24. package/dist/lib/compose-backend.js +78 -0
  25. package/dist/lib/compose-backend.js.map +1 -0
  26. package/dist/lib/deployment.d.ts +6 -0
  27. package/dist/lib/deployment.d.ts.map +1 -0
  28. package/dist/lib/deployment.js +51 -0
  29. package/dist/lib/deployment.js.map +1 -0
  30. package/dist/lib/doctor.d.ts +13 -0
  31. package/dist/lib/doctor.d.ts.map +1 -0
  32. package/dist/lib/doctor.js +82 -0
  33. package/dist/lib/doctor.js.map +1 -0
  34. package/dist/lib/helmfile.d.ts +14 -0
  35. package/dist/lib/helmfile.d.ts.map +1 -0
  36. package/dist/lib/helmfile.js +78 -0
  37. package/dist/lib/helmfile.js.map +1 -0
  38. package/dist/lib/k8s-backend.d.ts +36 -0
  39. package/dist/lib/k8s-backend.d.ts.map +1 -0
  40. package/dist/lib/k8s-backend.js +301 -0
  41. package/dist/lib/k8s-backend.js.map +1 -0
  42. package/dist/lib/k8s-client.d.ts +14 -0
  43. package/dist/lib/k8s-client.d.ts.map +1 -0
  44. package/dist/lib/k8s-client.js +42 -0
  45. package/dist/lib/k8s-client.js.map +1 -0
  46. package/dist/lib/network.d.ts +8 -0
  47. package/dist/lib/network.d.ts.map +1 -1
  48. package/dist/lib/network.js +17 -0
  49. package/dist/lib/network.js.map +1 -1
  50. package/dist/lib/prefs.d.ts +3 -0
  51. package/dist/lib/prefs.d.ts.map +1 -1
  52. package/dist/lib/prefs.js +9 -1
  53. package/dist/lib/prefs.js.map +1 -1
  54. package/dist/shell/commands/config.d.ts +11 -0
  55. package/dist/shell/commands/config.d.ts.map +1 -0
  56. package/dist/shell/commands/config.js +193 -0
  57. package/dist/shell/commands/config.js.map +1 -0
  58. package/dist/shell/commands/connect.d.ts +18 -0
  59. package/dist/shell/commands/connect.d.ts.map +1 -0
  60. package/dist/shell/commands/connect.js +99 -0
  61. package/dist/shell/commands/connect.js.map +1 -0
  62. package/dist/shell/commands/db.d.ts +11 -0
  63. package/dist/shell/commands/db.d.ts.map +1 -0
  64. package/dist/shell/commands/db.js +237 -0
  65. package/dist/shell/commands/db.js.map +1 -0
  66. package/dist/shell/commands/debug.d.ts +15 -0
  67. package/dist/shell/commands/debug.d.ts.map +1 -0
  68. package/dist/shell/commands/debug.js +310 -0
  69. package/dist/shell/commands/debug.js.map +1 -0
  70. package/dist/shell/commands/diag.d.ts +16 -0
  71. package/dist/shell/commands/diag.d.ts.map +1 -0
  72. package/dist/shell/commands/diag.js +607 -0
  73. package/dist/shell/commands/diag.js.map +1 -0
  74. package/dist/shell/commands/registry.d.ts +7 -0
  75. package/dist/shell/commands/registry.d.ts.map +1 -0
  76. package/dist/shell/commands/registry.js +391 -0
  77. package/dist/shell/commands/registry.js.map +1 -0
  78. package/dist/shell/commands/secrets.d.ts +18 -0
  79. package/dist/shell/commands/secrets.d.ts.map +1 -0
  80. package/dist/shell/commands/secrets.js +100 -0
  81. package/dist/shell/commands/secrets.js.map +1 -0
  82. package/dist/shell/commands/services.d.ts +7 -0
  83. package/dist/shell/commands/services.d.ts.map +1 -0
  84. package/dist/shell/commands/services.js +115 -0
  85. package/dist/shell/commands/services.js.map +1 -0
  86. package/dist/shell/commands/show.d.ts +26 -0
  87. package/dist/shell/commands/show.d.ts.map +1 -0
  88. package/dist/shell/commands/show.js +897 -0
  89. package/dist/shell/commands/show.js.map +1 -0
  90. package/dist/shell/commands/system.d.ts +13 -0
  91. package/dist/shell/commands/system.d.ts.map +1 -0
  92. package/dist/shell/commands/system.js +270 -0
  93. package/dist/shell/commands/system.js.map +1 -0
  94. package/dist/shell/commands/test.d.ts +12 -0
  95. package/dist/shell/commands/test.d.ts.map +1 -0
  96. package/dist/shell/commands/test.js +197 -0
  97. package/dist/shell/commands/test.js.map +1 -0
  98. package/dist/shell/commands/users.d.ts +14 -0
  99. package/dist/shell/commands/users.d.ts.map +1 -0
  100. package/dist/shell/commands/users.js +86 -0
  101. package/dist/shell/commands/users.js.map +1 -0
  102. package/dist/shell/completer.d.ts +17 -0
  103. package/dist/shell/completer.d.ts.map +1 -0
  104. package/dist/shell/completer.js +151 -0
  105. package/dist/shell/completer.js.map +1 -0
  106. package/dist/shell/context.d.ts +12 -0
  107. package/dist/shell/context.d.ts.map +1 -0
  108. package/dist/shell/context.js +2 -0
  109. package/dist/shell/context.js.map +1 -0
  110. package/dist/shell/footer.d.ts +8 -0
  111. package/dist/shell/footer.d.ts.map +1 -0
  112. package/dist/shell/footer.js +47 -0
  113. package/dist/shell/footer.js.map +1 -0
  114. package/dist/shell/formatter.d.ts +47 -0
  115. package/dist/shell/formatter.d.ts.map +1 -0
  116. package/dist/shell/formatter.js +135 -0
  117. package/dist/shell/formatter.js.map +1 -0
  118. package/dist/shell/mcp-bridge.d.ts +13 -0
  119. package/dist/shell/mcp-bridge.d.ts.map +1 -0
  120. package/dist/shell/mcp-bridge.js +23 -0
  121. package/dist/shell/mcp-bridge.js.map +1 -0
  122. package/dist/shell/parser.d.ts +36 -0
  123. package/dist/shell/parser.d.ts.map +1 -0
  124. package/dist/shell/parser.js +110 -0
  125. package/dist/shell/parser.js.map +1 -0
  126. package/dist/shell/repl.d.ts +5 -0
  127. package/dist/shell/repl.d.ts.map +1 -0
  128. package/dist/shell/repl.js +273 -0
  129. package/dist/shell/repl.js.map +1 -0
  130. package/dist/shell/sparkline.d.ts +16 -0
  131. package/dist/shell/sparkline.d.ts.map +1 -0
  132. package/dist/shell/sparkline.js +56 -0
  133. package/dist/shell/sparkline.js.map +1 -0
  134. package/dist/shell/theme.d.ts +72 -0
  135. package/dist/shell/theme.d.ts.map +1 -0
  136. package/dist/shell/theme.js +60 -0
  137. package/dist/shell/theme.js.map +1 -0
  138. package/dist/ui/views/DbHealthView.d.ts +6 -0
  139. package/dist/ui/views/DbHealthView.d.ts.map +1 -0
  140. package/dist/ui/views/DbHealthView.js +180 -0
  141. package/dist/ui/views/DbHealthView.js.map +1 -0
  142. package/dist/ui/views/K8sDeployView.d.ts +8 -0
  143. package/dist/ui/views/K8sDeployView.d.ts.map +1 -0
  144. package/dist/ui/views/K8sDeployView.js +81 -0
  145. package/dist/ui/views/K8sDeployView.js.map +1 -0
  146. package/dist/ui/views/K8sRunbookView.d.ts +8 -0
  147. package/dist/ui/views/K8sRunbookView.d.ts.map +1 -0
  148. package/dist/ui/views/K8sRunbookView.js +181 -0
  149. package/dist/ui/views/K8sRunbookView.js.map +1 -0
  150. package/dist/ui/views/K8sServicesView.d.ts +8 -0
  151. package/dist/ui/views/K8sServicesView.d.ts.map +1 -0
  152. package/dist/ui/views/K8sServicesView.js +106 -0
  153. package/dist/ui/views/K8sServicesView.js.map +1 -0
  154. package/dist/ui/views/K8sStatusView.d.ts +8 -0
  155. package/dist/ui/views/K8sStatusView.d.ts.map +1 -0
  156. package/dist/ui/views/K8sStatusView.js +135 -0
  157. package/dist/ui/views/K8sStatusView.js.map +1 -0
  158. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  159. package/dist/ui/views/MainMenu.js +54 -24
  160. package/dist/ui/views/MainMenu.js.map +1 -1
  161. package/dist/ui/views/SettingsView.d.ts.map +1 -1
  162. package/dist/ui/views/SettingsView.js +19 -1
  163. package/dist/ui/views/SettingsView.js.map +1 -1
  164. package/dist/ui/views/SetupWizardView.d.ts +7 -0
  165. package/dist/ui/views/SetupWizardView.d.ts.map +1 -0
  166. package/dist/ui/views/SetupWizardView.js +244 -0
  167. package/dist/ui/views/SetupWizardView.js.map +1 -0
  168. package/package.json +2 -1
@@ -0,0 +1,607 @@
1
+ /**
2
+ * Shell command handlers for docker, network, k8s, jtapi, and loadtest trees.
3
+ *
4
+ * docker status|prune|network
5
+ * network status|address|dns-servers|domain|dhcp
6
+ * k8s status|pods|logs|restart|scale|sync|diff|destroy|runbook
7
+ * jtapi enable|disable|status|troubleshoot
8
+ * loadtest run|probe|summary
9
+ */
10
+ import { exec } from '../../lib/exec.js';
11
+ import { compose } from '../../lib/compose.js';
12
+ import { getNetworkInterfaceList, getDefaultGateway, getEthernetInterfaces } from '../../lib/network.js';
13
+ import { isJtapiEnabled, enableJtapi, disableJtapi, getJtapiHealthCheck, getJtapiContainerStatus, getJtapiDependencyStatus, checkJtapiPrereqs, getNatsBucketStatus, } from '../../lib/jtapi.js';
14
+ import { buildCurriXml, randomPhoneNumber, randomDeviceName } from '../../lib/curri-xml.js';
15
+ import { banner, statusLine, kv, table } from '../formatter.js';
16
+ // ── docker ──
17
+ async function dockerStatus(_args, _opts, _ctx) {
18
+ console.log(banner('Docker Status'));
19
+ try {
20
+ const result = await exec('docker', ['info', '--format',
21
+ 'Server Version: {{.ServerVersion}}\nContainers: {{.Containers}} (Running: {{.ContainersRunning}}, Stopped: {{.ContainersStopped}})\nImages: {{.Images}}\nStorage Driver: {{.Driver}}']);
22
+ console.log(String(result.stdout ?? ''));
23
+ }
24
+ catch (err) {
25
+ console.log(statusLine('Docker daemon', 'fail', err.message ?? 'not running'));
26
+ return;
27
+ }
28
+ console.log(banner('Container Status'));
29
+ try {
30
+ await compose(['ps'], { pipe: false });
31
+ }
32
+ catch {
33
+ console.log(statusLine('Compose ps', 'fail', 'failed'));
34
+ }
35
+ }
36
+ async function dockerPrune(_args, _opts, _ctx) {
37
+ console.log(banner('Docker Prune'));
38
+ console.log('Removing unused containers, networks, images, and build cache...\n');
39
+ try {
40
+ await exec('docker', ['system', 'prune', '-f']);
41
+ console.log(statusLine('System prune', 'ok', 'completed'));
42
+ }
43
+ catch (err) {
44
+ console.log(statusLine('System prune', 'fail', err.message ?? 'failed'));
45
+ }
46
+ }
47
+ async function dockerNetwork(_args, _opts, _ctx) {
48
+ console.log(banner('Docker Networks'));
49
+ try {
50
+ const result = await exec('docker', ['network', 'ls', '--format', 'table {{.Name}}\t{{.Driver}}\t{{.Scope}}']);
51
+ console.log(String(result.stdout ?? ''));
52
+ }
53
+ catch (err) {
54
+ console.log(statusLine('Docker network', 'fail', err.message ?? 'failed'));
55
+ }
56
+ }
57
+ // ── network ──
58
+ /** Resolve the active NetworkManager connection name for a given interface. */
59
+ async function getActiveConn(iface) {
60
+ try {
61
+ const result = await exec('nmcli', ['-t', '-f', 'NAME,DEVICE', 'connection', 'show', '--active']);
62
+ const output = String(result.stdout ?? '');
63
+ const line = output.split('\n').find(l => l.endsWith(`:${iface}`));
64
+ if (line)
65
+ return line.split(':')[0];
66
+ }
67
+ catch { /* fall through */ }
68
+ return `System ${iface}`;
69
+ }
70
+ /** Auto-detect the primary ethernet interface if none specified. */
71
+ async function resolveIface(opts) {
72
+ if (opts['--interface']) {
73
+ const valid = getEthernetInterfaces();
74
+ if (!valid.includes(opts['--interface'])) {
75
+ console.log(`% '${opts['--interface']}' is not a physical ethernet interface.`);
76
+ console.log(`% Available: ${valid.join(', ') || '(none detected)'}`);
77
+ return null;
78
+ }
79
+ return opts['--interface'];
80
+ }
81
+ try {
82
+ const result = await exec('nmcli', ['-t', '-f', 'DEVICE,TYPE', 'device']);
83
+ const output = String(result.stdout ?? '');
84
+ const line = output.split('\n').find(l => l.includes(':ethernet'));
85
+ const iface = line?.split(':')[0];
86
+ if (iface)
87
+ return iface;
88
+ }
89
+ catch { /* fall through */ }
90
+ console.log('% No ethernet interface detected.');
91
+ return null;
92
+ }
93
+ async function networkStatus(_args, opts, _ctx) {
94
+ console.log(banner('Network Interfaces'));
95
+ const all = getNetworkInterfaceList();
96
+ const gw = await getDefaultGateway();
97
+ console.log(`Default Gateway: ${gw ?? 'unknown'}\n`);
98
+ const filter = opts['--interface'];
99
+ const external = all.filter(i => !i.internal && (!filter || i.name === filter));
100
+ const rows = external.map(i => [i.name, i.family, i.address, i.netmask, i.mac]);
101
+ console.log(table(['Interface', 'Family', 'Address', 'Netmask', 'MAC'], rows));
102
+ }
103
+ async function networkAddress(args, opts, _ctx) {
104
+ const [ipPrefix, gw] = args;
105
+ if (!ipPrefix || !gw) {
106
+ console.log('% Usage: network [<iface>] address <ip/prefix> <gateway>');
107
+ console.log('% Example: network eth0 address 192.168.1.100/24 192.168.1.1');
108
+ return;
109
+ }
110
+ const iface = await resolveIface(opts);
111
+ if (!iface)
112
+ return;
113
+ const conn = await getActiveConn(iface);
114
+ console.log(banner('Set Static IP Address'));
115
+ console.log(`Interface: ${iface} Connection: ${conn}`);
116
+ console.log(`Address: ${ipPrefix} Gateway: ${gw}\n`);
117
+ try {
118
+ await exec('sudo', ['nmcli', 'con', 'mod', conn, 'ipv4.method', 'manual',
119
+ 'ipv4.addresses', ipPrefix, 'ipv4.gateway', gw]);
120
+ await exec('sudo', ['nmcli', 'con', 'up', conn]);
121
+ console.log(statusLine('IP address configured', 'ok', ipPrefix));
122
+ }
123
+ catch (err) {
124
+ console.log(statusLine('IP configuration', 'fail', err.message ?? 'nmcli failed'));
125
+ }
126
+ }
127
+ async function networkDnsServers(args, _opts, _ctx) {
128
+ if (args.length === 0) {
129
+ console.log('% Usage: network dns-servers <dns1> [dns2 ...]');
130
+ console.log('% Example: network dns-servers 8.8.8.8 8.8.4.4');
131
+ return;
132
+ }
133
+ const iface = await resolveIface({});
134
+ if (!iface)
135
+ return;
136
+ const conn = await getActiveConn(iface);
137
+ const servers = args.join(',');
138
+ console.log(banner('Set DNS Servers'));
139
+ try {
140
+ await exec('sudo', ['nmcli', 'con', 'mod', conn, 'ipv4.dns', servers]);
141
+ await exec('sudo', ['nmcli', 'con', 'up', conn]);
142
+ console.log(statusLine('DNS servers configured', 'ok', args.join(', ')));
143
+ }
144
+ catch (err) {
145
+ console.log(statusLine('DNS configuration', 'fail', err.message ?? 'nmcli failed'));
146
+ }
147
+ }
148
+ async function networkDomain(args, _opts, _ctx) {
149
+ const [domain] = args;
150
+ if (!domain) {
151
+ console.log('% Usage: network domain <domain-name>');
152
+ console.log('% Example: network domain corp.local');
153
+ return;
154
+ }
155
+ const iface = await resolveIface({});
156
+ if (!iface)
157
+ return;
158
+ const conn = await getActiveConn(iface);
159
+ console.log(banner('Set DNS Search Domain'));
160
+ try {
161
+ await exec('sudo', ['nmcli', 'con', 'mod', conn, 'ipv4.dns-search', domain]);
162
+ await exec('sudo', ['nmcli', 'con', 'up', conn]);
163
+ console.log(statusLine('DNS domain configured', 'ok', domain));
164
+ }
165
+ catch (err) {
166
+ console.log(statusLine('Domain configuration', 'fail', err.message ?? 'nmcli failed'));
167
+ }
168
+ }
169
+ async function networkDhcp(_args, opts, _ctx) {
170
+ const iface = await resolveIface(opts);
171
+ if (!iface)
172
+ return;
173
+ const conn = await getActiveConn(iface);
174
+ console.log(banner('Switch to DHCP'));
175
+ console.log(`Interface: ${iface} Connection: ${conn}\n`);
176
+ try {
177
+ await exec('sudo', ['nmcli', 'con', 'mod', conn, 'ipv4.method', 'auto',
178
+ 'ipv4.addresses', '', 'ipv4.gateway', '', 'ipv4.dns', '', 'ipv4.dns-search', '']);
179
+ await exec('sudo', ['nmcli', 'con', 'up', conn]);
180
+ console.log(statusLine('DHCP enabled', 'ok', 'interface reconfigured'));
181
+ }
182
+ catch (err) {
183
+ console.log(statusLine('DHCP configuration', 'fail', err.message ?? 'nmcli failed'));
184
+ }
185
+ }
186
+ // ── k8s ──
187
+ function requireK8s(ctx) {
188
+ if (ctx.backend !== 'k8s') {
189
+ console.log('% Kubernetes commands require k8s backend.');
190
+ console.log('% Current backend: compose');
191
+ return false;
192
+ }
193
+ return true;
194
+ }
195
+ async function k8sStatus(_args, _opts, ctx) {
196
+ if (!requireK8s(ctx))
197
+ return;
198
+ console.log(banner('Kubernetes Cluster Status'));
199
+ try {
200
+ await exec('kubectl', ['cluster-info']);
201
+ console.log();
202
+ await exec('kubectl', ['get', 'nodes', '-o', 'wide']);
203
+ }
204
+ catch (err) {
205
+ console.log(statusLine('kubectl', 'fail', err.message ?? 'command failed'));
206
+ }
207
+ }
208
+ async function k8sPods(_args, _opts, ctx) {
209
+ if (!requireK8s(ctx))
210
+ return;
211
+ console.log(banner('Pods'));
212
+ try {
213
+ await exec('kubectl', ['get', 'pods', '-o', 'wide']);
214
+ }
215
+ catch (err) {
216
+ console.log(statusLine('kubectl', 'fail', err.message ?? 'command failed'));
217
+ }
218
+ }
219
+ async function k8sLogs(args, _opts, ctx) {
220
+ if (!requireK8s(ctx))
221
+ return;
222
+ const [pod] = args;
223
+ if (!pod) {
224
+ console.log('% Usage: k8s logs <pod-name>');
225
+ return;
226
+ }
227
+ try {
228
+ await exec('kubectl', ['logs', '--tail=100', pod]);
229
+ }
230
+ catch (err) {
231
+ console.log(statusLine('kubectl logs', 'fail', err.message ?? 'command failed'));
232
+ }
233
+ }
234
+ async function k8sRestart(args, _opts, ctx) {
235
+ if (!requireK8s(ctx))
236
+ return;
237
+ const [deployment] = args;
238
+ if (!deployment) {
239
+ console.log('% Usage: k8s restart <deployment-name>');
240
+ return;
241
+ }
242
+ try {
243
+ await exec('kubectl', ['rollout', 'restart', `deployment/${deployment}`]);
244
+ console.log(statusLine(`Restart ${deployment}`, 'ok', 'rollout initiated'));
245
+ }
246
+ catch (err) {
247
+ console.log(statusLine('kubectl restart', 'fail', err.message ?? 'command failed'));
248
+ }
249
+ }
250
+ async function k8sScale(args, _opts, ctx) {
251
+ if (!requireK8s(ctx))
252
+ return;
253
+ const [deployment, replicas] = args;
254
+ if (!deployment || !replicas) {
255
+ console.log('% Usage: k8s scale <deployment> <replicas>');
256
+ return;
257
+ }
258
+ try {
259
+ await exec('kubectl', ['scale', `deployment/${deployment}`, `--replicas=${replicas}`]);
260
+ console.log(statusLine(`Scale ${deployment}`, 'ok', `${replicas} replicas`));
261
+ }
262
+ catch (err) {
263
+ console.log(statusLine('kubectl scale', 'fail', err.message ?? 'command failed'));
264
+ }
265
+ }
266
+ async function k8sSync(_args, _opts, ctx) {
267
+ if (!requireK8s(ctx))
268
+ return;
269
+ console.log(banner('Helmfile Sync'));
270
+ try {
271
+ await exec('helmfile', ['sync']);
272
+ console.log(statusLine('Helmfile sync', 'ok', 'completed'));
273
+ }
274
+ catch (err) {
275
+ console.log(statusLine('Helmfile sync', 'fail', err.message ?? 'command failed'));
276
+ }
277
+ }
278
+ async function k8sDiff(_args, _opts, ctx) {
279
+ if (!requireK8s(ctx))
280
+ return;
281
+ console.log(banner('Helmfile Diff'));
282
+ try {
283
+ await exec('helmfile', ['diff']);
284
+ }
285
+ catch (err) {
286
+ console.log(statusLine('Helmfile diff', 'fail', err.message ?? 'command failed'));
287
+ }
288
+ }
289
+ async function k8sDestroy(_args, _opts, ctx) {
290
+ if (!requireK8s(ctx))
291
+ return;
292
+ console.log(banner('Helmfile Destroy'));
293
+ console.log(statusLine('Warning', 'warn', 'This will destroy all namespace resources'));
294
+ try {
295
+ await exec('helmfile', ['destroy']);
296
+ console.log(statusLine('Helmfile destroy', 'ok', 'completed'));
297
+ }
298
+ catch (err) {
299
+ console.log(statusLine('Helmfile destroy', 'fail', err.message ?? 'command failed'));
300
+ }
301
+ }
302
+ async function k8sRunbook(_args, _opts, ctx) {
303
+ if (!requireK8s(ctx))
304
+ return;
305
+ console.log(banner('Operational Runbook'));
306
+ console.log('Available runbooks:');
307
+ console.log(' 1. Health check — kubectl get pods + node status');
308
+ console.log(' 2. Restart all — rollout restart all deployments');
309
+ console.log(' 3. Log dump — collect logs from all pods');
310
+ console.log('\n% Runbook execution not yet implemented');
311
+ }
312
+ // ── jtapi ──
313
+ async function jtapiEnable(_args, _opts, _ctx) {
314
+ console.log(banner('Enable JTAPI'));
315
+ const prereqs = await checkJtapiPrereqs();
316
+ let allPassed = true;
317
+ for (const prereq of prereqs) {
318
+ console.log(statusLine(prereq.label, prereq.passed ? 'ok' : 'fail', prereq.detail));
319
+ if (!prereq.passed && prereq.label !== 'JTAPI status')
320
+ allPassed = false;
321
+ }
322
+ if (!allPassed) {
323
+ console.log('\n% Prerequisites not met. Fix issues above before enabling.');
324
+ return;
325
+ }
326
+ if (isJtapiEnabled()) {
327
+ console.log('\n% JTAPI is already enabled.');
328
+ return;
329
+ }
330
+ try {
331
+ await enableJtapi();
332
+ console.log(statusLine('JTAPI enabled', 'ok', 'restart services to activate'));
333
+ console.log('% Run: services restart');
334
+ }
335
+ catch (err) {
336
+ console.log(statusLine('Enable JTAPI', 'fail', err.message ?? 'failed'));
337
+ }
338
+ }
339
+ async function jtapiDisable(_args, _opts, _ctx) {
340
+ console.log(banner('Disable JTAPI'));
341
+ if (!isJtapiEnabled()) {
342
+ console.log('% JTAPI is already disabled.');
343
+ return;
344
+ }
345
+ try {
346
+ await disableJtapi();
347
+ console.log(statusLine('JTAPI disabled', 'ok', 'restart services to deactivate'));
348
+ console.log('% Run: services restart');
349
+ }
350
+ catch (err) {
351
+ console.log(statusLine('Disable JTAPI', 'fail', err.message ?? 'failed'));
352
+ }
353
+ }
354
+ async function jtapiStatus(_args, _opts, _ctx) {
355
+ console.log(banner('JTAPI Status'));
356
+ const enabled = isJtapiEnabled();
357
+ console.log(statusLine('Enabled', enabled ? 'ok' : 'info', enabled ? 'yes' : 'no'));
358
+ if (!enabled)
359
+ return;
360
+ const container = await getJtapiContainerStatus();
361
+ console.log(statusLine('Container', container.running ? 'ok' : 'fail', `${container.state} (health: ${container.health})`));
362
+ const health = await getJtapiHealthCheck();
363
+ console.log(statusLine('Health', health.reachable ? 'ok' : 'fail', health.status ?? health.detail ?? 'unknown'));
364
+ const deps = await getJtapiDependencyStatus();
365
+ for (const dep of deps) {
366
+ console.log(statusLine(`Dep: ${dep.name}`, dep.running ? 'ok' : 'fail', dep.health));
367
+ }
368
+ const buckets = await getNatsBucketStatus();
369
+ console.log(banner('NATS Buckets'));
370
+ console.log(statusLine('Org ID', 'info', buckets.orgId ?? 'unknown'));
371
+ console.log(statusLine('Policies', buckets.policies === 'ok' ? 'ok' : 'fail', buckets.policies));
372
+ console.log(statusLine('Audio', buckets.audio === 'ok' ? 'ok' : 'fail', buckets.audio));
373
+ console.log(statusLine('DN Exclusions', buckets.dnExclusions === 'ok' ? 'ok' : 'fail', buckets.dnExclusions));
374
+ console.log(statusLine('JARs', buckets.jars === 'ok' ? 'ok' : 'fail', buckets.jars));
375
+ }
376
+ async function jtapiTroubleshoot(_args, _opts, _ctx) {
377
+ console.log(banner('JTAPI Troubleshooting'));
378
+ // Step 1: Check if enabled
379
+ const enabled = isJtapiEnabled();
380
+ console.log(statusLine('Step 1: JTAPI enabled', enabled ? 'ok' : 'fail', enabled ? 'yes' : 'not enabled'));
381
+ if (!enabled) {
382
+ console.log('% Fix: Run "jtapi enable" to enable JTAPI integration');
383
+ return;
384
+ }
385
+ // Step 2: Container running
386
+ const container = await getJtapiContainerStatus();
387
+ console.log(statusLine('Step 2: Container running', container.running ? 'ok' : 'fail', container.state));
388
+ if (!container.running) {
389
+ console.log('% Fix: Run "services restart" to start the JTAPI sidecar');
390
+ return;
391
+ }
392
+ // Step 3: Health endpoint
393
+ const health = await getJtapiHealthCheck();
394
+ console.log(statusLine('Step 3: Health check', health.reachable ? 'ok' : 'fail', health.status ?? health.detail ?? 'unknown'));
395
+ // Step 4: Dependencies
396
+ const deps = await getJtapiDependencyStatus();
397
+ for (const dep of deps) {
398
+ console.log(statusLine(`Step 4: ${dep.name}`, dep.running ? 'ok' : 'fail', dep.health));
399
+ }
400
+ // Step 5: NATS buckets
401
+ const buckets = await getNatsBucketStatus();
402
+ const bucketsOk = buckets.policies === 'ok' && buckets.audio === 'ok';
403
+ console.log(statusLine('Step 5: NATS buckets', bucketsOk ? 'ok' : 'warn', `policies=${buckets.policies} audio=${buckets.audio}`));
404
+ if (health.reachable && health.status === 'UP' && bucketsOk) {
405
+ console.log('\n% All checks passed. JTAPI appears healthy.');
406
+ }
407
+ else {
408
+ console.log('\n% Some checks failed. Review the output above for remediation steps.');
409
+ }
410
+ }
411
+ // ── loadtest ──
412
+ async function loadtestRun(args, _opts, _ctx) {
413
+ const [countStr] = args;
414
+ const count = parseInt(countStr ?? '10', 10);
415
+ console.log(banner(`CURRI Load Test (${count} requests)`));
416
+ let success = 0;
417
+ let fail = 0;
418
+ const latencies = [];
419
+ for (let i = 0; i < count; i++) {
420
+ const xml = buildCurriXml({
421
+ callingNumber: randomPhoneNumber(),
422
+ calledNumber: randomPhoneNumber(),
423
+ deviceName: randomDeviceName(),
424
+ triggerType: 'OnOffHookTrigger',
425
+ });
426
+ const start = performance.now();
427
+ try {
428
+ await exec('curl', [
429
+ '-sf', '--max-time', '10',
430
+ '-X', 'POST',
431
+ '-H', 'Content-Type: application/xml',
432
+ '-d', xml,
433
+ 'http://127.0.0.1:4080/cisco_curri',
434
+ ]);
435
+ const elapsed = Math.round(performance.now() - start);
436
+ latencies.push(elapsed);
437
+ success++;
438
+ }
439
+ catch {
440
+ fail++;
441
+ }
442
+ // Print progress every 10 requests
443
+ if ((i + 1) % 10 === 0 || i === count - 1) {
444
+ process.stdout.write(`\r Progress: ${i + 1}/${count} (${success} ok, ${fail} fail)`);
445
+ }
446
+ }
447
+ console.log('\n');
448
+ const avgLatency = latencies.length > 0
449
+ ? Math.round(latencies.reduce((a, b) => a + b, 0) / latencies.length)
450
+ : 0;
451
+ const maxLatency = latencies.length > 0 ? Math.max(...latencies) : 0;
452
+ const minLatency = latencies.length > 0 ? Math.min(...latencies) : 0;
453
+ console.log(kv([
454
+ ['Total requests', String(count)],
455
+ ['Success', String(success)],
456
+ ['Failed', String(fail)],
457
+ ['Avg latency', `${avgLatency}ms`],
458
+ ['Min latency', `${minLatency}ms`],
459
+ ['Max latency', `${maxLatency}ms`],
460
+ ]));
461
+ }
462
+ async function loadtestProbe(_args, _opts, _ctx) {
463
+ console.log(banner('CURRI Quick Probe'));
464
+ const xml = buildCurriXml({
465
+ callingNumber: randomPhoneNumber(),
466
+ calledNumber: randomPhoneNumber(),
467
+ deviceName: randomDeviceName(),
468
+ triggerType: 'OnOffHookTrigger',
469
+ });
470
+ const start = performance.now();
471
+ try {
472
+ const result = await exec('curl', [
473
+ '-sf', '--max-time', '10',
474
+ '-X', 'POST',
475
+ '-H', 'Content-Type: application/xml',
476
+ '-d', xml,
477
+ 'http://127.0.0.1:4080/cisco_curri',
478
+ ]);
479
+ const elapsed = Math.round(performance.now() - start);
480
+ console.log(statusLine('CURRI probe', 'ok', `${elapsed}ms`));
481
+ const stdout = String(result.stdout ?? '').trim();
482
+ if (stdout)
483
+ console.log(stdout);
484
+ }
485
+ catch (err) {
486
+ console.log(statusLine('CURRI probe', 'fail', err.message ?? 'request failed'));
487
+ }
488
+ }
489
+ async function loadtestSummary(_args, _opts, _ctx) {
490
+ console.log(banner('Load Test Summary'));
491
+ console.log('% No previous load test results found.');
492
+ console.log('% Run "loadtest run [count]" to execute a load test.');
493
+ }
494
+ // ── Wire handlers ──
495
+ export function wireDockerHandlers(dockerNode) {
496
+ if (!dockerNode.children)
497
+ return;
498
+ for (const child of dockerNode.children) {
499
+ switch (child.name) {
500
+ case 'status':
501
+ child.handler = dockerStatus;
502
+ break;
503
+ case 'prune':
504
+ child.handler = dockerPrune;
505
+ break;
506
+ case 'network':
507
+ child.handler = dockerNetwork;
508
+ break;
509
+ }
510
+ }
511
+ }
512
+ export function wireNetworkHandlers(networkNode) {
513
+ if (!networkNode.children)
514
+ return;
515
+ for (const child of networkNode.children) {
516
+ switch (child.name) {
517
+ case 'status':
518
+ child.handler = networkStatus;
519
+ break;
520
+ case 'address':
521
+ child.handler = networkAddress;
522
+ break;
523
+ case 'dns-servers':
524
+ child.handler = networkDnsServers;
525
+ break;
526
+ case 'domain':
527
+ child.handler = networkDomain;
528
+ break;
529
+ case 'dhcp':
530
+ child.handler = networkDhcp;
531
+ break;
532
+ }
533
+ }
534
+ }
535
+ export function wireK8sHandlers(k8sNode) {
536
+ if (!k8sNode.children)
537
+ return;
538
+ for (const child of k8sNode.children) {
539
+ switch (child.name) {
540
+ case 'status':
541
+ child.handler = k8sStatus;
542
+ break;
543
+ case 'pods':
544
+ child.handler = k8sPods;
545
+ break;
546
+ case 'logs':
547
+ child.handler = k8sLogs;
548
+ break;
549
+ case 'restart':
550
+ child.handler = k8sRestart;
551
+ break;
552
+ case 'scale':
553
+ child.handler = k8sScale;
554
+ break;
555
+ case 'sync':
556
+ child.handler = k8sSync;
557
+ break;
558
+ case 'diff':
559
+ child.handler = k8sDiff;
560
+ break;
561
+ case 'destroy':
562
+ child.handler = k8sDestroy;
563
+ break;
564
+ case 'runbook':
565
+ child.handler = k8sRunbook;
566
+ break;
567
+ }
568
+ }
569
+ }
570
+ export function wireJtapiHandlers(jtapiNode) {
571
+ if (!jtapiNode.children)
572
+ return;
573
+ for (const child of jtapiNode.children) {
574
+ switch (child.name) {
575
+ case 'enable':
576
+ child.handler = jtapiEnable;
577
+ break;
578
+ case 'disable':
579
+ child.handler = jtapiDisable;
580
+ break;
581
+ case 'status':
582
+ child.handler = jtapiStatus;
583
+ break;
584
+ case 'troubleshoot':
585
+ child.handler = jtapiTroubleshoot;
586
+ break;
587
+ }
588
+ }
589
+ }
590
+ export function wireLoadtestHandlers(loadtestNode) {
591
+ if (!loadtestNode.children)
592
+ return;
593
+ for (const child of loadtestNode.children) {
594
+ switch (child.name) {
595
+ case 'run':
596
+ child.handler = loadtestRun;
597
+ break;
598
+ case 'probe':
599
+ child.handler = loadtestProbe;
600
+ break;
601
+ case 'summary':
602
+ child.handler = loadtestSummary;
603
+ break;
604
+ }
605
+ }
606
+ }
607
+ //# sourceMappingURL=diag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diag.js","sourceRoot":"","sources":["../../../src/shell/commands/diag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CommandNode } from '../parser.js';
2
+ /**
3
+ * Full command tree for the ct shell.
4
+ * Handlers are wired to implementations in show.ts, services.ts, db.ts, config.ts, and system.ts.
5
+ */
6
+ export declare const commandTree: CommandNode;
7
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA+ChD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAwWzB,CAAC"}