@synteq/cli 0.1.3 → 0.1.4
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/api/client.d.ts +9 -9
- package/dist/api/client.js +200 -32
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +38 -41
- package/dist/commands/api.js +1 -1
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/catalog.js +1 -1
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/gpu/activity.d.ts +2 -2
- package/dist/commands/gpu/activity.js +5 -5
- package/dist/commands/gpu/activity.js.map +1 -1
- package/dist/commands/gpu/bandwidth.d.ts +2 -2
- package/dist/commands/gpu/bandwidth.js +5 -5
- package/dist/commands/gpu/bandwidth.js.map +1 -1
- package/dist/commands/gpu/boot-order.d.ts +2 -2
- package/dist/commands/gpu/boot-order.js +5 -5
- package/dist/commands/gpu/boot-order.js.map +1 -1
- package/dist/commands/gpu/console.d.ts +2 -2
- package/dist/commands/gpu/console.js +5 -5
- package/dist/commands/gpu/console.js.map +1 -1
- package/dist/commands/gpu/details.d.ts +2 -2
- package/dist/commands/gpu/details.js +5 -5
- package/dist/commands/gpu/details.js.map +1 -1
- package/dist/commands/gpu/ip/add.d.ts +2 -2
- package/dist/commands/gpu/ip/add.js +5 -5
- package/dist/commands/gpu/ip/add.js.map +1 -1
- package/dist/commands/gpu/ip/list.d.ts +2 -2
- package/dist/commands/gpu/ip/list.js +5 -5
- package/dist/commands/gpu/ip/list.js.map +1 -1
- package/dist/commands/gpu/list.d.ts +2 -2
- package/dist/commands/gpu/list.js +2 -2
- package/dist/commands/gpu/list.js.map +1 -1
- package/dist/commands/gpu/order.d.ts +2 -2
- package/dist/commands/gpu/order.js +2 -2
- package/dist/commands/gpu/order.js.map +1 -1
- package/dist/commands/gpu/power.d.ts +2 -2
- package/dist/commands/gpu/power.js +5 -5
- package/dist/commands/gpu/power.js.map +1 -1
- package/dist/commands/gpu/reinstall.d.ts +2 -2
- package/dist/commands/gpu/reinstall.js +5 -5
- package/dist/commands/gpu/reinstall.js.map +1 -1
- package/dist/commands/gpu/resize.d.ts +2 -2
- package/dist/commands/gpu/resize.js +5 -5
- package/dist/commands/gpu/resize.js.map +1 -1
- package/dist/commands/gpu/stats.d.ts +2 -2
- package/dist/commands/gpu/stats.js +5 -5
- package/dist/commands/gpu/stats.js.map +1 -1
- package/dist/commands/instant-metal/activity.d.ts +2 -2
- package/dist/commands/instant-metal/activity.js +5 -5
- package/dist/commands/instant-metal/activity.js.map +1 -1
- package/dist/commands/instant-metal/bandwidth.d.ts +2 -2
- package/dist/commands/instant-metal/bandwidth.js +5 -5
- package/dist/commands/instant-metal/bandwidth.js.map +1 -1
- package/dist/commands/instant-metal/boot-order.d.ts +2 -2
- package/dist/commands/instant-metal/boot-order.js +5 -5
- package/dist/commands/instant-metal/boot-order.js.map +1 -1
- package/dist/commands/instant-metal/console.d.ts +2 -2
- package/dist/commands/instant-metal/console.js +5 -5
- package/dist/commands/instant-metal/console.js.map +1 -1
- package/dist/commands/instant-metal/details.d.ts +2 -2
- package/dist/commands/instant-metal/details.js +5 -5
- package/dist/commands/instant-metal/details.js.map +1 -1
- package/dist/commands/instant-metal/ip/add.d.ts +2 -2
- package/dist/commands/instant-metal/ip/add.js +5 -5
- package/dist/commands/instant-metal/ip/add.js.map +1 -1
- package/dist/commands/instant-metal/ip/list.d.ts +2 -2
- package/dist/commands/instant-metal/ip/list.js +5 -5
- package/dist/commands/instant-metal/ip/list.js.map +1 -1
- package/dist/commands/instant-metal/list.d.ts +2 -2
- package/dist/commands/instant-metal/list.js +2 -2
- package/dist/commands/instant-metal/list.js.map +1 -1
- package/dist/commands/instant-metal/order.d.ts +2 -2
- package/dist/commands/instant-metal/order.js +2 -2
- package/dist/commands/instant-metal/order.js.map +1 -1
- package/dist/commands/instant-metal/power.d.ts +2 -2
- package/dist/commands/instant-metal/power.js +5 -5
- package/dist/commands/instant-metal/power.js.map +1 -1
- package/dist/commands/instant-metal/reinstall.d.ts +2 -2
- package/dist/commands/instant-metal/reinstall.js +5 -5
- package/dist/commands/instant-metal/reinstall.js.map +1 -1
- package/dist/commands/instant-metal/resize.d.ts +2 -2
- package/dist/commands/instant-metal/resize.js +5 -5
- package/dist/commands/instant-metal/resize.js.map +1 -1
- package/dist/commands/instant-metal/stats.d.ts +2 -2
- package/dist/commands/instant-metal/stats.js +5 -5
- package/dist/commands/instant-metal/stats.js.map +1 -1
- package/dist/commands/order/gpu.d.ts +2 -2
- package/dist/commands/order/gpu.js +2 -2
- package/dist/commands/order/gpu.js.map +1 -1
- package/dist/commands/order/instant-metal.d.ts +2 -2
- package/dist/commands/order/instant-metal.js +2 -2
- package/dist/commands/order/instant-metal.js.map +1 -1
- package/dist/commands/order/vps.d.ts +2 -2
- package/dist/commands/order/vps.js +2 -2
- package/dist/commands/order/vps.js.map +1 -1
- package/dist/commands/resources.js +5 -1
- package/dist/commands/resources.js.map +1 -1
- package/dist/commands/storage/attach.js +1 -1
- package/dist/commands/storage/attach.js.map +1 -1
- package/dist/commands/storage/order.js +6 -2
- package/dist/commands/storage/order.js.map +1 -1
- package/dist/commands/vds/activity.d.ts +2 -2
- package/dist/commands/vds/activity.js +5 -5
- package/dist/commands/vds/activity.js.map +1 -1
- package/dist/commands/vds/bandwidth.d.ts +2 -2
- package/dist/commands/vds/bandwidth.js +5 -5
- package/dist/commands/vds/bandwidth.js.map +1 -1
- package/dist/commands/vds/boot-order.d.ts +2 -2
- package/dist/commands/vds/boot-order.js +5 -5
- package/dist/commands/vds/boot-order.js.map +1 -1
- package/dist/commands/vds/console.d.ts +2 -2
- package/dist/commands/vds/console.js +5 -5
- package/dist/commands/vds/console.js.map +1 -1
- package/dist/commands/vds/details.d.ts +2 -2
- package/dist/commands/vds/details.js +5 -5
- package/dist/commands/vds/details.js.map +1 -1
- package/dist/commands/vds/ip/add.d.ts +2 -2
- package/dist/commands/vds/ip/add.js +5 -5
- package/dist/commands/vds/ip/add.js.map +1 -1
- package/dist/commands/vds/ip/list.d.ts +2 -2
- package/dist/commands/vds/ip/list.js +5 -5
- package/dist/commands/vds/ip/list.js.map +1 -1
- package/dist/commands/vds/list.d.ts +2 -2
- package/dist/commands/vds/list.js +2 -2
- package/dist/commands/vds/list.js.map +1 -1
- package/dist/commands/vds/order.d.ts +2 -2
- package/dist/commands/vds/order.js +2 -2
- package/dist/commands/vds/order.js.map +1 -1
- package/dist/commands/vds/power.d.ts +2 -2
- package/dist/commands/vds/power.js +5 -5
- package/dist/commands/vds/power.js.map +1 -1
- package/dist/commands/vds/reinstall.d.ts +2 -2
- package/dist/commands/vds/reinstall.js +5 -5
- package/dist/commands/vds/reinstall.js.map +1 -1
- package/dist/commands/vds/resize.d.ts +2 -2
- package/dist/commands/vds/resize.js +5 -5
- package/dist/commands/vds/resize.js.map +1 -1
- package/dist/commands/vds/stats.d.ts +2 -2
- package/dist/commands/vds/stats.js +5 -5
- package/dist/commands/vds/stats.js.map +1 -1
- package/dist/commands/vps/activity.d.ts +1 -1
- package/dist/commands/vps/activity.js +1 -1
- package/dist/commands/vps/activity.js.map +1 -1
- package/dist/commands/vps/bandwidth.d.ts +1 -1
- package/dist/commands/vps/bandwidth.js +1 -1
- package/dist/commands/vps/bandwidth.js.map +1 -1
- package/dist/commands/vps/boot-order.d.ts +1 -1
- package/dist/commands/vps/boot-order.js +1 -1
- package/dist/commands/vps/boot-order.js.map +1 -1
- package/dist/commands/vps/console.d.ts +1 -1
- package/dist/commands/vps/console.js +3 -3
- package/dist/commands/vps/console.js.map +1 -1
- package/dist/commands/vps/details.d.ts +1 -1
- package/dist/commands/vps/details.js +8 -8
- package/dist/commands/vps/details.js.map +1 -1
- package/dist/commands/vps/ip/add.d.ts +1 -1
- package/dist/commands/vps/ip/add.js +8 -8
- package/dist/commands/vps/ip/add.js.map +1 -1
- package/dist/commands/vps/ip/list.d.ts +1 -1
- package/dist/commands/vps/ip/list.js +4 -4
- package/dist/commands/vps/ip/list.js.map +1 -1
- package/dist/commands/vps/list.d.ts +1 -1
- package/dist/commands/vps/list.js +1 -1
- package/dist/commands/vps/list.js.map +1 -1
- package/dist/commands/vps/order.d.ts +7 -1
- package/dist/commands/vps/order.js +16 -9
- package/dist/commands/vps/order.js.map +1 -1
- package/dist/commands/vps/power.d.ts +1 -1
- package/dist/commands/vps/power.js +1 -1
- package/dist/commands/vps/power.js.map +1 -1
- package/dist/commands/vps/reinstall.d.ts +1 -1
- package/dist/commands/vps/reinstall.js +1 -1
- package/dist/commands/vps/reinstall.js.map +1 -1
- package/dist/commands/vps/resize.d.ts +7 -1
- package/dist/commands/vps/resize.js +52 -25
- package/dist/commands/vps/resize.js.map +1 -1
- package/dist/commands/vps/stats.d.ts +1 -1
- package/dist/commands/vps/stats.js +2 -2
- package/dist/commands/vps/stats.js.map +1 -1
- package/dist/tui/screens/Order.js +12 -14
- package/dist/tui/screens/Order.js.map +1 -1
- package/dist/tui/screens/Resources.js +7 -7
- package/dist/tui/screens/Resources.js.map +1 -1
- package/dist/ui/vps-detail.d.ts +3 -3
- package/dist/ui/vps-detail.js +1 -1
- package/dist/ui/vps-detail.js.map +1 -1
- package/dist/ui/vps-resolve.d.ts +2 -2
- package/dist/ui/vps-resolve.js +1 -1
- package/dist/ui/vps-resolve.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,15 +5,31 @@ import { confirmDestructive, yesRequiredMessage } from "../../ui/confirm.js";
|
|
|
5
5
|
import { isInteractive, panel, summary } from "../../ui/wizard.js";
|
|
6
6
|
import { ok, statusColor } from "../../ui/glyphs.js";
|
|
7
7
|
import { pickPayment } from "../../ui/payment.js";
|
|
8
|
-
|
|
8
|
+
/** Resolves the target RAM in GB from the `--ram` flag (already GB, no
|
|
9
|
+
* MB conversion) falling back to the seed spec's GB value. Exported
|
|
10
|
+
* standalone so the flag-parsing/unit contract has direct test coverage —
|
|
11
|
+
* a regression here (e.g. a reintroduced `* 1024`) would silently request
|
|
12
|
+
* 1024x too much RAM. */
|
|
13
|
+
export function resolveTargetRamGb(ramFlag, seedRamGb) {
|
|
14
|
+
return ramFlag !== undefined ? ramFlag : seedRamGb;
|
|
15
|
+
}
|
|
16
|
+
// Server serializes money as Decimal-string (per ResizeQuoteOut in
|
|
17
|
+
// backend/app/schemas/resize.py). Always parse before any arithmetic /
|
|
18
|
+
// .toFixed() call — a raw string.toFixed() crashes the CLI on every quote.
|
|
19
|
+
function money(v) {
|
|
20
|
+
if (v == null)
|
|
21
|
+
return 0;
|
|
22
|
+
const n = typeof v === "number" ? v : Number(v);
|
|
23
|
+
return Number.isFinite(n) ? n : 0;
|
|
24
|
+
}
|
|
25
|
+
export default class ResourceResize extends BaseCommand {
|
|
9
26
|
static description = [
|
|
10
|
-
"Resize a
|
|
27
|
+
"Resize a Resource (change CPU / RAM / disk / bandwidth in place).",
|
|
11
28
|
"",
|
|
12
29
|
"Shows a prorated quote first, then confirms before charging. Upsizes",
|
|
13
30
|
"charge the payment method immediately; downsizes issue a pro-rated",
|
|
14
31
|
"credit instead. Disk can only grow. On a TTY you get a y/N prompt;",
|
|
15
32
|
"when stdout is piped, pass --yes or the command exits 1 without acting.",
|
|
16
|
-
"Use `vps resize quote <id>` to preview the cost without charging.",
|
|
17
33
|
].join("\n");
|
|
18
34
|
static examples = [
|
|
19
35
|
"<%= config.bin %> vps resize 019e... --ram 8 --yes # bump RAM to 8 GB; keep CPU/disk",
|
|
@@ -23,7 +39,7 @@ export default class VpsResize extends BaseCommand {
|
|
|
23
39
|
];
|
|
24
40
|
static args = {
|
|
25
41
|
id: Args.string({
|
|
26
|
-
description: "
|
|
42
|
+
description: "Resource id (full or the short id from `vps list`), hostname, or IP.",
|
|
27
43
|
required: true,
|
|
28
44
|
}),
|
|
29
45
|
};
|
|
@@ -32,11 +48,11 @@ export default class VpsResize extends BaseCommand {
|
|
|
32
48
|
description: "Plan id from `synteq catalog` — seeds the target CPU/RAM/disk/bandwidth spec. Individual --cpu/--ram/--disk/--bandwidth flags override it.",
|
|
33
49
|
}),
|
|
34
50
|
cpu: Flags.integer({
|
|
35
|
-
description: "Target CPU cores (>=1). Defaults to the
|
|
51
|
+
description: "Target CPU cores (>=1). Defaults to the Resource's current cores.",
|
|
36
52
|
min: 1,
|
|
37
53
|
}),
|
|
38
54
|
ram: Flags.integer({
|
|
39
|
-
description: "Target RAM in GB (>=1). Defaults to the
|
|
55
|
+
description: "Target RAM in GB (>=1). Defaults to the Resource's current RAM.",
|
|
40
56
|
min: 1,
|
|
41
57
|
}),
|
|
42
58
|
disk: Flags.integer({
|
|
@@ -71,7 +87,7 @@ export default class VpsResize extends BaseCommand {
|
|
|
71
87
|
const target = await this.buildTargetSpec(vps, flags);
|
|
72
88
|
const quote = await this.clients.api.vpsControl.resizeQuote(vpsId, {
|
|
73
89
|
cpu_cores: target.cpu_cores,
|
|
74
|
-
|
|
90
|
+
ram_gb: target.ram_gb,
|
|
75
91
|
disk_gb: target.disk_gb,
|
|
76
92
|
bandwidth_tb: target.bandwidth_tb,
|
|
77
93
|
dedicated: target.dedicated,
|
|
@@ -89,7 +105,7 @@ export default class VpsResize extends BaseCommand {
|
|
|
89
105
|
const isUpsize = quote.action === "charge";
|
|
90
106
|
const isDownsize = quote.action === "credit" || quote.action === "defer";
|
|
91
107
|
const restartNote = quote.restart_required
|
|
92
|
-
? " This
|
|
108
|
+
? " This Resource is running and the change stages CPU/RAM until the next power-cycle."
|
|
93
109
|
: "";
|
|
94
110
|
let payment;
|
|
95
111
|
if (isUpsize) {
|
|
@@ -98,7 +114,7 @@ export default class VpsResize extends BaseCommand {
|
|
|
98
114
|
tokens: this.clients.tokens,
|
|
99
115
|
config: this.clients.config,
|
|
100
116
|
flow: "vps_addon",
|
|
101
|
-
estimatedCost: quote.prorated_amount,
|
|
117
|
+
estimatedCost: money(quote.prorated_amount),
|
|
102
118
|
prefill: {
|
|
103
119
|
paymentMethodId: flags["payment-method"],
|
|
104
120
|
applyCredits: flags["apply-credits"],
|
|
@@ -111,24 +127,26 @@ export default class VpsResize extends BaseCommand {
|
|
|
111
127
|
if (!isInteractive()) {
|
|
112
128
|
this.error(yesRequiredMessage("`vps resize`"), { exit: 1 });
|
|
113
129
|
}
|
|
130
|
+
const prorated = money(quote.prorated_amount);
|
|
131
|
+
const newMonthly = money(quote.new_monthly_price);
|
|
114
132
|
const priceLine = isUpsize
|
|
115
|
-
? `Charge ~$${Math.abs(
|
|
133
|
+
? `Charge ~$${Math.abs(prorated).toFixed(2)} now (new monthly $${newMonthly.toFixed(2)})`
|
|
116
134
|
: isDownsize
|
|
117
135
|
? quote.action === "defer"
|
|
118
|
-
? `No charge now — the lower monthly $${
|
|
119
|
-
: `Issue ~$${Math.abs(
|
|
136
|
+
? `No charge now — the lower monthly $${newMonthly.toFixed(2)} applies at renewal`
|
|
137
|
+
: `Issue ~$${Math.abs(prorated).toFixed(2)} credit (new monthly $${newMonthly.toFixed(2)})`
|
|
120
138
|
: `No charge (spec/bandwidth tweak)`;
|
|
121
139
|
const outcome = await confirmDestructive({
|
|
122
140
|
message: `Resize ${vps.hostname}? ${priceLine}.${restartNote}`,
|
|
123
141
|
});
|
|
124
142
|
if (outcome !== "confirmed") {
|
|
125
|
-
this.log("Aborted —
|
|
143
|
+
this.log("Aborted — Resource left unchanged.");
|
|
126
144
|
return;
|
|
127
145
|
}
|
|
128
146
|
}
|
|
129
147
|
const body = {
|
|
130
148
|
cpu_cores: target.cpu_cores,
|
|
131
|
-
|
|
149
|
+
ram_gb: target.ram_gb,
|
|
132
150
|
disk_gb: target.disk_gb,
|
|
133
151
|
bandwidth_tb: target.bandwidth_tb,
|
|
134
152
|
dedicated: target.dedicated,
|
|
@@ -147,7 +165,7 @@ export default class VpsResize extends BaseCommand {
|
|
|
147
165
|
]));
|
|
148
166
|
if (result.status === "succeeded") {
|
|
149
167
|
this.log(ok(quote.restart_required
|
|
150
|
-
? "Resize applied — power-cycle the
|
|
168
|
+
? "Resize applied — power-cycle the Resource to activate the new CPU/RAM."
|
|
151
169
|
: "Resize applied."));
|
|
152
170
|
}
|
|
153
171
|
});
|
|
@@ -158,7 +176,7 @@ export default class VpsResize extends BaseCommand {
|
|
|
158
176
|
}
|
|
159
177
|
async buildTargetSpec(vps, flags) {
|
|
160
178
|
let seedCpu = vps.plan?.cpu_cores ?? 0;
|
|
161
|
-
let
|
|
179
|
+
let seedRamGb = vps.plan?.ram_gb ?? 0;
|
|
162
180
|
let seedDisk = vps.plan?.disk_gb ?? 0;
|
|
163
181
|
if (flags.plan) {
|
|
164
182
|
const catalog = await this.clients.api.vpsOrders.catalog();
|
|
@@ -166,36 +184,45 @@ export default class VpsResize extends BaseCommand {
|
|
|
166
184
|
if (!plan) {
|
|
167
185
|
this.error(`Plan ${flags.plan} not found in the catalog. Run \`synteq vps catalog\`.`, { exit: 1 });
|
|
168
186
|
}
|
|
187
|
+
// Reject a plan from the wrong product family. Without this,
|
|
188
|
+
// passing e.g. a VPS plan id to `vds resize --plan` silently
|
|
189
|
+
// reprices the VDS at the VPS shape when the numbers happen to
|
|
190
|
+
// match a VDS tier — a hard-to-notice bill/spec drift.
|
|
191
|
+
const resourceKind = vps.kind ?? vps.plan?.kind;
|
|
192
|
+
if (resourceKind && plan.kind && resourceKind !== plan.kind) {
|
|
193
|
+
this.error(`Plan ${flags.plan} is a ${plan.kind} plan, but this resource is a ${resourceKind}. ` +
|
|
194
|
+
`Pick a ${resourceKind} plan from \`synteq catalog --kind ${resourceKind}\`.`, { exit: 1 });
|
|
195
|
+
}
|
|
169
196
|
seedCpu = plan.cpu_cores;
|
|
170
|
-
|
|
197
|
+
seedRamGb = plan.ram_gb;
|
|
171
198
|
seedDisk = plan.disk_gb;
|
|
172
199
|
}
|
|
173
200
|
const cpu = flags.cpu ?? seedCpu;
|
|
174
|
-
const
|
|
201
|
+
const ramGb = resolveTargetRamGb(flags.ram, seedRamGb);
|
|
175
202
|
const disk = flags.disk ?? seedDisk;
|
|
176
|
-
if (cpu < 1 ||
|
|
203
|
+
if (cpu < 1 || ramGb < 1 || disk < 1) {
|
|
177
204
|
this.error("Could not resolve a full target spec. Pass --plan or all of --cpu/--ram/--disk.", { exit: 1 });
|
|
178
205
|
}
|
|
179
206
|
return {
|
|
180
207
|
cpu_cores: cpu,
|
|
181
|
-
|
|
208
|
+
ram_gb: ramGb,
|
|
182
209
|
disk_gb: disk,
|
|
183
210
|
bandwidth_tb: flags.bandwidth,
|
|
184
211
|
dedicated: flags.dedicated === undefined ? null : flags.dedicated,
|
|
185
212
|
};
|
|
186
213
|
}
|
|
187
214
|
quoteRows(vps, q) {
|
|
188
|
-
const specStr = (s) => `${s.cpu_cores} vCPU · ${
|
|
215
|
+
const specStr = (s) => `${s.cpu_cores} vCPU · ${s.ram_gb} GB RAM · ${s.disk_gb} GB disk${s.dedicated ? " · dedicated" : ""}`;
|
|
189
216
|
return [
|
|
190
|
-
["
|
|
217
|
+
["Resource", `${vps.hostname} (${vps.status})`],
|
|
191
218
|
["Current", specStr(q.current_spec)],
|
|
192
219
|
["Requested", specStr(q.requested_spec)],
|
|
193
220
|
["Action", q.action],
|
|
194
|
-
["Current monthly", `$${q.current_monthly_price.toFixed(2)}`],
|
|
195
|
-
["New monthly", `$${q.new_monthly_price.toFixed(2)}`],
|
|
221
|
+
["Current monthly", `$${money(q.current_monthly_price).toFixed(2)}`],
|
|
222
|
+
["New monthly", `$${money(q.new_monthly_price).toFixed(2)}`],
|
|
196
223
|
[
|
|
197
224
|
q.action === "credit" ? "Credit today" : "Charge today",
|
|
198
|
-
`$${Math.abs(q.prorated_amount).toFixed(2)}`,
|
|
225
|
+
`$${Math.abs(money(q.prorated_amount)).toFixed(2)}`,
|
|
199
226
|
],
|
|
200
227
|
["Restart required", q.restart_required ? "yes (power-cycle to apply CPU/RAM)" : undefined],
|
|
201
228
|
["In stock", q.in_stock ? undefined : `no — ${q.out_of_stock_reason ?? "capacity"}`],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/commands/vps/resize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,CAAC,OAAO,OAAO,
|
|
1
|
+
{"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/commands/vps/resize.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@ import { panel } from "../../ui/wizard.js";
|
|
|
5
5
|
import { statusColor } from "../../ui/glyphs.js";
|
|
6
6
|
import { sparkline } from "../../ui/sparkline.js";
|
|
7
7
|
import { asPoints, formatCpu, formatRate, formatUptime, formatUsagePair, numOrNull, pickLatestPoint, } from "../../ui/stats.js";
|
|
8
|
-
export default class
|
|
8
|
+
export default class ResourceStats extends BaseCommand {
|
|
9
9
|
static description = [
|
|
10
10
|
"Show live CPU / memory / disk / uptime + network I/O for a VPS.",
|
|
11
11
|
"",
|
|
12
12
|
"Read-only. On a TTY it renders a compact readout with CPU and",
|
|
13
|
-
"network sparklines; `-o json` returns the raw
|
|
13
|
+
"network sparklines; `-o json` returns the raw metrics payload.",
|
|
14
14
|
].join("\n");
|
|
15
15
|
static examples = [
|
|
16
16
|
"<%= config.bin %> vps stats 019e...",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/vps/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,OAAO,OAAO,
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/vps/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -387,7 +387,7 @@ function planRowLabel(p) {
|
|
|
387
387
|
}
|
|
388
388
|
function planRowHint(p) {
|
|
389
389
|
const cores = `${p.cpu_cores}c`;
|
|
390
|
-
const ram = `${
|
|
390
|
+
const ram = `${p.ram_gb}G`;
|
|
391
391
|
const disk = `${p.disk_gb}G`;
|
|
392
392
|
const extra = p.gpu_model ? ` · ${p.gpu_model}` : "";
|
|
393
393
|
return `${cores} ${ram} ${disk}${extra}`;
|
|
@@ -404,8 +404,7 @@ function VpsSpecFieldsStep({ customConfig, locations, userEmail, draft, setDraft
|
|
|
404
404
|
const dedicated = Boolean(draft.customSpec._dedicated);
|
|
405
405
|
const baseCfg = dedicated ? customConfig.dedicated : customConfig;
|
|
406
406
|
const initialCpu = draft.customSpec.cpu_cores ?? baseCfg.cpu_min;
|
|
407
|
-
const initialRamGb =
|
|
408
|
-
customConfig.ram_min_gb;
|
|
407
|
+
const initialRamGb = draft.customSpec.ram_gb ?? customConfig.ram_min_gb;
|
|
409
408
|
const initialDisk = draft.customSpec.disk_gb ?? customConfig.disk_min_gb;
|
|
410
409
|
const initialBw = draft.customSpec.bandwidth_tb ?? customConfig.bandwidth_min_tb;
|
|
411
410
|
const [cpu, setCpu] = useState(String(initialCpu));
|
|
@@ -437,7 +436,7 @@ function VpsSpecFieldsStep({ customConfig, locations, userEmail, draft, setDraft
|
|
|
437
436
|
api.vpsOrders
|
|
438
437
|
.customAvailability({
|
|
439
438
|
cpu_cores: cpuN,
|
|
440
|
-
|
|
439
|
+
ram_gb: ramN,
|
|
441
440
|
disk_gb: diskN,
|
|
442
441
|
location_id: loc.id,
|
|
443
442
|
dedicated,
|
|
@@ -463,7 +462,7 @@ function VpsSpecFieldsStep({ customConfig, locations, userEmail, draft, setDraft
|
|
|
463
462
|
customSpec: {
|
|
464
463
|
...d.customSpec,
|
|
465
464
|
cpu_cores: d.customSpec.cpu_cores ?? initialCpu,
|
|
466
|
-
|
|
465
|
+
ram_gb: d.customSpec.ram_gb ?? initialRamGb,
|
|
467
466
|
disk_gb: d.customSpec.disk_gb ?? initialDisk,
|
|
468
467
|
bandwidth_tb: d.customSpec.bandwidth_tb ?? initialBw,
|
|
469
468
|
},
|
|
@@ -511,7 +510,7 @@ function VpsSpecFieldsStep({ customConfig, locations, userEmail, draft, setDraft
|
|
|
511
510
|
customSpec: {
|
|
512
511
|
...d.customSpec,
|
|
513
512
|
cpu_cores: Number(cpu),
|
|
514
|
-
|
|
513
|
+
ram_gb: Number(ramGb),
|
|
515
514
|
disk_gb: Number(disk),
|
|
516
515
|
bandwidth_tb: Number(bw),
|
|
517
516
|
},
|
|
@@ -604,7 +603,7 @@ function VpsSpecFieldsStep({ customConfig, locations, userEmail, draft, setDraft
|
|
|
604
603
|
React.createElement(Box, { marginTop: 1 }),
|
|
605
604
|
React.createElement(NumberInput, { label: "CPU cores", value: cpu, onChange: (v) => liveSet(v, setCpu, (n) => ({ cpu_cores: n })), onSubmit: () => setSpecRow(2), min: cpuMin, max: cpuMax, step: cpuStep, unit: "vCPU", focused: specFocused && specRow === 1 }),
|
|
606
605
|
React.createElement(Box, { marginTop: 1 }),
|
|
607
|
-
React.createElement(NumberInput, { label: "RAM", value: ramGb, onChange: (v) => liveSet(v, setRamGb, (n) => ({
|
|
606
|
+
React.createElement(NumberInput, { label: "RAM", value: ramGb, onChange: (v) => liveSet(v, setRamGb, (n) => ({ ram_gb: n })), onSubmit: () => setSpecRow(3), min: ramMin, max: ramMax, step: ramStep, unit: "GB", focused: specFocused && specRow === 2 }),
|
|
608
607
|
React.createElement(Box, { marginTop: 1 }),
|
|
609
608
|
React.createElement(NumberInput, { label: "Disk", value: disk, onChange: (v) => liveSet(v, setDisk, (n) => ({ disk_gb: n })), onSubmit: () => setSpecRow(4), min: diskMin, max: diskMax, step: diskStep, unit: "GB NVMe", focused: specFocused && specRow === 3 }),
|
|
610
609
|
React.createElement(Box, { marginTop: 1 }),
|
|
@@ -990,9 +989,9 @@ function SummaryStep({ draft, cat, onSubmit, onEdit, }) {
|
|
|
990
989
|
const plan = cat.orderCatalog?.plans.find((p) => p.id === draft.planId);
|
|
991
990
|
const chosenPm = cat.paymentMethods.find((m) => m.id === draft.paymentMethodId);
|
|
992
991
|
const specLine = draft.kind === "vps"
|
|
993
|
-
? `${draft.customSpec.cpu_cores ?? "?"} vCPU · ${
|
|
992
|
+
? `${draft.customSpec.cpu_cores ?? "?"} vCPU · ${draft.customSpec.ram_gb ?? 0} GB RAM · ${draft.customSpec.disk_gb ?? "?"} GB disk${draft.customSpec.bandwidth_tb ? ` · ${draft.customSpec.bandwidth_tb} TB BW` : ""}${draft.customSpec._dedicated ? " · dedicated" : ""}`
|
|
994
993
|
: plan
|
|
995
|
-
? `${plan.name} — ${plan.cpu_cores}c ${
|
|
994
|
+
? `${plan.name} — ${plan.cpu_cores}c ${plan.ram_gb}G ${plan.disk_gb}G${plan.gpu_model ? ` · ${plan.gpu_model}` : ""}`
|
|
996
995
|
: undefined;
|
|
997
996
|
const paymentLabel = (() => {
|
|
998
997
|
const parts = [];
|
|
@@ -1102,11 +1101,11 @@ function tipForStep(step, draft, cancelConfirm) {
|
|
|
1102
1101
|
}
|
|
1103
1102
|
}
|
|
1104
1103
|
function buildCustomSpec(s) {
|
|
1105
|
-
if (!s.cpu_cores || !s.
|
|
1104
|
+
if (!s.cpu_cores || !s.ram_gb || !s.disk_gb)
|
|
1106
1105
|
return undefined;
|
|
1107
1106
|
return {
|
|
1108
1107
|
cpu_cores: s.cpu_cores,
|
|
1109
|
-
|
|
1108
|
+
ram_gb: s.ram_gb,
|
|
1110
1109
|
disk_gb: s.disk_gb,
|
|
1111
1110
|
bandwidth_tb: s.bandwidth_tb,
|
|
1112
1111
|
dedicated: s._dedicated,
|
|
@@ -1136,10 +1135,9 @@ function estimateMonthlyCost(draft, cat) {
|
|
|
1136
1135
|
const cfg = cat.orderCatalog.custom_config;
|
|
1137
1136
|
const baseCfg = draft.customSpec._dedicated ? cfg.dedicated : cfg;
|
|
1138
1137
|
const cpu = draft.customSpec.cpu_cores;
|
|
1139
|
-
const
|
|
1138
|
+
const ramGb = draft.customSpec.ram_gb;
|
|
1140
1139
|
const disk = draft.customSpec.disk_gb;
|
|
1141
|
-
if (cpu &&
|
|
1142
|
-
const ramGb = ramMb / 1024;
|
|
1140
|
+
if (cpu && ramGb && disk) {
|
|
1143
1141
|
const bwTb = draft.customSpec.bandwidth_tb ?? cfg.bandwidth_included_tb;
|
|
1144
1142
|
const extraTb = Math.max(0, bwTb - cfg.bandwidth_included_tb);
|
|
1145
1143
|
const amount = baseCfg.base_price +
|