@hsuite/smart-engines-cli 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/_lib/cluster-convergence.d.ts +8 -0
- package/dist/_lib/cluster-convergence.d.ts.map +1 -1
- package/dist/_lib/cluster-convergence.js +2 -0
- package/dist/_lib/cluster-convergence.js.map +1 -1
- package/dist/_lib/cluster.d.ts +16 -10
- package/dist/_lib/cluster.d.ts.map +1 -1
- package/dist/_lib/cluster.js +23 -4
- package/dist/_lib/cluster.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +37 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts +45 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +149 -1
- package/dist/commands/status.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -36,10 +36,11 @@ showcase smart-app expects.
|
|
|
36
36
|
```bash
|
|
37
37
|
hsuite init # writes ./.env.local (testnet)
|
|
38
38
|
hsuite init --out smart-app/.env.local # custom output path
|
|
39
|
-
hsuite init --network devnet #
|
|
39
|
+
hsuite init --network devnet # XRPL faucet chain: devnet instead of testnet
|
|
40
|
+
hsuite init --hsuite-network devnet # HSUITE cluster: devnet instead of testnet (orthogonal to --network; or $HSUITE_NETWORK)
|
|
40
41
|
hsuite init --no-fund # generate wallet only, skip faucet
|
|
41
42
|
hsuite init --force # overwrite an existing .env.local
|
|
42
|
-
hsuite init --gateway https://... #
|
|
43
|
+
hsuite init --gateway https://... # explicit gateway URL, overrides --hsuite-network
|
|
43
44
|
```
|
|
44
45
|
|
|
45
46
|
The generated `.env.local`:
|
|
@@ -56,6 +56,14 @@ export type ClusterRuntimeObservation = {
|
|
|
56
56
|
state?: string;
|
|
57
57
|
/** Runtime state as THIS cluster's deployer sees it. */
|
|
58
58
|
runtimeState?: string;
|
|
59
|
+
/**
|
|
60
|
+
* #2927 — replica count as THIS cluster's k8s ACTUALLY has running, per its
|
|
61
|
+
* own runtime record. This is the field the testnet incident exposed: the
|
|
62
|
+
* round-robin `hsuite status` reported `replicas=1` while sn2 was at 0 for
|
|
63
|
+
* hours — a per-cluster read is what makes that divergence visible instead
|
|
64
|
+
* of averaged away by whichever cluster answered the round-robin call.
|
|
65
|
+
*/
|
|
66
|
+
replicas?: number;
|
|
59
67
|
/** Image ref THIS cluster has pinned — the field that exposes the divergence. */
|
|
60
68
|
image?: string;
|
|
61
69
|
/** This cluster's own reconcile error (carries the digest MISMATCH text). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-convergence.d.ts","sourceRoot":"","sources":["../../src/_lib/cluster-convergence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAK3B,8CAA8C;AAC9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,0FAA0F;IAC1F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sDAAsD;IACtD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAUtC;
|
|
1
|
+
{"version":3,"file":"cluster-convergence.d.ts","sourceRoot":"","sources":["../../src/_lib/cluster-convergence.ts"],"names":[],"mappings":"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"}
|
|
@@ -145,6 +145,8 @@ async function probeOne(ip, opts) {
|
|
|
145
145
|
obs.runtimeState = body.runtime.runtimeState;
|
|
146
146
|
if (body.runtime?.lastError)
|
|
147
147
|
obs.lastError = body.runtime.lastError;
|
|
148
|
+
if (typeof body.runtime?.replicas === 'number')
|
|
149
|
+
obs.replicas = body.runtime.replicas;
|
|
148
150
|
return obs;
|
|
149
151
|
}
|
|
150
152
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-convergence.js","sourceRoot":"","sources":["../../src/_lib/cluster-convergence.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"cluster-convergence.js","sourceRoot":"","sources":["../../src/_lib/cluster-convergence.ts"],"names":[],"mappings":"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"}
|
package/dist/_lib/cluster.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Public SDK-bootstrap host for the Smart Engines network the CLI targets.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
4
|
+
* Resolved from the `HSUITE_NETWORK` env var (via the SDK's
|
|
5
|
+
* `networkFromEnv`) — defaults to testnet, the only live public network
|
|
6
|
+
* today, when unset or set to an unknown name. This is the SAME `network`
|
|
7
|
+
* axis the SDK's `network-presets.ts` documents (which HSUITE cluster/
|
|
8
|
+
* gateway to talk to); it is UNRELATED to `hsuite init --network`, which
|
|
9
|
+
* picks the XRPL chain (testnet | devnet) the faucet funds from.
|
|
7
10
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
11
|
+
* Resolved ONCE at module load, so this only sees a REAL environment
|
|
12
|
+
* variable — shell-exported, or otherwise present in `process.env` before
|
|
13
|
+
* the CLI process starts. `index.ts`'s `dotenv.config()` call runs AFTER
|
|
14
|
+
* every command module (including this one, transitively) has already been
|
|
15
|
+
* imported, so a `.env`-file-only `HSUITE_NETWORK` is too late to affect
|
|
16
|
+
* this constant. `hsuite init --hsuite-network <name>` resolves at ACTION
|
|
17
|
+
* time instead (after dotenv has run), so it sees both sources — see
|
|
18
|
+
* `commands/init.ts`.
|
|
12
19
|
*/
|
|
13
|
-
|
|
14
|
-
export declare const DEFAULT_GATEWAY = "https://gateway.testnet.hsuite.network";
|
|
20
|
+
export declare const DEFAULT_GATEWAY: string;
|
|
15
21
|
//# sourceMappingURL=cluster.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/_lib/cluster.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/_lib/cluster.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,EAAE,MACuC,CAAC"}
|
package/dist/_lib/cluster.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_GATEWAY = void 0;
|
|
2
4
|
/**
|
|
3
5
|
* Cluster bootstrap constants.
|
|
4
6
|
*
|
|
@@ -11,8 +13,25 @@
|
|
|
11
13
|
* `@hsuite/smart-engines-sdk`; the CLI consumes that factory rather than
|
|
12
14
|
* maintaining a parallel discovery path.
|
|
13
15
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
|
|
17
|
+
/**
|
|
18
|
+
* Public SDK-bootstrap host for the Smart Engines network the CLI targets.
|
|
19
|
+
*
|
|
20
|
+
* Resolved from the `HSUITE_NETWORK` env var (via the SDK's
|
|
21
|
+
* `networkFromEnv`) — defaults to testnet, the only live public network
|
|
22
|
+
* today, when unset or set to an unknown name. This is the SAME `network`
|
|
23
|
+
* axis the SDK's `network-presets.ts` documents (which HSUITE cluster/
|
|
24
|
+
* gateway to talk to); it is UNRELATED to `hsuite init --network`, which
|
|
25
|
+
* picks the XRPL chain (testnet | devnet) the faucet funds from.
|
|
26
|
+
*
|
|
27
|
+
* Resolved ONCE at module load, so this only sees a REAL environment
|
|
28
|
+
* variable — shell-exported, or otherwise present in `process.env` before
|
|
29
|
+
* the CLI process starts. `index.ts`'s `dotenv.config()` call runs AFTER
|
|
30
|
+
* every command module (including this one, transitively) has already been
|
|
31
|
+
* imported, so a `.env`-file-only `HSUITE_NETWORK` is too late to affect
|
|
32
|
+
* this constant. `hsuite init --hsuite-network <name>` resolves at ACTION
|
|
33
|
+
* time instead (after dotenv has run), so it sees both sources — see
|
|
34
|
+
* `commands/init.ts`.
|
|
35
|
+
*/
|
|
36
|
+
exports.DEFAULT_GATEWAY = smart_engines_sdk_1.KNOWN_NETWORKS[(0, smart_engines_sdk_1.networkFromEnv)(undefined, process.env)].bootstrap[0];
|
|
18
37
|
//# sourceMappingURL=cluster.js.map
|
package/dist/_lib/cluster.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/_lib/cluster.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/_lib/cluster.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,iEAA2E;AAE3E;;;;;;;;;;;;;;;;;;GAkBG;AACU,QAAA,eAAe,GAC1B,kCAAc,CAAC,IAAA,kCAAc,EAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,eAAO,MAAM,WAAW,SA4GpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -13,7 +13,7 @@ const ora_1 = __importDefault(require("ora"));
|
|
|
13
13
|
const fs_1 = require("fs");
|
|
14
14
|
const path_1 = require("path");
|
|
15
15
|
const xrpl_1 = require("xrpl");
|
|
16
|
-
const
|
|
16
|
+
const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
|
|
17
17
|
const FAUCETS = {
|
|
18
18
|
testnet: 'https://faucet.altnet.rippletest.net/accounts',
|
|
19
19
|
devnet: 'https://faucet.devnet.rippletest.net/accounts',
|
|
@@ -21,8 +21,13 @@ const FAUCETS = {
|
|
|
21
21
|
exports.initCommand = new commander_1.Command('init')
|
|
22
22
|
.description('Generate an XRPL testnet wallet, fund it, and write .env')
|
|
23
23
|
.option('--out <file>', 'Output env file path', '.env.local')
|
|
24
|
-
.option('--network <network>', 'XRPL network (testnet | devnet)'
|
|
25
|
-
|
|
24
|
+
.option('--network <network>', 'XRPL network the faucet funds from (testnet | devnet). Orthogonal to ' +
|
|
25
|
+
'--hsuite-network: this picks the CHAIN, not the HSUITE cluster.', 'testnet')
|
|
26
|
+
.option('--hsuite-network <name>', 'Which HSUITE cluster/gateway to target ' +
|
|
27
|
+
`(${Object.keys(smart_engines_sdk_1.KNOWN_NETWORKS).join(' | ')}). Orthogonal to --network ` +
|
|
28
|
+
'(the XRPL faucet chain). Defaults to $HSUITE_NETWORK, else testnet.')
|
|
29
|
+
.option('--gateway <url>', 'Smart-engines bootstrap host (written to the env file). Overrides ' +
|
|
30
|
+
'--hsuite-network / $HSUITE_NETWORK when set.')
|
|
26
31
|
.option('--no-fund', 'Skip the testnet faucet step')
|
|
27
32
|
.option('--force', 'Overwrite existing env file')
|
|
28
33
|
.action(async (opts) => {
|
|
@@ -34,10 +39,29 @@ exports.initCommand = new commander_1.Command('init')
|
|
|
34
39
|
process.exit(1);
|
|
35
40
|
}
|
|
36
41
|
}
|
|
42
|
+
// --hsuite-network picks WHICH HSUITE cluster/gateway the SDK talks to —
|
|
43
|
+
// a different axis from --network above (the XRPL chain the faucet funds
|
|
44
|
+
// from). An explicit bad flag fails loud right here (the developer is
|
|
45
|
+
// looking at this exact command); an unknown $HSUITE_NETWORK instead
|
|
46
|
+
// falls back to testnet inside networkFromEnv (see its doc comment —
|
|
47
|
+
// nobody is looking at THIS call site when a shell profile set it).
|
|
48
|
+
const hsuiteNetworkFlag = opts.hsuiteNetwork;
|
|
49
|
+
if (hsuiteNetworkFlag !== undefined && !(0, smart_engines_sdk_1.isKnownNetwork)(hsuiteNetworkFlag)) {
|
|
50
|
+
console.error(chalk_1.default.red(`\n unknown --hsuite-network "${hsuiteNetworkFlag}". Known: ` +
|
|
51
|
+
`${Object.keys(smart_engines_sdk_1.KNOWN_NETWORKS).join(', ')}\n`));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// isKnownNetwork above is a `name is NetworkName` type predicate, so TS
|
|
55
|
+
// narrows hsuiteNetworkFlag to `NetworkName | undefined` here — no cast.
|
|
56
|
+
const hsuiteNetwork = (0, smart_engines_sdk_1.networkFromEnv)(hsuiteNetworkFlag, process.env);
|
|
57
|
+
// Explicit --gateway always wins (manual override / private-deployment
|
|
58
|
+
// escape hatch — the same precedence the SDK's own `bootstrap` param
|
|
59
|
+
// has over `network` in `BaasClient.connectToCluster`).
|
|
60
|
+
const gateway = opts.gateway ?? smart_engines_sdk_1.KNOWN_NETWORKS[hsuiteNetwork].bootstrap[0];
|
|
37
61
|
console.log(chalk_1.default.bold.cyan('\n hsuite init\n'));
|
|
38
|
-
console.log(chalk_1.default.gray(` network:
|
|
39
|
-
console.log(chalk_1.default.gray(`
|
|
40
|
-
console.log(chalk_1.default.gray(`
|
|
62
|
+
console.log(chalk_1.default.gray(` network: ${opts.network} (XRPL faucet chain)`));
|
|
63
|
+
console.log(chalk_1.default.gray(` hsuite-network: ${hsuiteNetwork} (HSUITE cluster)`));
|
|
64
|
+
console.log(chalk_1.default.gray(` gateway: ${gateway}\n`));
|
|
41
65
|
let spinner = (0, ora_1.default)('generating XRPL keypair...').start();
|
|
42
66
|
const wallet = xrpl_1.Wallet.generate();
|
|
43
67
|
spinner.succeed(`keypair: ${wallet.address}`);
|
|
@@ -76,7 +100,8 @@ exports.initCommand = new commander_1.Command('init')
|
|
|
76
100
|
seed: wallet.seed,
|
|
77
101
|
publicKey: wallet.publicKey,
|
|
78
102
|
network: opts.network,
|
|
79
|
-
gateway
|
|
103
|
+
gateway,
|
|
104
|
+
hsuiteNetwork,
|
|
80
105
|
});
|
|
81
106
|
(0, fs_1.writeFileSync)(envPath, env);
|
|
82
107
|
console.log(chalk_1.default.gray(`\n wrote ${envPath}`));
|
|
@@ -93,6 +118,11 @@ APP_NAME=Smart App Showcase (local)
|
|
|
93
118
|
APP_DESCRIPTION=Local boilerplate against the live testnet
|
|
94
119
|
|
|
95
120
|
# --- Smart Engines cluster ---
|
|
121
|
+
# HSUITE_NETWORK records which HSUITE cluster VALIDATOR_URL/SMART_HOST_URL
|
|
122
|
+
# were resolved from (hsuite init --hsuite-network <name> / $HSUITE_NETWORK
|
|
123
|
+
# env). This is NOT an XRPL setting — see XRPL_NETWORK below for the chain
|
|
124
|
+
# the faucet funded from.
|
|
125
|
+
HSUITE_NETWORK=${args.hsuiteNetwork}
|
|
96
126
|
VALIDATOR_URL=${args.gateway}
|
|
97
127
|
SMART_HOST_URL=${args.gateway}
|
|
98
128
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;AAAA;;GAEG;AACH,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,2BAA6D;AAC7D,+BAA+B;AAC/B,+BAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { Command } from 'commander';
|
|
11
11
|
import type { BaasClient, BaasRuntimeStatus } from '@hsuite/smart-engines-sdk';
|
|
12
12
|
import { connectAndAuth } from '../_lib/baas';
|
|
13
|
+
import { probeClusterRuntimes, type ClusterRuntimeObservation } from '../_lib/cluster-convergence';
|
|
13
14
|
export type StatusOpts = {
|
|
14
15
|
envPath: string;
|
|
15
16
|
gateway: string;
|
|
@@ -46,6 +47,50 @@ export declare function waitForRunning(client: BaasClient, appId: string, opts?:
|
|
|
46
47
|
* `BaasRuntimeStatus` (after watching, when `--watch`).
|
|
47
48
|
*/
|
|
48
49
|
export declare function runStatus(opts: StatusOpts): Promise<BaasRuntimeStatus>;
|
|
50
|
+
/**
|
|
51
|
+
* #2927 — honest per-cluster status: every cluster the gateway advertises
|
|
52
|
+
* answers for ITSELF instead of `hsuite status` trusting whichever cluster
|
|
53
|
+
* the round-robin gateway happened to route this ONE request to.
|
|
54
|
+
*/
|
|
55
|
+
export type PerClusterStatus = {
|
|
56
|
+
observations: ClusterRuntimeObservation[];
|
|
57
|
+
/**
|
|
58
|
+
* Pessimistic aggregate: `true` ONLY when every advertised cluster
|
|
59
|
+
* answered (`reachable`), every one reports `runtimeState === 'RUNNING'`,
|
|
60
|
+
* AND every one agrees on `replicas`. A cluster that gave NO answer counts
|
|
61
|
+
* AGAINST the aggregate — it is never silently excluded (the same #2887
|
|
62
|
+
* lesson `assertClustersConverged` already encodes: missing evidence is
|
|
63
|
+
* not evidence of convergence).
|
|
64
|
+
*/
|
|
65
|
+
aggregateRunning: boolean;
|
|
66
|
+
/** Always populated — names WHY the aggregate is/isn't RUNNING. */
|
|
67
|
+
aggregateReason: string;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Fold a set of per-cluster observations into a single pessimistic verdict.
|
|
71
|
+
* Exported (not just used internally) so a caller that already has
|
|
72
|
+
* observations — e.g. `redeploy`'s own convergence probe — can reuse the
|
|
73
|
+
* exact same aggregation rule rather than growing a second one.
|
|
74
|
+
*/
|
|
75
|
+
export declare function aggregateClusterStatus(observations: ClusterRuntimeObservation[]): PerClusterStatus;
|
|
76
|
+
/**
|
|
77
|
+
* #2927 — ask EVERY cluster behind the gateway directly, mirroring
|
|
78
|
+
* `redeploy`'s post-deploy convergence probe (`probeClusterRuntimes`) —
|
|
79
|
+
* same primitive, read-only use. Unlike `assertClustersConverged` (a deploy
|
|
80
|
+
* GATE that throws), this NEVER throws on divergence: a status READ must
|
|
81
|
+
* report the truth, however ugly, not block on it.
|
|
82
|
+
*
|
|
83
|
+
* A probe-level failure (e.g. the gateway hostname doesn't resolve) is
|
|
84
|
+
* caught and folded into `aggregateReason` instead of crashing the command
|
|
85
|
+
* — "I cannot currently tell you the truth" is itself an honest answer
|
|
86
|
+
* `hsuite status` must be able to give, not a stack trace.
|
|
87
|
+
*/
|
|
88
|
+
export declare function probeAllClusters(opts: Pick<StatusOpts, 'envPath' | 'gateway' | 'appId' | 'subscriptionAppId'> & {
|
|
89
|
+
/** Test seam — defaults to the real {@link probeClusterRuntimes}. */
|
|
90
|
+
probe?: typeof probeClusterRuntimes;
|
|
91
|
+
}): Promise<PerClusterStatus>;
|
|
92
|
+
/** Human-readable per-cluster breakdown + pessimistic aggregate. */
|
|
93
|
+
export declare function renderPerClusterStatus(result: PerClusterStatus): string;
|
|
49
94
|
/** Human-readable one-block render of a status. */
|
|
50
95
|
export declare function renderStatus(status: BaasRuntimeStatus): string;
|
|
51
96
|
export declare const statusCommand: Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAK/E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAK/E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC/B,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACtE,0DAA0D;IAC1D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAGxD;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GAC3F,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+B5E;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,yBAAyB,EAAE,CAAC;IAC1C;;;;;;;OAOG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,yBAAyB,EAAE,GACxC,gBAAgB,CAqElB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,mBAAmB,CAAC,GAAG;IAC9E,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,oBAAoB,CAAC;CACrC,GACA,OAAO,CAAC,gBAAgB,CAAC,CAsB3B;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAkBvE;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA6B9D;AAED,eAAO,MAAM,aAAa,SA2DtB,CAAC"}
|
package/dist/commands/status.js
CHANGED
|
@@ -7,6 +7,9 @@ exports.statusCommand = void 0;
|
|
|
7
7
|
exports.isTerminal = isTerminal;
|
|
8
8
|
exports.waitForRunning = waitForRunning;
|
|
9
9
|
exports.runStatus = runStatus;
|
|
10
|
+
exports.aggregateClusterStatus = aggregateClusterStatus;
|
|
11
|
+
exports.probeAllClusters = probeAllClusters;
|
|
12
|
+
exports.renderPerClusterStatus = renderPerClusterStatus;
|
|
10
13
|
exports.renderStatus = renderStatus;
|
|
11
14
|
/**
|
|
12
15
|
* `hsuite status` — live lifecycle + runtime status of a deployed app.
|
|
@@ -23,6 +26,7 @@ const env_1 = require("../_lib/env");
|
|
|
23
26
|
const subscription_env_1 = require("../_lib/subscription-env");
|
|
24
27
|
const cluster_1 = require("../_lib/cluster");
|
|
25
28
|
const baas_1 = require("../_lib/baas");
|
|
29
|
+
const cluster_convergence_1 = require("../_lib/cluster-convergence");
|
|
26
30
|
/** A runtime is "settled" once it can no longer transition on its own. */
|
|
27
31
|
function isTerminal(s) {
|
|
28
32
|
const rs = s.runtime?.runtimeState;
|
|
@@ -83,6 +87,131 @@ async function runStatus(opts) {
|
|
|
83
87
|
}
|
|
84
88
|
return status;
|
|
85
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Fold a set of per-cluster observations into a single pessimistic verdict.
|
|
92
|
+
* Exported (not just used internally) so a caller that already has
|
|
93
|
+
* observations — e.g. `redeploy`'s own convergence probe — can reuse the
|
|
94
|
+
* exact same aggregation rule rather than growing a second one.
|
|
95
|
+
*/
|
|
96
|
+
function aggregateClusterStatus(observations) {
|
|
97
|
+
if (observations.length === 0) {
|
|
98
|
+
return { observations, aggregateRunning: false, aggregateReason: 'no clusters answered' };
|
|
99
|
+
}
|
|
100
|
+
const unreachable = observations.filter((o) => !o.reachable);
|
|
101
|
+
if (unreachable.length > 0) {
|
|
102
|
+
return {
|
|
103
|
+
observations,
|
|
104
|
+
aggregateRunning: false,
|
|
105
|
+
aggregateReason: `${unreachable.length}/${observations.length} cluster(s) gave no answer (` +
|
|
106
|
+
unreachable
|
|
107
|
+
.map((o) => `${o.clusterId ?? o.ip}: ${o.error ?? 'unreachable'}`)
|
|
108
|
+
.join(', ') +
|
|
109
|
+
')',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const notRunning = observations.filter((o) => o.runtimeState !== 'RUNNING');
|
|
113
|
+
if (notRunning.length > 0) {
|
|
114
|
+
return {
|
|
115
|
+
observations,
|
|
116
|
+
aggregateRunning: false,
|
|
117
|
+
aggregateReason: `${notRunning.length}/${observations.length} cluster(s) not RUNNING (` +
|
|
118
|
+
notRunning.map((o) => `${o.clusterId ?? o.ip}=${o.runtimeState ?? 'unknown'}`).join(', ') +
|
|
119
|
+
')',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const distinctReplicaCounts = new Set(observations.map((o) => o.replicas));
|
|
123
|
+
if (distinctReplicaCounts.size > 1) {
|
|
124
|
+
return {
|
|
125
|
+
observations,
|
|
126
|
+
aggregateRunning: false,
|
|
127
|
+
aggregateReason: 'clusters disagree on replica count (' +
|
|
128
|
+
observations.map((o) => `${o.clusterId ?? o.ip}=${o.replicas ?? '?'}`).join(', ') +
|
|
129
|
+
')',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// #2927-B8 HARD CHECK: agreement is not health. Every cluster's runtime
|
|
133
|
+
// RECORD can honestly say `runtimeState=RUNNING` while its ACTUAL k8s
|
|
134
|
+
// Deployment sits at 0 pods — `scaleDownForInactiveSubscription`
|
|
135
|
+
// deliberately does not mutate the Mongo `runtime.runtimeState`/`replicas`
|
|
136
|
+
// fields it did not write (see `smart-app-reconciler.service.ts`), so a
|
|
137
|
+
// cluster (or, in the worst case, ALL of them) that was scaled to 0 keeps
|
|
138
|
+
// reporting the LAST desired-state snapshot, not current reality. Without
|
|
139
|
+
// this check, "all 3 clusters agree" on `replicas=0` would still print
|
|
140
|
+
// `RUNNING` — the exact "guard green while checking nothing" shape this
|
|
141
|
+
// whole feature exists to close.
|
|
142
|
+
const agreedReplicas = observations[0]?.replicas;
|
|
143
|
+
if (agreedReplicas === undefined || agreedReplicas <= 0) {
|
|
144
|
+
return {
|
|
145
|
+
observations,
|
|
146
|
+
aggregateRunning: false,
|
|
147
|
+
aggregateReason: `all ${observations.length} cluster(s) report runtimeState=RUNNING but replicas=` +
|
|
148
|
+
`${agreedReplicas ?? 'unknown'} — RUNNING with zero (or unknown) pods is not actually running`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
observations,
|
|
153
|
+
aggregateRunning: true,
|
|
154
|
+
aggregateReason: `all ${observations.length} cluster(s) agree: RUNNING with ${agreedReplicas} replica(s)`,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* #2927 — ask EVERY cluster behind the gateway directly, mirroring
|
|
159
|
+
* `redeploy`'s post-deploy convergence probe (`probeClusterRuntimes`) —
|
|
160
|
+
* same primitive, read-only use. Unlike `assertClustersConverged` (a deploy
|
|
161
|
+
* GATE that throws), this NEVER throws on divergence: a status READ must
|
|
162
|
+
* report the truth, however ugly, not block on it.
|
|
163
|
+
*
|
|
164
|
+
* A probe-level failure (e.g. the gateway hostname doesn't resolve) is
|
|
165
|
+
* caught and folded into `aggregateReason` instead of crashing the command
|
|
166
|
+
* — "I cannot currently tell you the truth" is itself an honest answer
|
|
167
|
+
* `hsuite status` must be able to give, not a stack trace.
|
|
168
|
+
*/
|
|
169
|
+
async function probeAllClusters(opts) {
|
|
170
|
+
try {
|
|
171
|
+
const env = (0, env_1.readEnv)(opts.envPath);
|
|
172
|
+
const appId = (0, subscription_env_1.requireAppId)(env, { appId: opts.appId });
|
|
173
|
+
const subscriptionAppId = (0, subscription_env_1.requireSubscriptionAppId)(env, {
|
|
174
|
+
subscriptionAppId: opts.subscriptionAppId,
|
|
175
|
+
});
|
|
176
|
+
const probe = opts.probe ?? cluster_convergence_1.probeClusterRuntimes;
|
|
177
|
+
const observations = await probe({
|
|
178
|
+
gateway: opts.gateway,
|
|
179
|
+
appId,
|
|
180
|
+
authAppId: subscriptionAppId,
|
|
181
|
+
signer: (0, env_1.buildSignerFromEnv)(env),
|
|
182
|
+
});
|
|
183
|
+
return aggregateClusterStatus(observations);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
return {
|
|
187
|
+
observations: [],
|
|
188
|
+
aggregateRunning: false,
|
|
189
|
+
aggregateReason: `could not enumerate clusters: ${err.message}`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** Human-readable per-cluster breakdown + pessimistic aggregate. */
|
|
194
|
+
function renderPerClusterStatus(result) {
|
|
195
|
+
const lines = [' clusters:'];
|
|
196
|
+
for (const o of result.observations) {
|
|
197
|
+
const label = o.clusterId ?? o.ip;
|
|
198
|
+
if (!o.reachable) {
|
|
199
|
+
lines.push(` ${label}: UNREACHABLE (${o.error ?? 'no answer'})`);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const bits = [`runtimeState=${o.runtimeState ?? 'unknown'}`, `replicas=${o.replicas ?? 'unknown'}`];
|
|
203
|
+
if (o.lastError)
|
|
204
|
+
bits.push(`lastError=${o.lastError}`);
|
|
205
|
+
lines.push(` ${label}: ${bits.join(' ')}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (result.observations.length === 0) {
|
|
209
|
+
lines.push(' (none)');
|
|
210
|
+
}
|
|
211
|
+
const verdict = result.aggregateRunning ? 'RUNNING (all clusters agree)' : 'NOT CONFIRMED';
|
|
212
|
+
lines.push(` aggregate: ${verdict} — ${result.aggregateReason}`);
|
|
213
|
+
return lines.join('\n');
|
|
214
|
+
}
|
|
86
215
|
/** Human-readable one-block render of a status. */
|
|
87
216
|
function renderStatus(status) {
|
|
88
217
|
const lines = [
|
|
@@ -123,6 +252,9 @@ exports.statusCommand = new commander_1.Command('status')
|
|
|
123
252
|
.option('--subscription-app-id <id>', 'Subscription appId to authenticate as (else SUBSCRIPTION_APP_ID)')
|
|
124
253
|
.option('--watch', 'Poll until the runtime settles (RUNNING / FAILED)', false)
|
|
125
254
|
.option('--json', 'Print the raw status JSON', false)
|
|
255
|
+
.option('--skip-cluster-check', '#2927 — skip the honest per-cluster probe and report only whichever cluster the ' +
|
|
256
|
+
'round-robin gateway answered from (the pre-#2927 behavior). A skipped check can print ' +
|
|
257
|
+
'"RUNNING" while a third of the fleet silently serves nothing.', false)
|
|
126
258
|
.action(async (opts) => {
|
|
127
259
|
if (!opts.json)
|
|
128
260
|
console.log(chalk_1.default.bold.cyan('\n hsuite status\n'));
|
|
@@ -140,11 +272,27 @@ exports.statusCommand = new commander_1.Command('status')
|
|
|
140
272
|
console.error(chalk_1.default.red(`\n ✗ ${err.message}\n`));
|
|
141
273
|
process.exit(1);
|
|
142
274
|
}
|
|
275
|
+
// #2927 — the round-robin read above answers from WHICHEVER cluster the
|
|
276
|
+
// gateway happened to route to; it is not per-cluster truth. Ask every
|
|
277
|
+
// cluster directly and report honestly, unless explicitly skipped.
|
|
278
|
+
let perCluster;
|
|
279
|
+
if (!opts.skipClusterCheck) {
|
|
280
|
+
perCluster = await probeAllClusters({
|
|
281
|
+
envPath: opts.env,
|
|
282
|
+
gateway: opts.gateway,
|
|
283
|
+
appId: opts.appId,
|
|
284
|
+
subscriptionAppId: opts.subscriptionAppId,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
143
287
|
if (opts.json) {
|
|
144
|
-
process.stdout.write(JSON.stringify(status, null, 2) + '\n');
|
|
288
|
+
process.stdout.write(JSON.stringify(perCluster ? { ...status, perCluster } : status, null, 2) + '\n');
|
|
145
289
|
return;
|
|
146
290
|
}
|
|
147
291
|
console.log(renderStatus(status));
|
|
292
|
+
if (perCluster) {
|
|
293
|
+
console.log('');
|
|
294
|
+
console.log(renderPerClusterStatus(perCluster));
|
|
295
|
+
}
|
|
148
296
|
console.log('');
|
|
149
297
|
});
|
|
150
298
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|