@calltelemetry/cli 0.7.6 → 0.7.8

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 (58) hide show
  1. package/dist/commands/migrate.d.ts.map +1 -1
  2. package/dist/commands/migrate.js +7 -0
  3. package/dist/commands/migrate.js.map +1 -1
  4. package/dist/commands/self-update.d.ts.map +1 -1
  5. package/dist/commands/self-update.js +1 -0
  6. package/dist/commands/self-update.js.map +1 -1
  7. package/dist/commands/syslog.d.ts +3 -0
  8. package/dist/commands/syslog.d.ts.map +1 -0
  9. package/dist/commands/syslog.js +159 -0
  10. package/dist/commands/syslog.js.map +1 -0
  11. package/dist/commands/update.d.ts.map +1 -1
  12. package/dist/commands/update.js +143 -3
  13. package/dist/commands/update.js.map +1 -1
  14. package/dist/index.js +11 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/bundle.d.ts +2 -1
  17. package/dist/lib/bundle.d.ts.map +1 -1
  18. package/dist/lib/bundle.js +41 -12
  19. package/dist/lib/bundle.js.map +1 -1
  20. package/dist/lib/compose.d.ts +10 -0
  21. package/dist/lib/compose.d.ts.map +1 -1
  22. package/dist/lib/compose.js +126 -1
  23. package/dist/lib/compose.js.map +1 -1
  24. package/dist/lib/db-backup.d.ts +23 -0
  25. package/dist/lib/db-backup.d.ts.map +1 -0
  26. package/dist/lib/db-backup.js +80 -0
  27. package/dist/lib/db-backup.js.map +1 -0
  28. package/dist/lib/migration-009-bind-mount-files.d.ts +5 -4
  29. package/dist/lib/migration-009-bind-mount-files.d.ts.map +1 -1
  30. package/dist/lib/migration-009-bind-mount-files.js +13 -5
  31. package/dist/lib/migration-009-bind-mount-files.js.map +1 -1
  32. package/dist/lib/release-migration-progress.d.ts +48 -0
  33. package/dist/lib/release-migration-progress.d.ts.map +1 -0
  34. package/dist/lib/release-migration-progress.js +223 -0
  35. package/dist/lib/release-migration-progress.js.map +1 -0
  36. package/dist/lib/syslog.d.ts +5 -0
  37. package/dist/lib/syslog.d.ts.map +1 -0
  38. package/dist/lib/syslog.js +21 -0
  39. package/dist/lib/syslog.js.map +1 -0
  40. package/dist/lib/update-steps.d.ts.map +1 -1
  41. package/dist/lib/update-steps.js +111 -0
  42. package/dist/lib/update-steps.js.map +1 -1
  43. package/dist/lib/version.d.ts +1 -1
  44. package/dist/lib/version.js +1 -1
  45. package/dist/ui/views/DbBackupView.d.ts.map +1 -1
  46. package/dist/ui/views/DbBackupView.js +11 -27
  47. package/dist/ui/views/DbBackupView.js.map +1 -1
  48. package/dist/ui/views/MigrateDrainView.d.ts +6 -0
  49. package/dist/ui/views/MigrateDrainView.d.ts.map +1 -0
  50. package/dist/ui/views/MigrateDrainView.js +77 -0
  51. package/dist/ui/views/MigrateDrainView.js.map +1 -0
  52. package/dist/ui/views/MigrateStatusView.d.ts.map +1 -1
  53. package/dist/ui/views/MigrateStatusView.js +16 -7
  54. package/dist/ui/views/MigrateStatusView.js.map +1 -1
  55. package/dist/ui/views/MigrateWatchView.d.ts.map +1 -1
  56. package/dist/ui/views/MigrateWatchView.js +17 -12
  57. package/dist/ui/views/MigrateWatchView.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback } from 'react';
3
+ import { useApp } from 'ink';
4
+ import { composeWithFiles, getAllComposeFiles } from '../../lib/compose.js';
5
+ import { getReleaseBin } from '../../lib/rpc.js';
6
+ import { AppShell, Section, ShellOutput, Spinner, StatusLine, Confirm } from '../components/index.js';
7
+ import { useAsyncTask, useConfirmBackNav } from '../hooks/index.js';
8
+ export function MigrateDrainView({ onBack }) {
9
+ const { exit } = useApp();
10
+ const [confirmed, setConfirmed] = useState(false);
11
+ const goBack = useCallback(() => {
12
+ if (onBack)
13
+ onBack();
14
+ else
15
+ exit();
16
+ }, [onBack, exit]);
17
+ const drainTask = useAsyncTask(async () => {
18
+ const releaseBin = getReleaseBin();
19
+ const composeFiles = getAllComposeFiles();
20
+ const logs = [
21
+ '=== Partition Data Migration ===',
22
+ 'Stopping web application for exclusive partition drain...',
23
+ ];
24
+ let primaryError;
25
+ let restartError;
26
+ try {
27
+ await composeWithFiles(composeFiles, ['stop', 'web'], { pipe: true });
28
+ logs.push('Starting one-shot drain container...');
29
+ const result = await composeWithFiles(composeFiles, [
30
+ 'run',
31
+ '--rm',
32
+ '-T',
33
+ '--no-deps',
34
+ '--entrypoint',
35
+ '',
36
+ 'web',
37
+ releaseBin,
38
+ 'eval',
39
+ 'Cdrcisco.Release.drain_legacy_partitions()',
40
+ ], { pipe: true });
41
+ logs.push(String(result.stdout ?? '').trim());
42
+ logs.push('Partition drain completed.');
43
+ }
44
+ catch (err) {
45
+ primaryError = err;
46
+ }
47
+ finally {
48
+ logs.push('Restarting web application...');
49
+ try {
50
+ await composeWithFiles(composeFiles, ['up', '-d', 'web'], { pipe: true });
51
+ logs.push('Web application restart initiated.');
52
+ }
53
+ catch (restartErr) {
54
+ const message = restartErr instanceof Error ? restartErr.message : String(restartErr);
55
+ logs.push(`Web application restart failed: ${message}`);
56
+ restartError = restartErr;
57
+ }
58
+ }
59
+ if (primaryError !== undefined)
60
+ throw primaryError;
61
+ if (restartError !== undefined)
62
+ throw restartError;
63
+ return logs.filter(Boolean).join('\n');
64
+ }, { autoRun: false, timeout: 0 });
65
+ const { run } = drainTask;
66
+ useEffect(() => {
67
+ if (confirmed)
68
+ run();
69
+ }, [confirmed, run]);
70
+ const allDone = drainTask.status === 'done' || drainTask.status === 'error';
71
+ useConfirmBackNav({ active: !confirmed, onBack: goBack });
72
+ return (_jsxs(AppShell, { command: "ct migrate drain", onBack: onBack, isComplete: confirmed && allDone, children: [!confirmed && (_jsx(Section, { title: "Partition Drain", children: _jsx(Confirm, { message: "Stop the app and run the idempotent partition drain?", onConfirm: (yes) => { if (yes)
73
+ setConfirmed(true);
74
+ else
75
+ goBack(); } }) })), confirmed && (_jsxs(Section, { title: "Partition Drain", children: [drainTask.status === 'pending' && _jsx(Spinner, { label: "Running partition drain..." }), drainTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: drainTask.error?.message ?? 'Partition drain failed' }), drainTask.status === 'done' && drainTask.data && _jsx(ShellOutput, { content: drainTask.data, scrollable: true }), drainTask.status === 'done' && _jsx(StatusLine, { status: "ok", label: "Partition drain completed" })] }))] }));
76
+ }
77
+ //# sourceMappingURL=MigrateDrainView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrateDrainView.js","sourceRoot":"","sources":["../../../src/ui/views/MigrateDrainView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMpE,MAAM,UAAU,gBAAgB,CAAC,EAAE,MAAM,EAAyB;IAChE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,IAAI,MAAM;YAAE,MAAM,EAAE,CAAC;;YAChB,IAAI,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnB,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAa;YACrB,kCAAkC;YAClC,2DAA2D;SAC5D,CAAC;QAEF,IAAI,YAAqB,CAAC;QAC1B,IAAI,YAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAElD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE;gBAClD,KAAK;gBACL,MAAM;gBACN,IAAI;gBACJ,WAAW;gBACX,cAAc;gBACd,EAAE;gBACF,KAAK;gBACL,UAAU;gBACV,MAAM;gBACN,4CAA4C;aAC7C,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,YAAY,GAAG,GAAG,CAAC;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,UAAmB,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACtF,IAAI,CAAC,IAAI,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;gBACxD,YAAY,GAAG,UAAU,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,IAAI,YAAY,KAAK,SAAS;YAAE,MAAM,YAAY,CAAC;QACnD,IAAI,YAAY,KAAK,SAAS;YAAE,MAAM,YAAY,CAAC;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS;YAAE,GAAG,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAErB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC;IAE5E,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE1D,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAC,kBAAkB,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,IAAI,OAAO,aAClF,CAAC,SAAS,IAAI,CACb,KAAC,OAAO,IAAC,KAAK,EAAC,iBAAiB,YAC9B,KAAC,OAAO,IAAC,OAAO,EAAC,sDAAsD,EAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,GAAG;wBAAE,YAAY,CAAC,IAAI,CAAC,CAAC;;wBAAM,MAAM,EAAE,CAAC,CAAC,CAAC,GAAI,GACvI,CACX,EACA,SAAS,IAAI,CACZ,MAAC,OAAO,IAAC,KAAK,EAAC,iBAAiB,aAC7B,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,4BAA4B,GAAG,EAChF,SAAS,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,wBAAwB,GAAI,EACzH,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,IAAI,KAAC,WAAW,IAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,SAAG,EACpG,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,2BAA2B,GAAG,IACpF,CACX,IACQ,CACZ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateStatusView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MigrateStatusView.tsx"],"names":[],"mappings":"AAOA,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,sBAAsB,2CAkCnE"}
1
+ {"version":3,"file":"MigrateStatusView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MigrateStatusView.tsx"],"names":[],"mappings":"AAMA,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,sBAAsB,2CA0CnE"}
@@ -1,8 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect } from 'react';
3
3
  import { composePs } from '../../lib/compose.js';
4
- import { rpc, rpcOk } from '../../lib/rpc.js';
5
- import { MIGRATION_STATUS_RPC } from '../../lib/rpc-scripts.js';
4
+ import { getMigrationProgress, tailMigrationArtifacts } from '../../lib/release-migration-progress.js';
6
5
  import { AppShell, Section, StatusLine, ShellOutput, Spinner } from '../components/index.js';
7
6
  import { useAsyncTask } from '../hooks/index.js';
8
7
  export function MigrateStatusView({ onBack }) {
@@ -10,13 +9,23 @@ export function MigrateStatusView({ onBack }) {
10
9
  const container = await composePs('web');
11
10
  if (!container)
12
11
  throw new Error('Web container not found');
13
- if (!await rpcOk())
14
- throw new Error('RPC not ready');
15
12
  return true;
16
13
  });
17
14
  const statusTask = useAsyncTask(async () => {
18
- const output = await rpc(MIGRATION_STATUS_RPC);
19
- return output.split('\n').filter(l => !l.startsWith('::')).join('\n');
15
+ try {
16
+ const progress = await getMigrationProgress();
17
+ const tails = await tailMigrationArtifacts(progress.snapshot);
18
+ const sections = [progress.output];
19
+ if (tails.events)
20
+ sections.push(`Recent JSON events:\n${tails.events}`);
21
+ if (tails.log)
22
+ sections.push(`Recent log lines:\n${tails.log}`);
23
+ return sections.join('\n\n');
24
+ }
25
+ catch (err) {
26
+ const message = err instanceof Error ? err.message : String(err);
27
+ throw new Error(`Failed to query migrations: ${message}`);
28
+ }
20
29
  }, false);
21
30
  // Run status after ready
22
31
  useEffect(() => {
@@ -26,6 +35,6 @@ export function MigrateStatusView({ onBack }) {
26
35
  // Exit when done
27
36
  const allDone = (readyTask.status === 'error') ||
28
37
  (statusTask.status === 'done' || statusTask.status === 'error');
29
- return (_jsx(AppShell, { command: "ct migrate status", onBack: onBack, isComplete: allDone, children: _jsxs(Section, { title: "Migration Status", children: [readyTask.status === 'pending' && _jsx(Spinner, { label: "Checking web container..." }), readyTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: readyTask.error?.message ?? 'Web container not ready' }), statusTask.status === 'pending' && _jsx(Spinner, { label: "Querying migration status..." }), statusTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: "Failed to query migrations" }), statusTask.status === 'done' && statusTask.data && _jsx(ShellOutput, { content: statusTask.data, scrollable: true })] }) }));
38
+ return (_jsx(AppShell, { command: "ct migrate status", onBack: onBack, isComplete: allDone, children: _jsxs(Section, { title: "Migration Status", children: [readyTask.status === 'pending' && _jsx(Spinner, { label: "Checking web container..." }), readyTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: readyTask.error?.message ?? 'Web container not ready' }), statusTask.status === 'pending' && _jsx(Spinner, { label: "Querying migration status..." }), statusTask.status === 'error' && _jsx(StatusLine, { status: "fail", label: statusTask.error?.message ?? 'Failed to query migrations' }), statusTask.status === 'done' && statusTask.data && _jsx(ShellOutput, { content: statusTask.data, scrollable: true })] }) }));
30
39
  }
31
40
  //# sourceMappingURL=MigrateStatusView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateStatusView.js","sourceRoot":"","sources":["../../../src/ui/views/MigrateStatusView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAA0B;IAElE,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,yBAAyB;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;YAAE,UAAU,CAAC,GAAG,EAAE,CAAC;IACpD,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvB,iBAAiB;IACjB,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC;QAC9B,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAEhF,OAAO,CACL,KAAC,QAAQ,IAAC,OAAO,EAAC,mBAAmB,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,YACvE,MAAC,OAAO,IAAC,KAAK,EAAC,kBAAkB,aAC9B,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,2BAA2B,GAAG,EAC/E,SAAS,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,yBAAyB,GAAI,EAC1H,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,8BAA8B,GAAG,EACnF,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,GAAG,EAChG,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,KAAC,WAAW,IAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,SAAG,IAChG,GACD,CACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"MigrateStatusView.js","sourceRoot":"","sources":["../../../src/ui/views/MigrateStatusView.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateWatchView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MigrateWatchView.tsx"],"names":[],"mappings":"AAOA,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CA0C3E"}
1
+ {"version":3,"file":"MigrateWatchView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/MigrateWatchView.tsx"],"names":[],"mappings":"AAMA,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CA8C3E"}
@@ -1,29 +1,34 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef } from 'react';
3
3
  import { Box, Text } from 'ink';
4
- import { rpc } from '../../lib/rpc.js';
5
- import { MIGRATION_STATUS_RPC } from '../../lib/rpc-scripts.js';
4
+ import { getMigrationProgress, tailMigrationArtifacts } from '../../lib/release-migration-progress.js';
6
5
  import { AppShell, Section, ShellOutput, Spinner, StatusLine } from '../components/index.js';
7
6
  import { usePolling } from '../hooks/index.js';
8
7
  export function MigrateWatchView({ interval, onBack }) {
9
8
  const stoppedRef = useRef(false);
10
9
  const { data, error, stop } = usePolling(async () => {
11
- const output = await rpc(MIGRATION_STATUS_RPC);
12
- return output;
10
+ const progress = await getMigrationProgress();
11
+ const tails = await tailMigrationArtifacts(progress.snapshot);
12
+ const sections = [progress.output];
13
+ if (tails.events)
14
+ sections.push(`Recent JSON events:\n${tails.events}`);
15
+ if (tails.log)
16
+ sections.push(`Recent log lines:\n${tails.log}`);
17
+ return {
18
+ output: sections.join('\n\n'),
19
+ pendingCount: progress.snapshot.pendingCount,
20
+ };
13
21
  }, interval);
14
- // Filter display lines and extract pending count
15
- const lines = data?.split('\n') ?? [];
16
- const pendingLine = lines.find(l => l.startsWith('::pending_count='));
17
- const pendingCount = pendingLine?.split('=')[1];
18
- const displayContent = lines.filter(l => !l.startsWith('::')).join('\n');
19
- const watchDone = pendingCount === '0' && stoppedRef.current;
22
+ const pendingCount = data?.pendingCount;
23
+ const displayContent = data?.output ?? '';
24
+ const watchDone = pendingCount === 0 && stoppedRef.current;
20
25
  // Auto-stop when no pending migrations remain
21
26
  useEffect(() => {
22
- if (pendingCount === '0' && !stoppedRef.current) {
27
+ if (pendingCount === 0 && !stoppedRef.current) {
23
28
  stoppedRef.current = true;
24
29
  stop();
25
30
  }
26
31
  }, [pendingCount, stop]);
27
- return (_jsx(AppShell, { command: "ct migrate watch", onBack: onBack, isComplete: watchDone, children: _jsxs(Section, { title: `Watch Migrations (interval: ${interval / 1000}s)`, children: [!data && !error && _jsx(Spinner, { label: "Polling migration status..." }), error && (_jsxs(Box, { flexDirection: "column", children: [_jsx(StatusLine, { status: "warn", label: `Error: ${error.message}` }), _jsx(Text, { color: "yellow", children: ' RPC not responding. Wait 30-60s and retry, or run: ct diag service' })] })), data && displayContent && _jsx(ShellOutput, { content: displayContent, scrollable: true }), pendingCount === '0' && _jsx(StatusLine, { status: "ok", label: "All migrations are up to date. Exiting watch mode." }), data && pendingCount !== '0' && pendingCount !== 'error' && (_jsx(Text, { dimColor: true, children: ` Next refresh in ${interval / 1000}s... Press Ctrl+C to stop.` }))] }) }));
32
+ return (_jsx(AppShell, { command: "ct migrate watch", onBack: onBack, isComplete: watchDone, children: _jsxs(Section, { title: `Watch Migrations (interval: ${interval / 1000}s)`, children: [!data && !error && _jsx(Spinner, { label: "Polling migration status..." }), error && (_jsxs(Box, { flexDirection: "column", children: [_jsx(StatusLine, { status: "warn", label: `Error: ${error.message}` }), _jsx(Text, { color: "yellow", children: ' Migration progress is not responding. Wait 30-60s and retry, or run: ct diag service' })] })), data && displayContent && _jsx(ShellOutput, { content: displayContent, scrollable: true }), !error && pendingCount === 0 && _jsx(StatusLine, { status: "ok", label: "All migrations are up to date. Exiting watch mode." }), !error && data && pendingCount !== 0 && (_jsx(Text, { dimColor: true, children: ` Next refresh in ${interval / 1000}s... Press Ctrl+C to stop.` }))] }) }));
28
33
  }
29
34
  //# sourceMappingURL=MigrateWatchView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateWatchView.js","sourceRoot":"","sources":["../../../src/ui/views/MigrateWatchView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAO/C,MAAM,UAAU,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAyB;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEb,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAG,YAAY,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;IAE7D,8CAA8C;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAChD,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,KAAC,QAAQ,IAAC,OAAO,EAAC,kBAAkB,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,YACxE,MAAC,OAAO,IAAC,KAAK,EAAE,+BAA+B,QAAQ,GAAG,IAAI,IAAI,aAC/D,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,6BAA6B,GAAG,EAClE,KAAK,IAAI,CACR,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,UAAU,IAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,GAAI,EAC9D,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,sEAAsE,GAAQ,IAChG,CACP,EACA,IAAI,IAAI,cAAc,IAAI,KAAC,WAAW,IAAC,OAAO,EAAE,cAAc,EAAE,UAAU,SAAG,EAC7E,YAAY,KAAK,GAAG,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,oDAAoD,GAAG,EAC7G,IAAI,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,OAAO,IAAI,CAC3D,KAAC,IAAI,IAAC,QAAQ,kBAAE,qBAAqB,QAAQ,GAAG,IAAI,4BAA4B,GAAQ,CACzF,IACO,GACD,CACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"MigrateWatchView.js","sourceRoot":"","sources":["../../../src/ui/views/MigrateWatchView.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calltelemetry/cli",
3
- "version": "0.7.6",
3
+ "version": "0.7.8",
4
4
  "description": "CallTelemetry appliance management CLI",
5
5
  "type": "module",
6
6
  "bin": {