@calltelemetry/cli 0.7.2 → 0.7.5
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.map +1 -1
- package/dist/commands/appliance.js +48 -0
- package/dist/commands/appliance.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +33 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/lib/hardware.d.ts +46 -0
- package/dist/lib/hardware.d.ts.map +1 -0
- package/dist/lib/hardware.js +180 -0
- package/dist/lib/hardware.js.map +1 -0
- package/dist/lib/migration-012-db-pool-sizes.d.ts +6 -6
- package/dist/lib/migration-012-db-pool-sizes.d.ts.map +1 -1
- package/dist/lib/migration-012-db-pool-sizes.js +22 -22
- package/dist/lib/migration-012-db-pool-sizes.js.map +1 -1
- package/dist/lib/postgres.d.ts +18 -0
- package/dist/lib/postgres.d.ts.map +1 -1
- package/dist/lib/postgres.js +69 -0
- package/dist/lib/postgres.js.map +1 -1
- package/dist/lib/prompts.d.ts +2 -1
- package/dist/lib/prompts.d.ts.map +1 -1
- package/dist/lib/prompts.js +30 -1
- package/dist/lib/prompts.js.map +1 -1
- package/dist/lib/update-steps.d.ts.map +1 -1
- package/dist/lib/update-steps.js +34 -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-hardware.d.ts +5 -0
- package/dist/shell/commands/appliance-hardware.d.ts.map +1 -0
- package/dist/shell/commands/appliance-hardware.js +47 -0
- package/dist/shell/commands/appliance-hardware.js.map +1 -0
- package/dist/shell/commands/appliance-performance.d.ts.map +1 -1
- package/dist/shell/commands/appliance-performance.js +38 -51
- package/dist/shell/commands/appliance-performance.js.map +1 -1
- package/dist/shell/commands/registry.d.ts.map +1 -1
- package/dist/shell/commands/registry.js +9 -0
- package/dist/shell/commands/registry.js.map +1 -1
- package/dist/shell/network-onboarding.d.ts +1 -0
- package/dist/shell/network-onboarding.d.ts.map +1 -1
- package/dist/shell/network-onboarding.js +13 -10
- package/dist/shell/network-onboarding.js.map +1 -1
- package/dist/ui/views/DbHealthView.d.ts.map +1 -1
- package/dist/ui/views/DbHealthView.js +18 -26
- package/dist/ui/views/DbHealthView.js.map +1 -1
- package/dist/ui/views/DiskHardwareCheckView.d.ts +6 -0
- package/dist/ui/views/DiskHardwareCheckView.d.ts.map +1 -0
- package/dist/ui/views/DiskHardwareCheckView.js +108 -0
- package/dist/ui/views/DiskHardwareCheckView.js.map +1 -0
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +3 -0
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appliance.d.ts","sourceRoot":"","sources":["../../src/commands/appliance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"appliance.d.ts","sourceRoot":"","sources":["../../src/commands/appliance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,QA4KxD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import * as out from '../utils/output.js';
|
|
3
3
|
import { getMigrationStatus, runPendingMigrations } from '../lib/migrations.js';
|
|
4
|
+
import { DEFAULT_DISK_CHECK_DIRECTORY, DEFAULT_DISK_CHECK_RUNTIME_SEC, DEFAULT_DISK_CHECK_SIZE, formatBandwidth, formatIops, runDiskCheck, } from '../lib/hardware.js';
|
|
4
5
|
export function registerApplianceCommand(program) {
|
|
5
6
|
const appliance = program
|
|
6
7
|
.command('appliance')
|
|
@@ -95,5 +96,52 @@ export function registerApplianceCommand(program) {
|
|
|
95
96
|
console.log();
|
|
96
97
|
}
|
|
97
98
|
});
|
|
99
|
+
const hardwareCheck = appliance
|
|
100
|
+
.command('hardware-check')
|
|
101
|
+
.description('Run appliance hardware validation checks');
|
|
102
|
+
hardwareCheck.command('disk')
|
|
103
|
+
.description('Run fio disk benchmark for IOPS and bandwidth')
|
|
104
|
+
.option('--path <dir>', 'Directory used for temporary benchmark files', DEFAULT_DISK_CHECK_DIRECTORY)
|
|
105
|
+
.option('--size <size>', 'fio working set size', DEFAULT_DISK_CHECK_SIZE)
|
|
106
|
+
.option('--runtime <seconds>', 'fio runtime per phase in seconds', String(DEFAULT_DISK_CHECK_RUNTIME_SEC))
|
|
107
|
+
.action(async (opts) => {
|
|
108
|
+
const runtimeSec = Number.parseInt(opts.runtime, 10);
|
|
109
|
+
if (!Number.isFinite(runtimeSec) || runtimeSec <= 0) {
|
|
110
|
+
out.fail('Runtime must be a positive integer number of seconds.');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
out.header('Disk Hardware Check');
|
|
114
|
+
console.log(` Directory: ${opts.path}`);
|
|
115
|
+
console.log(` Size: ${opts.size}`);
|
|
116
|
+
console.log(` Runtime: ${runtimeSec}s per phase`);
|
|
117
|
+
console.log();
|
|
118
|
+
try {
|
|
119
|
+
const result = await runDiskCheck({
|
|
120
|
+
directory: opts.path,
|
|
121
|
+
size: opts.size,
|
|
122
|
+
runtimeSec,
|
|
123
|
+
});
|
|
124
|
+
out.ok(`fio ${result.fioVersion}`);
|
|
125
|
+
console.log();
|
|
126
|
+
console.log(chalk.bold(' Phase'.padEnd(30)) +
|
|
127
|
+
chalk.bold('Read IOPS'.padEnd(12)) +
|
|
128
|
+
chalk.bold('Write IOPS'.padEnd(13)) +
|
|
129
|
+
chalk.bold('Read BW'.padEnd(14)) +
|
|
130
|
+
chalk.bold('Write BW'));
|
|
131
|
+
out.divider();
|
|
132
|
+
for (const phase of result.phases) {
|
|
133
|
+
console.log(` ${`${phase.label} (${phase.blockSize})`.padEnd(28)}` +
|
|
134
|
+
`${formatIops(phase.read.iops).padEnd(12)}` +
|
|
135
|
+
`${formatIops(phase.write.iops).padEnd(13)}` +
|
|
136
|
+
`${formatBandwidth(phase.read.bandwidthBytesPerSec).padEnd(14)}` +
|
|
137
|
+
`${formatBandwidth(phase.write.bandwidthBytesPerSec)}`);
|
|
138
|
+
}
|
|
139
|
+
console.log();
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
143
|
+
out.fail(`Disk hardware check failed: ${message}`);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
98
146
|
}
|
|
99
147
|
//# sourceMappingURL=appliance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appliance.js","sourceRoot":"","sources":["../../src/commands/appliance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"appliance.js","sourceRoot":"","sources":["../../src/commands/appliance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA0NrD"}
|
package/dist/commands/config.js
CHANGED
|
@@ -5,7 +5,7 @@ import { render } from 'ink';
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import { compose, composeUp, detectComposeCommand } from '../lib/compose.js';
|
|
7
7
|
import { getPaths } from '../lib/paths.js';
|
|
8
|
-
import { getPostgresVersion, getCurrentPostgresImage, setPostgresVersion } from '../lib/postgres.js';
|
|
8
|
+
import { getPostgresVersion, getCurrentPostgresImage, setPostgresVersion, applyPgProfile, getPgProfileStatus, VALID_PROFILES } from '../lib/postgres.js';
|
|
9
9
|
import { resetCerts, generateSelfSignedCerts } from '../lib/certs.js';
|
|
10
10
|
import { getSecrets } from '../lib/secrets.js';
|
|
11
11
|
import { CertsStatusView } from '../ui/views/CertsStatusView.js';
|
|
@@ -99,10 +99,40 @@ export function registerConfigCommand(program) {
|
|
|
99
99
|
console.log(`Configured version: ${getPostgresVersion()}`);
|
|
100
100
|
console.log(`Current image: ${getCurrentPostgresImage()}`);
|
|
101
101
|
console.log(`Supported versions: ${postgresSupportedVersions.join(', ')}`);
|
|
102
|
+
const { profile, settings } = getPgProfileStatus();
|
|
103
|
+
console.log(`Connection profile: ${profile}`);
|
|
102
104
|
console.log();
|
|
103
105
|
console.log('Usage:');
|
|
104
|
-
console.log(' ct postgres set <version>
|
|
105
|
-
console.log(' ct postgres upgrade <version>
|
|
106
|
+
console.log(' ct postgres set <version> Set version for next update');
|
|
107
|
+
console.log(' ct postgres upgrade <version> Upgrade to new major version');
|
|
108
|
+
console.log(` ct postgres profile <${VALID_PROFILES.join('|')}|show> Set connection sizing profile`);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (action === 'profile') {
|
|
112
|
+
if (!version || version === 'show') {
|
|
113
|
+
const { profile, settings } = getPgProfileStatus();
|
|
114
|
+
out.header(`PostgreSQL Profile: ${profile}`);
|
|
115
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
116
|
+
console.log(` ${key.padEnd(30)} ${value}`);
|
|
117
|
+
}
|
|
118
|
+
console.log();
|
|
119
|
+
console.log(`Available profiles: ${VALID_PROFILES.join(', ')}`);
|
|
120
|
+
console.log(`Usage: ct postgres profile <${VALID_PROFILES.join('|')}>`);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!VALID_PROFILES.includes(version)) {
|
|
124
|
+
out.fail(`Invalid profile '${version}'`);
|
|
125
|
+
console.log(`Available profiles: ${VALID_PROFILES.join(', ')}`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
await applyPgProfile(version);
|
|
129
|
+
out.ok(`PostgreSQL profile set to: ${version}`);
|
|
130
|
+
const { settings } = getPgProfileStatus();
|
|
131
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
132
|
+
console.log(` ${key.padEnd(30)} ${value}`);
|
|
133
|
+
}
|
|
134
|
+
console.log();
|
|
135
|
+
console.log('Note: Restart services to apply — ct services restart db');
|
|
106
136
|
return;
|
|
107
137
|
}
|
|
108
138
|
if (action === 'set') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare const DEFAULT_DISK_CHECK_DIRECTORY = "/var/tmp";
|
|
2
|
+
export declare const DEFAULT_DISK_CHECK_SIZE = "512M";
|
|
3
|
+
export declare const DEFAULT_DISK_CHECK_RUNTIME_SEC = 15;
|
|
4
|
+
export interface DiskCheckOptions {
|
|
5
|
+
directory?: string;
|
|
6
|
+
size?: string;
|
|
7
|
+
runtimeSec?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface FioMetric {
|
|
10
|
+
iops: number;
|
|
11
|
+
bandwidthBytesPerSec: number;
|
|
12
|
+
}
|
|
13
|
+
export interface DiskCheckPhaseResult {
|
|
14
|
+
label: string;
|
|
15
|
+
blockSize: string;
|
|
16
|
+
read: FioMetric;
|
|
17
|
+
write: FioMetric;
|
|
18
|
+
}
|
|
19
|
+
export interface DiskCheckResult {
|
|
20
|
+
fioVersion: string;
|
|
21
|
+
directory: string;
|
|
22
|
+
size: string;
|
|
23
|
+
runtimeSec: number;
|
|
24
|
+
phases: DiskCheckPhaseResult[];
|
|
25
|
+
}
|
|
26
|
+
export interface DiskCheckSeriesSample {
|
|
27
|
+
sampleNumber: number;
|
|
28
|
+
totalSamples: number;
|
|
29
|
+
random: DiskCheckPhaseResult;
|
|
30
|
+
sequential: DiskCheckPhaseResult;
|
|
31
|
+
}
|
|
32
|
+
export interface DiskCheckSeriesResult extends DiskCheckResult {
|
|
33
|
+
sampleCount: number;
|
|
34
|
+
randomReadIopsHistory: number[];
|
|
35
|
+
randomWriteIopsHistory: number[];
|
|
36
|
+
sequentialReadBandwidthHistory: number[];
|
|
37
|
+
sequentialWriteBandwidthHistory: number[];
|
|
38
|
+
}
|
|
39
|
+
export declare function runDiskCheck(options?: DiskCheckOptions): Promise<DiskCheckResult>;
|
|
40
|
+
export declare function runDiskCheckSeries(options?: DiskCheckOptions & {
|
|
41
|
+
sampleCount?: number;
|
|
42
|
+
onSample?: (sample: DiskCheckSeriesSample) => void;
|
|
43
|
+
}): Promise<DiskCheckSeriesResult>;
|
|
44
|
+
export declare function formatIops(iops: number): string;
|
|
45
|
+
export declare function formatBandwidth(bytesPerSec: number): string;
|
|
46
|
+
//# sourceMappingURL=hardware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/lib/hardware.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B,aAAa,CAAC;AACvD,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,8BAA8B,EAAE,MAAM,EAAE,CAAC;IACzC,+BAA+B,EAAE,MAAM,EAAE,CAAC;CAC3C;AA6ED,wBAAsB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAiC3F;AAED,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,gBAAgB,GAAG;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC/C,GACL,OAAO,CAAC,qBAAqB,CAAC,CAiFhC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI3D"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { exec } from './exec.js';
|
|
4
|
+
export const DEFAULT_DISK_CHECK_DIRECTORY = '/var/tmp';
|
|
5
|
+
export const DEFAULT_DISK_CHECK_SIZE = '512M';
|
|
6
|
+
export const DEFAULT_DISK_CHECK_RUNTIME_SEC = 15;
|
|
7
|
+
function toMetric(value) {
|
|
8
|
+
return {
|
|
9
|
+
iops: Number(value?.iops ?? 0),
|
|
10
|
+
bandwidthBytesPerSec: Number(value?.bw_bytes ?? 0),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function parseFioResult(stdout, label, blockSize) {
|
|
14
|
+
const parsed = JSON.parse(stdout);
|
|
15
|
+
const job = parsed.jobs?.[0];
|
|
16
|
+
if (!job) {
|
|
17
|
+
throw new Error(`fio did not return any jobs for ${label}`);
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
label,
|
|
21
|
+
blockSize,
|
|
22
|
+
read: toMetric(job.read),
|
|
23
|
+
write: toMetric(job.write),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function diskCheckArgs(filename, size, runtimeSec, rw, blockSize) {
|
|
27
|
+
return [
|
|
28
|
+
`--name=${rw}`,
|
|
29
|
+
`--filename=${filename}`,
|
|
30
|
+
`--rw=${rw}`,
|
|
31
|
+
'--rwmixread=50',
|
|
32
|
+
`--bs=${blockSize}`,
|
|
33
|
+
'--direct=1',
|
|
34
|
+
'--numjobs=1',
|
|
35
|
+
`--size=${size}`,
|
|
36
|
+
`--runtime=${runtimeSec}`,
|
|
37
|
+
'--time_based=1',
|
|
38
|
+
'--group_reporting=1',
|
|
39
|
+
'--output-format=json',
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
function average(values) {
|
|
43
|
+
if (values.length === 0)
|
|
44
|
+
return 0;
|
|
45
|
+
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
46
|
+
}
|
|
47
|
+
async function runFioPhase(filename, size, runtimeSec, rw, blockSize, label) {
|
|
48
|
+
const { stdout } = await exec('fio', diskCheckArgs(filename, size, runtimeSec, rw, blockSize), {
|
|
49
|
+
env: {
|
|
50
|
+
...process.env,
|
|
51
|
+
LANG: 'C',
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
return parseFioResult(String(stdout ?? ''), label, blockSize);
|
|
55
|
+
}
|
|
56
|
+
export async function runDiskCheck(options = {}) {
|
|
57
|
+
const directory = options.directory ?? DEFAULT_DISK_CHECK_DIRECTORY;
|
|
58
|
+
const size = options.size ?? DEFAULT_DISK_CHECK_SIZE;
|
|
59
|
+
const runtimeSec = options.runtimeSec ?? DEFAULT_DISK_CHECK_RUNTIME_SEC;
|
|
60
|
+
try {
|
|
61
|
+
const { stdout: fioVersion } = await exec('fio', ['--version']);
|
|
62
|
+
const tempDir = await mkdtemp(join(directory, 'ct-fio-'));
|
|
63
|
+
const filename = join(tempDir, 'disk-check.bin');
|
|
64
|
+
try {
|
|
65
|
+
const phases = await Promise.all([
|
|
66
|
+
runFioPhase(filename, size, runtimeSec, 'randrw', '4k', 'Random IOPS'),
|
|
67
|
+
runFioPhase(filename, size, runtimeSec, 'rw', '1M', 'Sequential Bandwidth'),
|
|
68
|
+
]);
|
|
69
|
+
return {
|
|
70
|
+
fioVersion: String(fioVersion ?? '').trim(),
|
|
71
|
+
directory,
|
|
72
|
+
size,
|
|
73
|
+
runtimeSec,
|
|
74
|
+
phases,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
await rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
+
if (message.includes('ENOENT') || message.includes('command not found')) {
|
|
84
|
+
throw new Error('fio is not installed or not available on PATH');
|
|
85
|
+
}
|
|
86
|
+
throw err;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export async function runDiskCheckSeries(options = {}) {
|
|
90
|
+
const directory = options.directory ?? DEFAULT_DISK_CHECK_DIRECTORY;
|
|
91
|
+
const size = options.size ?? DEFAULT_DISK_CHECK_SIZE;
|
|
92
|
+
const runtimeSec = options.runtimeSec ?? DEFAULT_DISK_CHECK_RUNTIME_SEC;
|
|
93
|
+
const sampleCount = options.sampleCount ?? 6;
|
|
94
|
+
try {
|
|
95
|
+
const { stdout: fioVersion } = await exec('fio', ['--version']);
|
|
96
|
+
const tempDir = await mkdtemp(join(directory, 'ct-fio-'));
|
|
97
|
+
const filename = join(tempDir, 'disk-check.bin');
|
|
98
|
+
try {
|
|
99
|
+
const randomReadIopsHistory = [];
|
|
100
|
+
const randomWriteIopsHistory = [];
|
|
101
|
+
const sequentialReadBandwidthHistory = [];
|
|
102
|
+
const sequentialWriteBandwidthHistory = [];
|
|
103
|
+
for (let index = 0; index < sampleCount; index += 1) {
|
|
104
|
+
const random = await runFioPhase(filename, size, runtimeSec, 'randrw', '4k', 'Random IOPS');
|
|
105
|
+
const sequential = await runFioPhase(filename, size, runtimeSec, 'rw', '1M', 'Sequential Bandwidth');
|
|
106
|
+
randomReadIopsHistory.push(random.read.iops);
|
|
107
|
+
randomWriteIopsHistory.push(random.write.iops);
|
|
108
|
+
sequentialReadBandwidthHistory.push(sequential.read.bandwidthBytesPerSec);
|
|
109
|
+
sequentialWriteBandwidthHistory.push(sequential.write.bandwidthBytesPerSec);
|
|
110
|
+
options.onSample?.({
|
|
111
|
+
sampleNumber: index + 1,
|
|
112
|
+
totalSamples: sampleCount,
|
|
113
|
+
random,
|
|
114
|
+
sequential,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
fioVersion: String(fioVersion ?? '').trim(),
|
|
119
|
+
directory,
|
|
120
|
+
size,
|
|
121
|
+
runtimeSec,
|
|
122
|
+
sampleCount,
|
|
123
|
+
phases: [
|
|
124
|
+
{
|
|
125
|
+
label: 'Random IOPS',
|
|
126
|
+
blockSize: '4k',
|
|
127
|
+
read: {
|
|
128
|
+
iops: average(randomReadIopsHistory),
|
|
129
|
+
bandwidthBytesPerSec: 0,
|
|
130
|
+
},
|
|
131
|
+
write: {
|
|
132
|
+
iops: average(randomWriteIopsHistory),
|
|
133
|
+
bandwidthBytesPerSec: 0,
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
label: 'Sequential Bandwidth',
|
|
138
|
+
blockSize: '1M',
|
|
139
|
+
read: {
|
|
140
|
+
iops: 0,
|
|
141
|
+
bandwidthBytesPerSec: average(sequentialReadBandwidthHistory),
|
|
142
|
+
},
|
|
143
|
+
write: {
|
|
144
|
+
iops: 0,
|
|
145
|
+
bandwidthBytesPerSec: average(sequentialWriteBandwidthHistory),
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
randomReadIopsHistory,
|
|
150
|
+
randomWriteIopsHistory,
|
|
151
|
+
sequentialReadBandwidthHistory,
|
|
152
|
+
sequentialWriteBandwidthHistory,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
await rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
161
|
+
if (message.includes('ENOENT') || message.includes('command not found')) {
|
|
162
|
+
throw new Error('fio is not installed or not available on PATH');
|
|
163
|
+
}
|
|
164
|
+
throw err;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export function formatIops(iops) {
|
|
168
|
+
if (iops >= 1_000_000)
|
|
169
|
+
return `${(iops / 1_000_000).toFixed(2)}M`;
|
|
170
|
+
if (iops >= 1_000)
|
|
171
|
+
return `${(iops / 1_000).toFixed(1)}k`;
|
|
172
|
+
return iops.toFixed(0);
|
|
173
|
+
}
|
|
174
|
+
export function formatBandwidth(bytesPerSec) {
|
|
175
|
+
const mib = bytesPerSec / (1024 * 1024);
|
|
176
|
+
if (mib >= 1024)
|
|
177
|
+
return `${(mib / 1024).toFixed(2)} GiB/s`;
|
|
178
|
+
return `${mib.toFixed(1)} MiB/s`;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=hardware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardware.js","sourceRoot":"","sources":["../../src/lib/hardware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Migration 012: Set default DB
|
|
2
|
+
* Migration 012: Set default DB connection sizing if no profile is configured.
|
|
3
3
|
*
|
|
4
|
-
* Existing appliances run with
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Existing appliances run with large DB pool counts by default, which is
|
|
5
|
+
* excessive for 8GB appliances and wastes memory. If no connection sizing is set
|
|
6
|
+
* in .env, apply the conservative 'small' defaults:
|
|
7
|
+
* PG max_connections 100 with 75 total app-side pooled connections (15x5).
|
|
8
8
|
*
|
|
9
|
-
* Does NOT override if
|
|
9
|
+
* Does NOT override if connection sizing is already set — respects user choice.
|
|
10
10
|
*/
|
|
11
11
|
export declare function migrateDbPoolSizes(): Promise<boolean>;
|
|
12
12
|
//# sourceMappingURL=migration-012-db-pool-sizes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-012-db-pool-sizes.d.ts","sourceRoot":"","sources":["../../src/lib/migration-012-db-pool-sizes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"migration-012-db-pool-sizes.d.ts","sourceRoot":"","sources":["../../src/lib/migration-012-db-pool-sizes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CA6C3D"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Migration 012: Set default DB
|
|
2
|
+
* Migration 012: Set default DB connection sizing if no profile is configured.
|
|
3
3
|
*
|
|
4
|
-
* Existing appliances run with
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Existing appliances run with large DB pool counts by default, which is
|
|
5
|
+
* excessive for 8GB appliances and wastes memory. If no connection sizing is set
|
|
6
|
+
* in .env, apply the conservative 'small' defaults:
|
|
7
|
+
* PG max_connections 100 with 75 total app-side pooled connections (15x5).
|
|
8
8
|
*
|
|
9
|
-
* Does NOT override if
|
|
9
|
+
* Does NOT override if connection sizing is already set — respects user choice.
|
|
10
10
|
*/
|
|
11
11
|
import { existsSync, readFileSync } from 'node:fs';
|
|
12
12
|
import { spawnSync } from 'node:child_process';
|
|
@@ -24,29 +24,29 @@ function getInstallDir() {
|
|
|
24
24
|
export async function migrateDbPoolSizes() {
|
|
25
25
|
const installDir = getInstallDir();
|
|
26
26
|
const envFile = join(installDir, '.env');
|
|
27
|
-
// If
|
|
27
|
+
// If any connection sizing is already set, user has chosen values — don't override
|
|
28
28
|
if (existsSync(envFile)) {
|
|
29
29
|
const content = readFileSync(envFile, 'utf-8');
|
|
30
|
-
if (content.includes('
|
|
30
|
+
if (content.includes('PG_MAX_CONNECTIONS=') ||
|
|
31
|
+
content.includes('DB_POOL_SIZE=') ||
|
|
32
|
+
content.includes('DB_CALL_CONTROL_POOL_SIZE=') ||
|
|
33
|
+
content.includes('DB_BACKGROUND_POOL_SIZE=') ||
|
|
34
|
+
content.includes('DB_DISCOVERY_POOL_SIZE=') ||
|
|
35
|
+
content.includes('DB_OBAN_POOL_SIZE=')) {
|
|
31
36
|
return false; // Already configured
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
|
-
// No
|
|
39
|
+
// No connection sizing set — apply small defaults
|
|
35
40
|
const settings = [
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
'PG_MAX_CONNECTIONS=60',
|
|
43
|
-
'DB_POOL_SIZE=20',
|
|
44
|
-
'DB_BACKGROUND_POOL_SIZE=8',
|
|
45
|
-
'DB_DISCOVERY_POOL_SIZE=8',
|
|
46
|
-
'DB_OBAN_POOL_SIZE=8',
|
|
41
|
+
'PG_MAX_CONNECTIONS=100',
|
|
42
|
+
'DB_POOL_SIZE=15',
|
|
43
|
+
'DB_CALL_CONTROL_POOL_SIZE=15',
|
|
44
|
+
'DB_BACKGROUND_POOL_SIZE=15',
|
|
45
|
+
'DB_DISCOVERY_POOL_SIZE=15',
|
|
46
|
+
'DB_OBAN_POOL_SIZE=15',
|
|
47
47
|
];
|
|
48
48
|
// Append to .env (or create it)
|
|
49
|
-
const block = '\n#
|
|
49
|
+
const block = '\n# DB connection sizing: small (auto-applied by migration 012)\n' +
|
|
50
50
|
settings.join('\n') + '\n';
|
|
51
51
|
const tmp = `/tmp/ct-env-append-${Date.now()}`;
|
|
52
52
|
require('node:fs').writeFileSync(tmp, block);
|
|
@@ -57,7 +57,7 @@ export async function migrateDbPoolSizes() {
|
|
|
57
57
|
}
|
|
58
58
|
catch { /* ignore */ }
|
|
59
59
|
if (result.status !== 0) {
|
|
60
|
-
throw new Error(`Failed to write
|
|
60
|
+
throw new Error(`Failed to write connection sizing to ${envFile}`);
|
|
61
61
|
}
|
|
62
62
|
return true;
|
|
63
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-012-db-pool-sizes.js","sourceRoot":"","sources":["../../src/lib/migration-012-db-pool-sizes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,SAAS,EAAY,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,qDAAqD;AACrD,SAAS,aAAa;IACpB,MAAM,KAAK,GAAG,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEzC,
|
|
1
|
+
{"version":3,"file":"migration-012-db-pool-sizes.js","sourceRoot":"","sources":["../../src/lib/migration-012-db-pool-sizes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,SAAS,EAAY,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,qDAAqD;AACrD,SAAS,aAAa;IACpB,MAAM,KAAK,GAAG,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEzC,mFAAmF;IACnF,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,IACE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC9C,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC5C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EACtC,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,qBAAqB;QACrC,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,QAAQ,GAAG;QACf,wBAAwB;QACxB,iBAAiB;QACjB,8BAA8B;QAC9B,4BAA4B;QAC5B,2BAA2B;QAC3B,sBAAsB;KACvB,CAAC;IAEF,gCAAgC;IAChC,MAAM,KAAK,GAAG,mEAAmE;QAC/E,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE7B,MAAM,GAAG,GAAG,sBAAsB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC/C,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,kBAAkB;IAClB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAChG,IAAI,CAAC;QAAC,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAElE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/lib/postgres.d.ts
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
export declare function getPostgresVersion(): string;
|
|
2
2
|
export declare function getCurrentPostgresImage(): string;
|
|
3
|
+
export type PgProfile = 'small' | 'medium' | 'large';
|
|
4
|
+
export declare const VALID_PROFILES: PgProfile[];
|
|
5
|
+
/**
|
|
6
|
+
* Apply a PG connection profile — overwrites all profile keys in .env.
|
|
7
|
+
*/
|
|
8
|
+
export declare function applyPgProfile(profile: PgProfile): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Show current PG profile settings from .env.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getPgProfileStatus(): {
|
|
13
|
+
profile: string;
|
|
14
|
+
settings: Record<string, string>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Ensure PG defaults exist in .env (no-clobber). Called during upgrades.
|
|
18
|
+
* Only sets keys that are missing — preserves customer overrides.
|
|
19
|
+
*/
|
|
20
|
+
export declare function ensurePgDefaults(): Promise<void>;
|
|
3
21
|
export declare function setPostgresVersion(version: string): Promise<void>;
|
|
4
22
|
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/lib/postgres.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/lib/postgres.ts"],"names":[],"mappings":"AAMA,wBAAgB,kBAAkB,IAAI,MAAM,CAQ3C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAmBhD;AAGD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAgCrD,eAAO,MAAM,cAAc,EAA+B,SAAS,EAAE,CAAC;AAEtE;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAItE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAQ1F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAYtD;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvE"}
|