@calltelemetry/cli 0.6.12 → 0.6.13
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/appliance.d.ts +3 -0
- package/dist/commands/appliance.d.ts.map +1 -0
- package/dist/commands/appliance.js +99 -0
- package/dist/commands/appliance.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +19 -17
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/migration-001-cgnat.d.ts +2 -0
- package/dist/lib/migration-001-cgnat.d.ts.map +1 -0
- package/dist/lib/migration-001-cgnat.js +59 -0
- package/dist/lib/migration-001-cgnat.js.map +1 -0
- package/dist/lib/migration-002-swap.d.ts +12 -0
- package/dist/lib/migration-002-swap.d.ts.map +1 -0
- package/dist/lib/migration-002-swap.js +103 -0
- package/dist/lib/migration-002-swap.js.map +1 -0
- package/dist/lib/migration-003-nm-heal.d.ts +12 -0
- package/dist/lib/migration-003-nm-heal.d.ts.map +1 -0
- package/dist/lib/migration-003-nm-heal.js +75 -0
- package/dist/lib/migration-003-nm-heal.js.map +1 -0
- package/dist/lib/migration-004-systemd-docker.d.ts +13 -0
- package/dist/lib/migration-004-systemd-docker.d.ts.map +1 -0
- package/dist/lib/migration-004-systemd-docker.js +48 -0
- package/dist/lib/migration-004-systemd-docker.js.map +1 -0
- package/dist/lib/migration-005-ssh-keys.d.ts +13 -0
- package/dist/lib/migration-005-ssh-keys.d.ts.map +1 -0
- package/dist/lib/migration-005-ssh-keys.js +49 -0
- package/dist/lib/migration-005-ssh-keys.js.map +1 -0
- package/dist/lib/migration-006-console-loglevel.d.ts +10 -0
- package/dist/lib/migration-006-console-loglevel.d.ts.map +1 -0
- package/dist/lib/migration-006-console-loglevel.js +27 -0
- package/dist/lib/migration-006-console-loglevel.js.map +1 -0
- package/dist/lib/migration-007-nm-keyfile.d.ts +10 -0
- package/dist/lib/migration-007-nm-keyfile.d.ts.map +1 -0
- package/dist/lib/migration-007-nm-keyfile.js +30 -0
- package/dist/lib/migration-007-nm-keyfile.js.map +1 -0
- package/dist/lib/migration-008-systemd-restart.d.ts +13 -0
- package/dist/lib/migration-008-systemd-restart.d.ts.map +1 -0
- package/dist/lib/migration-008-systemd-restart.js +41 -0
- package/dist/lib/migration-008-systemd-restart.js.map +1 -0
- package/dist/lib/migration-009-bind-mount-files.d.ts +11 -0
- package/dist/lib/migration-009-bind-mount-files.d.ts.map +1 -0
- package/dist/lib/migration-009-bind-mount-files.js +86 -0
- package/dist/lib/migration-009-bind-mount-files.js.map +1 -0
- package/dist/lib/migration-010-jtapi-state.d.ts +11 -0
- package/dist/lib/migration-010-jtapi-state.d.ts.map +1 -0
- package/dist/lib/migration-010-jtapi-state.js +61 -0
- package/dist/lib/migration-010-jtapi-state.js.map +1 -0
- package/dist/lib/migration-011-docker-memory-limit.d.ts +13 -0
- package/dist/lib/migration-011-docker-memory-limit.d.ts.map +1 -0
- package/dist/lib/migration-011-docker-memory-limit.js +45 -0
- package/dist/lib/migration-011-docker-memory-limit.js.map +1 -0
- package/dist/lib/migration-012-db-pool-sizes.d.ts +12 -0
- package/dist/lib/migration-012-db-pool-sizes.d.ts.map +1 -0
- package/dist/lib/migration-012-db-pool-sizes.js +64 -0
- package/dist/lib/migration-012-db-pool-sizes.js.map +1 -0
- package/dist/lib/migrations.d.ts +34 -0
- package/dist/lib/migrations.d.ts.map +1 -0
- package/dist/lib/migrations.js +179 -0
- package/dist/lib/migrations.js.map +1 -0
- package/dist/lib/update-steps.d.ts.map +1 -1
- package/dist/lib/update-steps.js +12 -0
- package/dist/lib/update-steps.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/shell/commands/appliance-performance.d.ts +36 -0
- package/dist/shell/commands/appliance-performance.d.ts.map +1 -0
- package/dist/shell/commands/appliance-performance.js +221 -0
- package/dist/shell/commands/appliance-performance.js.map +1 -0
- package/dist/shell/commands/registry.d.ts.map +1 -1
- package/dist/shell/commands/registry.js +19 -0
- package/dist/shell/commands/registry.js.map +1 -1
- package/dist/shell/commands/users.d.ts.map +1 -1
- package/dist/shell/commands/users.js +42 -1
- package/dist/shell/commands/users.js.map +1 -1
- package/dist/shell/network-onboarding.d.ts +29 -7
- package/dist/shell/network-onboarding.d.ts.map +1 -1
- package/dist/shell/network-onboarding.js +332 -81
- package/dist/shell/network-onboarding.js.map +1 -1
- package/dist/ui/views/JtapiDisableView.d.ts +6 -0
- package/dist/ui/views/JtapiDisableView.d.ts.map +1 -0
- package/dist/ui/views/JtapiDisableView.js +52 -0
- package/dist/ui/views/JtapiDisableView.js.map +1 -0
- package/dist/ui/views/JtapiEnableView.d.ts +6 -0
- package/dist/ui/views/JtapiEnableView.d.ts.map +1 -0
- package/dist/ui/views/JtapiEnableView.js +40 -0
- package/dist/ui/views/JtapiEnableView.js.map +1 -0
- package/dist/ui/views/JtapiStatusView.d.ts +6 -0
- package/dist/ui/views/JtapiStatusView.d.ts.map +1 -0
- package/dist/ui/views/JtapiStatusView.js +11 -0
- package/dist/ui/views/JtapiStatusView.js.map +1 -0
- package/dist/ui/views/JtapiTroubleshootView.d.ts +6 -0
- package/dist/ui/views/JtapiTroubleshootView.d.ts.map +1 -0
- package/dist/ui/views/JtapiTroubleshootView.js +114 -0
- package/dist/ui/views/JtapiTroubleshootView.js.map +1 -0
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +11 -0
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Appliance migration framework.
|
|
3
|
+
*
|
|
4
|
+
* Tracks which system-level migrations have been applied on this appliance
|
|
5
|
+
* and runs any pending ones. State is persisted in ~/.ct/migrations.json.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
10
|
+
const CT_DIR = join(homedir(), '.ct');
|
|
11
|
+
const MIGRATIONS_FILE = join(CT_DIR, 'migrations.json');
|
|
12
|
+
// Import migrations
|
|
13
|
+
import { migrateCgnatSubnets } from './migration-001-cgnat.js';
|
|
14
|
+
import { migrateSwapFile } from './migration-002-swap.js';
|
|
15
|
+
import { migrateNmHeal } from './migration-003-nm-heal.js';
|
|
16
|
+
import { migrateSystemdDocker } from './migration-004-systemd-docker.js';
|
|
17
|
+
import { migrateSshKeys } from './migration-005-ssh-keys.js';
|
|
18
|
+
import { migrateConsoleLoglevel } from './migration-006-console-loglevel.js';
|
|
19
|
+
import { migrateNmKeyfile } from './migration-007-nm-keyfile.js';
|
|
20
|
+
import { migrateSystemdRestart } from './migration-008-systemd-restart.js';
|
|
21
|
+
import { migrateBindMountFiles } from './migration-009-bind-mount-files.js';
|
|
22
|
+
import { migrateDockerMemoryLimit } from './migration-011-docker-memory-limit.js';
|
|
23
|
+
import { migrateJtapiState } from './migration-010-jtapi-state.js';
|
|
24
|
+
import { migrateDbPoolSizes } from './migration-012-db-pool-sizes.js';
|
|
25
|
+
export const MIGRATIONS = [
|
|
26
|
+
{
|
|
27
|
+
id: '001_cgnat_docker_subnets',
|
|
28
|
+
description: 'Move Docker subnets to CGNAT space (100.64.x)',
|
|
29
|
+
run: migrateCgnatSubnets,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: '002_swap_file',
|
|
33
|
+
description: 'Configure swap file (50% of RAM)',
|
|
34
|
+
run: migrateSwapFile,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: '003_nm_connection_heal',
|
|
38
|
+
description: 'Fix NetworkManager connection profiles (autoconnect, Docker bridges)',
|
|
39
|
+
run: migrateNmHeal,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: '004_systemd_docker_boot',
|
|
43
|
+
description: 'Docker boot ordering (After=firewalld)',
|
|
44
|
+
run: migrateSystemdDocker,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: '005_ssh_host_keys',
|
|
48
|
+
description: 'Regenerate SSH host keys (OVA clone safety)',
|
|
49
|
+
run: migrateSshKeys,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: '006_console_loglevel',
|
|
53
|
+
description: 'Suppress nft_compat/ip_set kernel console warnings',
|
|
54
|
+
run: migrateConsoleLoglevel,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: '007_nm_keyfile_migration',
|
|
58
|
+
description: 'Migrate legacy ifcfg network configs to NM keyfile format',
|
|
59
|
+
run: migrateNmKeyfile,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: '008_systemd_restart_policy',
|
|
63
|
+
description: 'Add restart-on-failure and network-online.target to systemd service',
|
|
64
|
+
run: migrateSystemdRestart,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: '009_bind_mount_files',
|
|
68
|
+
description: 'Fix alertmanager.yml and tempo.yaml created as directories by Docker',
|
|
69
|
+
run: migrateBindMountFiles,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: '010_jtapi_state_to_env',
|
|
73
|
+
description: 'Migrate .jtapi-enabled sentinel to .env COMPOSE_PROFILES=jtapi',
|
|
74
|
+
run: migrateJtapiState,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: '011_docker_memory_limit',
|
|
78
|
+
description: 'Cap Docker daemon at 90% RAM (reserve 10% for OS)',
|
|
79
|
+
run: migrateDockerMemoryLimit,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: '012_db_pool_sizes',
|
|
83
|
+
description: 'Set small DB pool profile (44 connections instead of 95)',
|
|
84
|
+
run: migrateDbPoolSizes,
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
export function loadMigrationState() {
|
|
88
|
+
try {
|
|
89
|
+
if (!existsSync(MIGRATIONS_FILE)) {
|
|
90
|
+
return { completed: {}, errors: {} };
|
|
91
|
+
}
|
|
92
|
+
const raw = readFileSync(MIGRATIONS_FILE, 'utf-8');
|
|
93
|
+
const parsed = JSON.parse(raw);
|
|
94
|
+
return {
|
|
95
|
+
completed: parsed.completed ?? {},
|
|
96
|
+
errors: parsed.errors ?? {},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return { completed: {}, errors: {} };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export function saveMigrationState(state) {
|
|
104
|
+
mkdirSync(CT_DIR, { recursive: true });
|
|
105
|
+
writeFileSync(MIGRATIONS_FILE, JSON.stringify(state, null, 2) + '\n', 'utf-8');
|
|
106
|
+
}
|
|
107
|
+
export function isMigrationCompleted(id) {
|
|
108
|
+
const state = loadMigrationState();
|
|
109
|
+
return id in state.completed;
|
|
110
|
+
}
|
|
111
|
+
export async function runPendingMigrations(log) {
|
|
112
|
+
const state = loadMigrationState();
|
|
113
|
+
const ran = [];
|
|
114
|
+
const skipped = [];
|
|
115
|
+
for (const migration of MIGRATIONS) {
|
|
116
|
+
if (migration.id in state.completed) {
|
|
117
|
+
skipped.push(migration.id);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
log?.(`Running migration: ${migration.description}`);
|
|
121
|
+
try {
|
|
122
|
+
const changed = await migration.run();
|
|
123
|
+
state.completed[migration.id] = {
|
|
124
|
+
at: new Date().toISOString(),
|
|
125
|
+
result: changed ? 'applied' : 'skipped',
|
|
126
|
+
};
|
|
127
|
+
// Clear any previous error for this migration
|
|
128
|
+
delete state.errors[migration.id];
|
|
129
|
+
if (changed) {
|
|
130
|
+
ran.push(migration.id);
|
|
131
|
+
log?.(` Applied: ${migration.id}`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
skipped.push(migration.id);
|
|
135
|
+
log?.(` Skipped (already correct): ${migration.id}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
140
|
+
state.errors[migration.id] = {
|
|
141
|
+
at: new Date().toISOString(),
|
|
142
|
+
error: message,
|
|
143
|
+
};
|
|
144
|
+
log?.(` Error: ${migration.id} — ${message}`);
|
|
145
|
+
}
|
|
146
|
+
saveMigrationState(state);
|
|
147
|
+
}
|
|
148
|
+
return { ran, skipped };
|
|
149
|
+
}
|
|
150
|
+
export function getMigrationStatus() {
|
|
151
|
+
const state = loadMigrationState();
|
|
152
|
+
return MIGRATIONS.map((m) => {
|
|
153
|
+
const completed = state.completed[m.id];
|
|
154
|
+
const errRecord = state.errors[m.id];
|
|
155
|
+
if (completed) {
|
|
156
|
+
return {
|
|
157
|
+
id: m.id,
|
|
158
|
+
description: m.description,
|
|
159
|
+
status: completed.result,
|
|
160
|
+
at: completed.at,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (errRecord) {
|
|
164
|
+
return {
|
|
165
|
+
id: m.id,
|
|
166
|
+
description: m.description,
|
|
167
|
+
status: 'error',
|
|
168
|
+
at: errRecord.at,
|
|
169
|
+
error: errRecord.error,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
id: m.id,
|
|
174
|
+
description: m.description,
|
|
175
|
+
status: 'pending',
|
|
176
|
+
};
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-steps.d.ts","sourceRoot":"","sources":["../../src/lib/update-steps.ts"],"names":[],"mappings":"AAaA,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpD;AAID,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CAyClE;AAID,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"update-steps.d.ts","sourceRoot":"","sources":["../../src/lib/update-steps.ts"],"names":[],"mappings":"AAaA,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpD;AAID,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CAyClE;AAID,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,EAAE,CAgJhE;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAepE"}
|
package/dist/lib/update-steps.js
CHANGED
|
@@ -164,6 +164,18 @@ export function executeSteps(targetVersion) {
|
|
|
164
164
|
return 'already correct';
|
|
165
165
|
},
|
|
166
166
|
},
|
|
167
|
+
{
|
|
168
|
+
label: 'Run appliance migrations',
|
|
169
|
+
run: async (ctx) => {
|
|
170
|
+
const { runPendingMigrations } = await import('./migrations.js');
|
|
171
|
+
const result = await runPendingMigrations((msg) => ctx?.log(msg));
|
|
172
|
+
for (const id of result.ran)
|
|
173
|
+
ctx?.log(` Applied: ${id}`);
|
|
174
|
+
if (result.ran.length === 0)
|
|
175
|
+
return 'all up to date';
|
|
176
|
+
return `${result.ran.length} migration(s) applied`;
|
|
177
|
+
},
|
|
178
|
+
},
|
|
167
179
|
{
|
|
168
180
|
label: 'Apply IPv6 configuration',
|
|
169
181
|
run: async (ctx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-steps.js","sourceRoot":"","sources":["../../src/lib/update-steps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update-steps.js","sourceRoot":"","sources":["../../src/lib/update-steps.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/version.d.ts
CHANGED
package/dist/lib/version.js
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ShellContext } from '../context.js';
|
|
2
|
+
import type { CommandNode } from '../parser.js';
|
|
3
|
+
export type ProfileName = 'small' | 'medium' | 'large';
|
|
4
|
+
export interface ProfileDefinition {
|
|
5
|
+
minRamMb: number;
|
|
6
|
+
minCpus: number;
|
|
7
|
+
description: string;
|
|
8
|
+
capacity: string;
|
|
9
|
+
hardware: string;
|
|
10
|
+
env: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export declare const PROFILES: Record<ProfileName, ProfileDefinition>;
|
|
13
|
+
/** All env keys managed by performance profiles. */
|
|
14
|
+
export declare const PROFILE_ENV_KEYS: string[];
|
|
15
|
+
/** Read total system RAM in MB from /proc/meminfo. Returns 0 on failure. */
|
|
16
|
+
export declare function getSystemRamMb(): number;
|
|
17
|
+
/** Count CPU cores from /proc/cpuinfo. Returns 0 on failure. */
|
|
18
|
+
export declare function getSystemCpuCount(): number;
|
|
19
|
+
/**
|
|
20
|
+
* Recommend a profile based on available RAM.
|
|
21
|
+
* Uses 10% tolerance — 7200 MB counts as 8 GB (covers VM overhead).
|
|
22
|
+
*/
|
|
23
|
+
export declare function recommendedProfile(ramMb: number): ProfileName;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a profile's RAM requirement is met with 10% tolerance.
|
|
26
|
+
* Returns true if the system has enough RAM.
|
|
27
|
+
*/
|
|
28
|
+
export declare function meetsRamRequirement(ramMb: number, profile: ProfileName): boolean;
|
|
29
|
+
/** Detect current profile by matching .env values against profile definitions. */
|
|
30
|
+
export declare function detectCurrentProfile(): ProfileName | null;
|
|
31
|
+
/** Apply a profile by writing all env vars atomically. */
|
|
32
|
+
export declare function applyProfile(name: ProfileName): Promise<void>;
|
|
33
|
+
export declare function handleAppliancePerformance(args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
|
|
34
|
+
export declare function showAppliancePerformance(_args: string[], _opts: Record<string, string>, _ctx: ShellContext): Promise<void>;
|
|
35
|
+
export declare function wireApplianceHandlers(applianceNode: CommandNode): void;
|
|
36
|
+
//# sourceMappingURL=appliance-performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appliance-performance.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/appliance-performance.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAgE3D,CAAC;AAIF,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,UAAkC,CAAC;AAIhE,4EAA4E;AAC5E,wBAAgB,cAAc,IAAI,MAAM,CASvC;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAM7D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAGhF;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,IAAI,CAUzD;AAED,0DAA0D;AAC1D,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAID,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAuCf;AAID,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI,CAQtE"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell command handlers for the `appliance performance` command group.
|
|
3
|
+
*
|
|
4
|
+
* Manages t-shirt-sized performance profiles (small/medium/large) that
|
|
5
|
+
* atomically set PostgreSQL tuning, Ecto pool sizes, and Docker memory limits.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
import { readEnvKeys, updateEnvKeys } from '../../lib/env.js';
|
|
9
|
+
import { banner, statusLine, kv } from '../formatter.js';
|
|
10
|
+
export const PROFILES = {
|
|
11
|
+
small: {
|
|
12
|
+
minRamMb: 8 * 1024, // 8 GB
|
|
13
|
+
minCpus: 2,
|
|
14
|
+
description: 'Small',
|
|
15
|
+
capacity: 'Up to 5,000 phones, 100 calls/sec',
|
|
16
|
+
hardware: '8 GB RAM, 2 vCPUs, 40 GB disk',
|
|
17
|
+
env: {
|
|
18
|
+
PG_SHARED_BUFFERS: '512MB',
|
|
19
|
+
PG_EFFECTIVE_CACHE_SIZE: '1536MB',
|
|
20
|
+
PG_WORK_MEM: '8MB',
|
|
21
|
+
PG_MAINTENANCE_WORK_MEM: '128MB',
|
|
22
|
+
PG_SHM_SIZE: '1gb',
|
|
23
|
+
PG_MAX_CONNECTIONS: '100',
|
|
24
|
+
DB_POOL_SIZE: '30',
|
|
25
|
+
DB_BACKGROUND_POOL_SIZE: '10',
|
|
26
|
+
DB_DISCOVERY_POOL_SIZE: '10',
|
|
27
|
+
DB_OBAN_POOL_SIZE: '10',
|
|
28
|
+
DB_MEM_LIMIT: '3g',
|
|
29
|
+
WEB_MEM_LIMIT: '4g',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
medium: {
|
|
33
|
+
minRamMb: 16 * 1024, // 16 GB
|
|
34
|
+
minCpus: 4,
|
|
35
|
+
description: 'Medium',
|
|
36
|
+
capacity: 'Up to 25,000 phones, 300 calls/sec',
|
|
37
|
+
hardware: '16 GB RAM, 4 vCPUs, 100 GB disk',
|
|
38
|
+
env: {
|
|
39
|
+
PG_SHARED_BUFFERS: '2GB',
|
|
40
|
+
PG_EFFECTIVE_CACHE_SIZE: '6GB',
|
|
41
|
+
PG_WORK_MEM: '16MB',
|
|
42
|
+
PG_MAINTENANCE_WORK_MEM: '256MB',
|
|
43
|
+
PG_SHM_SIZE: '3gb',
|
|
44
|
+
PG_MAX_CONNECTIONS: '200',
|
|
45
|
+
DB_POOL_SIZE: '45',
|
|
46
|
+
DB_BACKGROUND_POOL_SIZE: '18',
|
|
47
|
+
DB_DISCOVERY_POOL_SIZE: '18',
|
|
48
|
+
DB_OBAN_POOL_SIZE: '14',
|
|
49
|
+
DB_MEM_LIMIT: '6g',
|
|
50
|
+
WEB_MEM_LIMIT: '4g',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
large: {
|
|
54
|
+
minRamMb: 32 * 1024, // 32 GB
|
|
55
|
+
minCpus: 8,
|
|
56
|
+
description: 'Large',
|
|
57
|
+
capacity: '50,000+ phones, 600 calls/sec',
|
|
58
|
+
hardware: '32 GB RAM, 8 vCPUs, 200 GB disk',
|
|
59
|
+
env: {
|
|
60
|
+
PG_SHARED_BUFFERS: '4GB',
|
|
61
|
+
PG_EFFECTIVE_CACHE_SIZE: '12GB',
|
|
62
|
+
PG_WORK_MEM: '32MB',
|
|
63
|
+
PG_MAINTENANCE_WORK_MEM: '512MB',
|
|
64
|
+
PG_SHM_SIZE: '5gb',
|
|
65
|
+
PG_MAX_CONNECTIONS: '300',
|
|
66
|
+
DB_POOL_SIZE: '60',
|
|
67
|
+
DB_BACKGROUND_POOL_SIZE: '25',
|
|
68
|
+
DB_DISCOVERY_POOL_SIZE: '25',
|
|
69
|
+
DB_OBAN_POOL_SIZE: '20',
|
|
70
|
+
DB_MEM_LIMIT: '10g',
|
|
71
|
+
WEB_MEM_LIMIT: '8g',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
const PROFILE_NAMES = ['small', 'medium', 'large'];
|
|
76
|
+
/** All env keys managed by performance profiles. */
|
|
77
|
+
export const PROFILE_ENV_KEYS = Object.keys(PROFILES.small.env);
|
|
78
|
+
// ── System detection ────────────────────────────────────────────────────────
|
|
79
|
+
/** Read total system RAM in MB from /proc/meminfo. Returns 0 on failure. */
|
|
80
|
+
export function getSystemRamMb() {
|
|
81
|
+
try {
|
|
82
|
+
const content = readFileSync('/proc/meminfo', 'utf-8');
|
|
83
|
+
const match = content.match(/MemTotal:\s+(\d+)\s+kB/);
|
|
84
|
+
if (!match)
|
|
85
|
+
return 0;
|
|
86
|
+
return Math.round(parseInt(match[1], 10) / 1024);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Count CPU cores from /proc/cpuinfo. Returns 0 on failure. */
|
|
93
|
+
export function getSystemCpuCount() {
|
|
94
|
+
try {
|
|
95
|
+
const content = readFileSync('/proc/cpuinfo', 'utf-8');
|
|
96
|
+
const matches = content.match(/^processor\s*:/gm);
|
|
97
|
+
return matches ? matches.length : 0;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return 0;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Recommend a profile based on available RAM.
|
|
105
|
+
* Uses 10% tolerance — 7200 MB counts as 8 GB (covers VM overhead).
|
|
106
|
+
*/
|
|
107
|
+
export function recommendedProfile(ramMb) {
|
|
108
|
+
// Apply 10% tolerance for matching
|
|
109
|
+
const effective = ramMb * (1 / 0.9); // What "full" RAM would be
|
|
110
|
+
if (effective >= 32 * 1024)
|
|
111
|
+
return 'large';
|
|
112
|
+
if (effective >= 16 * 1024)
|
|
113
|
+
return 'medium';
|
|
114
|
+
return 'small';
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if a profile's RAM requirement is met with 10% tolerance.
|
|
118
|
+
* Returns true if the system has enough RAM.
|
|
119
|
+
*/
|
|
120
|
+
export function meetsRamRequirement(ramMb, profile) {
|
|
121
|
+
const required = PROFILES[profile].minRamMb;
|
|
122
|
+
return ramMb >= required * 0.9;
|
|
123
|
+
}
|
|
124
|
+
/** Detect current profile by matching .env values against profile definitions. */
|
|
125
|
+
export function detectCurrentProfile() {
|
|
126
|
+
const env = readEnvKeys();
|
|
127
|
+
for (const name of PROFILE_NAMES) {
|
|
128
|
+
const profileEnv = PROFILES[name].env;
|
|
129
|
+
const allMatch = Object.entries(profileEnv).every(([key, value]) => env[key] === value);
|
|
130
|
+
if (allMatch)
|
|
131
|
+
return name;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
/** Apply a profile by writing all env vars atomically. */
|
|
136
|
+
export async function applyProfile(name) {
|
|
137
|
+
const profile = PROFILES[name];
|
|
138
|
+
await updateEnvKeys({ ...profile.env });
|
|
139
|
+
}
|
|
140
|
+
// ── Command handlers ────────────────────────────────────────────────────────
|
|
141
|
+
export async function handleAppliancePerformance(args, _opts, _ctx) {
|
|
142
|
+
const profileArg = args[0]?.toLowerCase();
|
|
143
|
+
if (!profileArg) {
|
|
144
|
+
console.log('% Usage: appliance performance <small|medium|large>');
|
|
145
|
+
console.log('');
|
|
146
|
+
for (const name of PROFILE_NAMES) {
|
|
147
|
+
const p = PROFILES[name];
|
|
148
|
+
console.log(` ${name.padEnd(8)} ${p.capacity}`);
|
|
149
|
+
console.log(` ${' '.repeat(8)} Minimum: ${p.hardware}`);
|
|
150
|
+
}
|
|
151
|
+
console.log('');
|
|
152
|
+
console.log(' Use "show appliance performance" to see current profile.');
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (!PROFILE_NAMES.includes(profileArg)) {
|
|
156
|
+
console.log(statusLine(`Unknown profile '${profileArg}'`, 'fail', 'valid: small, medium, large'));
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const name = profileArg;
|
|
160
|
+
const profile = PROFILES[name];
|
|
161
|
+
// Check system RAM
|
|
162
|
+
const ramMb = getSystemRamMb();
|
|
163
|
+
if (ramMb > 0 && !meetsRamRequirement(ramMb, name)) {
|
|
164
|
+
const ramGb = (ramMb / 1024).toFixed(1);
|
|
165
|
+
console.log(statusLine(`Warning: System has ${ramGb} GB RAM but ${profile.description} requires ${profile.hardware}`, 'warn', 'performance may suffer'));
|
|
166
|
+
}
|
|
167
|
+
try {
|
|
168
|
+
await applyProfile(name);
|
|
169
|
+
console.log(statusLine(`Performance profile set to ${profile.description}`, 'ok', 'restart services to apply'));
|
|
170
|
+
console.log(statusLine(profile.capacity, 'info'));
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
174
|
+
console.log(statusLine(`Failed to apply profile: ${msg}`, 'fail'));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export async function showAppliancePerformance(_args, _opts, _ctx) {
|
|
178
|
+
console.log(banner('Appliance Performance'));
|
|
179
|
+
const current = detectCurrentProfile();
|
|
180
|
+
const ramMb = getSystemRamMb();
|
|
181
|
+
const cpus = getSystemCpuCount();
|
|
182
|
+
const kvPairs = [];
|
|
183
|
+
if (ramMb > 0 || cpus > 0) {
|
|
184
|
+
const ramStr = ramMb > 0 ? `${(ramMb / 1024).toFixed(1)} GB` : 'unknown';
|
|
185
|
+
const cpuStr = cpus > 0 ? `${cpus} vCPUs` : 'unknown';
|
|
186
|
+
kvPairs.push(['Hardware', `${ramStr} RAM, ${cpuStr}`]);
|
|
187
|
+
}
|
|
188
|
+
if (current) {
|
|
189
|
+
const profile = PROFILES[current];
|
|
190
|
+
kvPairs.push(['Active Profile', profile.description]);
|
|
191
|
+
kvPairs.push(['Capacity', profile.capacity]);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
kvPairs.push(['Active Profile', 'Custom / not set']);
|
|
195
|
+
}
|
|
196
|
+
if (ramMb > 0) {
|
|
197
|
+
const rec = recommendedProfile(ramMb);
|
|
198
|
+
kvPairs.push(['Recommended', PROFILES[rec].description]);
|
|
199
|
+
}
|
|
200
|
+
console.log(kv(kvPairs));
|
|
201
|
+
console.log('');
|
|
202
|
+
console.log(' Available profiles:');
|
|
203
|
+
for (const name of PROFILE_NAMES) {
|
|
204
|
+
const p = PROFILES[name];
|
|
205
|
+
const marker = name === current ? ' (active)' : '';
|
|
206
|
+
console.log(` ${name.padEnd(8)} ${p.capacity}${marker}`);
|
|
207
|
+
console.log(` ${' '.repeat(8)} Minimum: ${p.hardware}`);
|
|
208
|
+
}
|
|
209
|
+
console.log('');
|
|
210
|
+
}
|
|
211
|
+
// ── Wire handlers into command tree ─────────────────────────────────────────
|
|
212
|
+
export function wireApplianceHandlers(applianceNode) {
|
|
213
|
+
if (!applianceNode.children)
|
|
214
|
+
return;
|
|
215
|
+
for (const child of applianceNode.children) {
|
|
216
|
+
if (child.name === 'performance') {
|
|
217
|
+
child.handler = handleAppliancePerformance;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=appliance-performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appliance-performance.js","sourceRoot":"","sources":["../../../src/shell/commands/appliance-performance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAgDhD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAiZzB,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { wireSystemHandlers } from './system.js';
|
|
|
6
6
|
import { wireDebugHandlers } from './debug.js';
|
|
7
7
|
import { wireTestHandlers } from './test.js';
|
|
8
8
|
import { wireDockerHandlers, wireNetworkHandlers, wireK8sHandlers, wireJtapiHandlers, wireLoadtestHandlers, } from './diag.js';
|
|
9
|
+
import { wireApplianceHandlers, showAppliancePerformance } from './appliance-performance.js';
|
|
9
10
|
/**
|
|
10
11
|
* Full command tree for the ct shell.
|
|
11
12
|
* Handlers are wired to implementations in show.ts, services.ts, db.ts, config.ts, and system.ts.
|
|
@@ -14,6 +15,14 @@ export const commandTree = {
|
|
|
14
15
|
name: 'root',
|
|
15
16
|
description: 'CallTelemetry Voice OS',
|
|
16
17
|
children: [
|
|
18
|
+
// ── appliance ─────────────────────────────────────────
|
|
19
|
+
{
|
|
20
|
+
name: 'appliance',
|
|
21
|
+
description: 'Appliance management',
|
|
22
|
+
children: [
|
|
23
|
+
{ name: 'performance', description: 'Set performance profile <small|medium|large>', positionalArgs: ['<profile>'] },
|
|
24
|
+
],
|
|
25
|
+
},
|
|
17
26
|
// ── config ───────────────────────────────────────────
|
|
18
27
|
{
|
|
19
28
|
name: 'config',
|
|
@@ -210,6 +219,13 @@ export const commandTree = {
|
|
|
210
219
|
name: 'show',
|
|
211
220
|
description: 'Display system information',
|
|
212
221
|
children: [
|
|
222
|
+
{
|
|
223
|
+
name: 'appliance',
|
|
224
|
+
description: 'Appliance information',
|
|
225
|
+
children: [
|
|
226
|
+
{ name: 'performance', description: 'Current performance profile', handler: showAppliancePerformance },
|
|
227
|
+
],
|
|
228
|
+
},
|
|
213
229
|
{
|
|
214
230
|
name: 'cdr',
|
|
215
231
|
description: 'Call detail records',
|
|
@@ -414,4 +430,7 @@ if (jtapiNode)
|
|
|
414
430
|
const loadtestNode = findChild('loadtest');
|
|
415
431
|
if (loadtestNode)
|
|
416
432
|
wireLoadtestHandlers(loadtestNode);
|
|
433
|
+
const applianceNode = findChild('appliance');
|
|
434
|
+
if (applianceNode)
|
|
435
|
+
wireApplianceHandlers(applianceNode);
|
|
417
436
|
//# sourceMappingURL=registry.js.map
|