@lizard-build/cli 0.3.47 → 0.3.48
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/metrics.js +124 -2
- package/dist/commands/metrics.js.map +1 -1
- package/dist/lib/updater.d.ts +1 -1
- package/dist/lib/updater.js +1 -1
- package/package.json +1 -1
- package/src/commands/metrics.ts +182 -2
- package/src/lib/updater.ts +1 -1
package/dist/commands/metrics.js
CHANGED
|
@@ -12,7 +12,7 @@ export function registerMetrics(program) {
|
|
|
12
12
|
.option("-p, --project <id>", "Project name, slug, or ID")
|
|
13
13
|
.option("-r, --range <range>", `Time range: ${RANGES.join("|")}`, "1h")
|
|
14
14
|
.option("-w, --watch", "Live view, refreshed every 3s (Ctrl+C to stop)")
|
|
15
|
-
.option("--cost", "Show running resources
|
|
15
|
+
.option("--cost", "Show running resources, cost per hour, and current billing-period usage (incl. egress)")
|
|
16
16
|
.action(async (opts) => {
|
|
17
17
|
if (!RANGES.includes(opts.range)) {
|
|
18
18
|
error(`Invalid --range "${opts.range}". Choose one of: ${RANGES.join(", ")}`);
|
|
@@ -231,14 +231,116 @@ async function watchLive(projectId, scope, serviceId) {
|
|
|
231
231
|
await new Promise((r) => setTimeout(r, 3000));
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
|
+
const HOUR_MS = 3_600_000;
|
|
235
|
+
// Object storage is priced per GB/month on a 30-day basis (matches the backend).
|
|
236
|
+
const OBJECT_MONTH_SECONDS = 2_592_000;
|
|
237
|
+
// Current-period usage and cost, mirroring the web Usage page
|
|
238
|
+
// (ProjectUsageView's resource breakdown): quantities × prices straight from
|
|
239
|
+
// /api/billing/summary; CPU/memory/volumes estimates ride the project's
|
|
240
|
+
// current measured rates, while egress and object storage — cumulative
|
|
241
|
+
// throughput with no steady-state hourly rate — extrapolate linearly from
|
|
242
|
+
// usage so far. The extrapolation anchor is the later of the billing-period
|
|
243
|
+
// start and the oldest service's createdAt, so a mid-period project's burst
|
|
244
|
+
// isn't smeared across time it didn't exist. A frozen workspace accrues
|
|
245
|
+
// nothing — estimates collapse to the actuals.
|
|
246
|
+
async function fetchPeriodUsage(projectId, workspaceId) {
|
|
247
|
+
const [summaryR, servicesR, accountR] = await Promise.allSettled([
|
|
248
|
+
api.get(withQuery("/api/billing/summary", { workspaceId })),
|
|
249
|
+
api.get(withScope(`/api/projects/${projectId}/services`, { workspaceId })),
|
|
250
|
+
api.get(withQuery("/api/billing/account", { workspaceId })),
|
|
251
|
+
]);
|
|
252
|
+
if (summaryR.status !== "fulfilled")
|
|
253
|
+
return null;
|
|
254
|
+
const summary = summaryR.value;
|
|
255
|
+
const mine = summary.projects?.find((p) => p.projectId === projectId);
|
|
256
|
+
const prices = summary.prices;
|
|
257
|
+
if (!mine || !prices)
|
|
258
|
+
return null;
|
|
259
|
+
const isFrozen = accountR.status === "fulfilled" && accountR.value.status === "frozen";
|
|
260
|
+
const now = Date.now();
|
|
261
|
+
const remainingHours = isFrozen ? 0 : Math.max(0, (summary.periodEnd - now) / HOUR_MS);
|
|
262
|
+
const services = servicesR.status === "fulfilled" ? servicesR.value : {};
|
|
263
|
+
const createdAts = [...(services.apps ?? []), ...(services.addons ?? [])]
|
|
264
|
+
.map((s) => s.createdAt)
|
|
265
|
+
.filter((t) => typeof t === "number" && t > 0);
|
|
266
|
+
const projectStart = createdAts.length > 0 ? Math.min(...createdAts) : summary.periodStart;
|
|
267
|
+
const throughputStart = Math.max(summary.periodStart, projectStart);
|
|
268
|
+
const elapsedHrs = Math.max(0.001, (now - throughputStart) / HOUR_MS);
|
|
269
|
+
const monthHrs = Math.max(elapsedHrs, (summary.periodEnd - summary.periodStart) / HOUR_MS);
|
|
270
|
+
const linearFactor = isFrozen ? 1 : monthHrs / elapsedHrs;
|
|
271
|
+
const avgs = summary.currentAvgsByProject?.[projectId];
|
|
272
|
+
const cpuCost = (mine.cpuVcpuSeconds ?? 0) * prices.cpuPerVcpuPerSec;
|
|
273
|
+
const memCost = (mine.memoryGbSeconds ?? 0) * prices.memoryPerGbPerSec;
|
|
274
|
+
const volCost = (mine.storageGbSeconds ?? 0) * prices.storagePerGbPerSec;
|
|
275
|
+
const egressGb = (mine.egressBytes ?? 0) / 1e9;
|
|
276
|
+
const egressCost = egressGb * prices.egressPerGb;
|
|
277
|
+
const objCost = ((mine.objectStorageGbSeconds ?? 0) / OBJECT_MONTH_SECONDS) * (prices.objectStoragePerGbMonth ?? 0);
|
|
278
|
+
const allRows = [
|
|
279
|
+
{
|
|
280
|
+
key: "cpu",
|
|
281
|
+
label: "CPU",
|
|
282
|
+
usage: (mine.cpuVcpuSeconds ?? 0) / 3600,
|
|
283
|
+
usageUnit: "vCPU·hr",
|
|
284
|
+
costUsd: cpuCost,
|
|
285
|
+
estimatedUsd: cpuCost + (avgs?.vcpu ?? 0) * prices.cpuPerVcpuPerSec * 3600 * remainingHours,
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
key: "memory",
|
|
289
|
+
label: "Memory",
|
|
290
|
+
usage: (mine.memoryGbSeconds ?? 0) / 3600,
|
|
291
|
+
usageUnit: "GB·hr",
|
|
292
|
+
costUsd: memCost,
|
|
293
|
+
estimatedUsd: memCost + (avgs?.memGb ?? 0) * prices.memoryPerGbPerSec * 3600 * remainingHours,
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
key: "volumes",
|
|
297
|
+
label: "Volumes",
|
|
298
|
+
usage: (mine.storageGbSeconds ?? 0) / 3600,
|
|
299
|
+
usageUnit: "GB·hr",
|
|
300
|
+
costUsd: volCost,
|
|
301
|
+
estimatedUsd: volCost + (avgs?.storageGb ?? 0) * prices.storagePerGbPerSec * 3600 * remainingHours,
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
key: "egress",
|
|
305
|
+
label: "Egress",
|
|
306
|
+
usage: egressGb,
|
|
307
|
+
usageUnit: "GB",
|
|
308
|
+
costUsd: egressCost,
|
|
309
|
+
estimatedUsd: egressCost > 0 ? egressCost * linearFactor : 0,
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
key: "object",
|
|
313
|
+
label: "Object Storage",
|
|
314
|
+
usage: (mine.objectStorageGbSeconds ?? 0) / 3600,
|
|
315
|
+
usageUnit: "GB·hr",
|
|
316
|
+
costUsd: objCost,
|
|
317
|
+
estimatedUsd: objCost > 0 ? objCost * linearFactor : 0,
|
|
318
|
+
},
|
|
319
|
+
];
|
|
320
|
+
const rows = allRows.filter((r) => r.key === "object" || r.costUsd > 0 || r.usage > 0);
|
|
321
|
+
return {
|
|
322
|
+
periodStart: summary.periodStart,
|
|
323
|
+
periodEnd: summary.periodEnd,
|
|
324
|
+
rows,
|
|
325
|
+
totalCostUsd: rows.reduce((s, r) => s + r.costUsd, 0),
|
|
326
|
+
totalEstimatedUsd: rows.reduce((s, r) => s + r.estimatedUsd, 0),
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function fmtPeriodDate(ms) {
|
|
330
|
+
return new Date(ms).toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
|
331
|
+
}
|
|
234
332
|
async function showCost(projectId, scope) {
|
|
235
333
|
if (!scope.workspaceId) {
|
|
236
334
|
error("Could not resolve the workspace for this project. Run `lizard link` first.");
|
|
237
335
|
process.exit(1);
|
|
238
336
|
}
|
|
239
337
|
let data;
|
|
338
|
+
let usage;
|
|
240
339
|
try {
|
|
241
|
-
data = await
|
|
340
|
+
[data, usage] = await Promise.all([
|
|
341
|
+
api.get(withQuery("/api/billing/live", { workspaceId: scope.workspaceId })),
|
|
342
|
+
fetchPeriodUsage(projectId, scope.workspaceId),
|
|
343
|
+
]);
|
|
242
344
|
}
|
|
243
345
|
catch (e) {
|
|
244
346
|
if (e instanceof APIError && e.status === 403) {
|
|
@@ -255,6 +357,7 @@ async function showCost(projectId, scope) {
|
|
|
255
357
|
resources: mine,
|
|
256
358
|
projectCostPerHour: projectCost,
|
|
257
359
|
workspaceCostPerHour: data.costPerHour,
|
|
360
|
+
currentPeriod: usage,
|
|
258
361
|
});
|
|
259
362
|
return;
|
|
260
363
|
}
|
|
@@ -276,5 +379,24 @@ async function showCost(projectId, scope) {
|
|
|
276
379
|
chalk.dim(` (~$${(projectCost * 730).toFixed(2)}/mo at current usage)`));
|
|
277
380
|
}
|
|
278
381
|
console.log(chalk.dim("Workspace ") + `$${data.costPerHour.toFixed(4)}/hr`);
|
|
382
|
+
if (usage && usage.rows.length > 0) {
|
|
383
|
+
console.log();
|
|
384
|
+
console.log(chalk.bold("This billing period") +
|
|
385
|
+
chalk.dim(` (${fmtPeriodDate(usage.periodStart)} – ${fmtPeriodDate(usage.periodEnd)})`));
|
|
386
|
+
table(["Resource", "Usage", "Cost so far", "Est. period total"], [
|
|
387
|
+
...usage.rows.map((r) => [
|
|
388
|
+
r.label,
|
|
389
|
+
`${r.usage.toFixed(2)} ${r.usageUnit}`,
|
|
390
|
+
`$${r.costUsd.toFixed(4)}`,
|
|
391
|
+
`$${r.estimatedUsd.toFixed(2)}`,
|
|
392
|
+
]),
|
|
393
|
+
[
|
|
394
|
+
chalk.bold("Total"),
|
|
395
|
+
"",
|
|
396
|
+
chalk.bold(`$${usage.totalCostUsd.toFixed(4)}`),
|
|
397
|
+
chalk.bold(`$${usage.totalEstimatedUsd.toFixed(2)}`),
|
|
398
|
+
],
|
|
399
|
+
]);
|
|
400
|
+
}
|
|
279
401
|
}
|
|
280
402
|
//# sourceMappingURL=metrics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AA+BtF,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEvD,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,oBAAoB,EAAE,iDAAiD,CAAC;SAC/E,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;SACtE,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,6DAA6D,CAAC;SAC/E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,oBAAoB,IAAI,CAAC,KAAK,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE,EAAE,CAAC;YAC/B,KAAK,CAAC,0FAA0F,CAAC,CAAC;YAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,oEAAoE;QACpE,+CAA+C;QAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,EAAE,SAAS,CAAC,CAAC;QAExE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,SAA6B,CAAC;YAClC,IAAI,UAAU,EAAE,CAAC;gBACf,SAAS,GAAG,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,CAAC;YACD,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,MAAM,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,6EAA6E;AAE7E,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACtC,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACxE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACrD,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,QAAQ,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,4EAA4E;AAC5E,SAAS,SAAS,CAAC,MAAgB,EAAE,KAAK,GAAG,EAAE;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC1B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACjC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SAClG,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,MAAoB,EAAE,IAAY;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;AAC7D,CAAC;AAUD;oEACoE;AACpE,SAAS,KAAK,CAAC,MAAgB,EAAE,MAAM,GAAG,KAAK;IAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM;QAClD,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC;AAED,6EAA6E;AAE7E,KAAK,UAAU,mBAAmB,CAChC,GAA0C,EAC1C,SAAiB,EACjB,KAAoB,EACpB,KAAa;IAEb,MAAM,IAAI,GACR,GAAG,CAAC,IAAI,KAAK,KAAK;QAChB,CAAC,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC;QACrD,CAAC,CAAC,SAAS,CACP,SAAS,CAAC,iBAAiB,SAAS,WAAW,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAC3E,KAAK,CACN,CAAC;IACR,OAAO,GAAG,CAAC,GAAG,CAAsB,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,WAA+B,EAC/B,SAAiB,EACjB,KAAoB,EACpB,KAAa;IAEb,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAErE,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,IAAI,2CAA2C,CAAC,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,YAAY,KAAK,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,CACX,KAAa,EACb,CAAqB,EACrB,GAA0B,EAC1B,GAAmB,EACnB,EAAE;QACF,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC;YACR,KAAK;YACL,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;YACzE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACV,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACV,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAChC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,qEAAqE;IACrE,uCAAuC;IACvC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnF,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAEhC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,yDAAyD;QACzD,KAAK,CACH,CAAC,QAAQ,EAAE,KAAK,CAAC,EACjB;YACE,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;SACvE,CACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;QACtB,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CACxH,CAAC;AACJ,CAAC;AAED,6EAA6E;AAE7E,KAAK,UAAU,SAAS,CAAC,SAAiB,EAAE,KAAoB;IAC9D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CACxB,SAAS,CAAC,SAAS,CAAC,iBAAiB,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAClF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,YAAY,CAAC,QAAgC;IACpD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAC3C,OAAO;YACL,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YACpE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1F,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;SAC9D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAiB,EAAE,KAAoB;IACxE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEnD,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,6EAA6E;AAE7E,KAAK,UAAU,SAAS,CAAC,SAAiB,EAAE,KAAoB,EAAE,SAAkB;IAClF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACxD,qEAAqE;IACrE,wBAAwB;IACxB,SAAS,CAAC;QACR,IAAI,QAAgC,CAAC;QACrC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,SAAS;YAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAErE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,4BAA4B;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAC9G,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAeD,KAAK,UAAU,QAAQ,CAAC,SAAiB,EAAE,KAAoB;IAC7D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,CAAC,4EAA4E,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAA2D,CAAC;IAChE,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC9C,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEhE,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,SAAS,CAAC;YACR,SAAS;YACT,SAAS,EAAE,IAAI;YACf,kBAAkB,EAAE,WAAW;YAC/B,oBAAoB,EAAE,IAAI,CAAC,WAAW;SACvC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,KAAK,CACH,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EACzD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACd,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/C,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YACf,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC7B,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YACtD,IAAI,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;SAC/B,CAAC,CACH,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;YACrB,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/updater.d.ts
CHANGED
package/dist/lib/updater.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Readable } from "node:stream";
|
|
|
4
4
|
import { join, dirname } from "node:path";
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
7
|
-
export const CURRENT_VERSION = "0.3.
|
|
7
|
+
export const CURRENT_VERSION = "0.3.48";
|
|
8
8
|
const RELEASES_API = "https://api.github.com/repos/lizard-build/lizard-cli/releases/latest";
|
|
9
9
|
const RELEASE_BASE = "https://github.com/lizard-build/lizard-cli/releases/latest/download";
|
|
10
10
|
/** Minimum gap between background update checks. */
|
package/package.json
CHANGED
package/src/commands/metrics.ts
CHANGED
|
@@ -44,7 +44,7 @@ export function registerMetrics(program: Command) {
|
|
|
44
44
|
.option("-p, --project <id>", "Project name, slug, or ID")
|
|
45
45
|
.option("-r, --range <range>", `Time range: ${RANGES.join("|")}`, "1h")
|
|
46
46
|
.option("-w, --watch", "Live view, refreshed every 3s (Ctrl+C to stop)")
|
|
47
|
-
.option("--cost", "Show running resources
|
|
47
|
+
.option("--cost", "Show running resources, cost per hour, and current billing-period usage (incl. egress)")
|
|
48
48
|
.action(async (opts) => {
|
|
49
49
|
if (!RANGES.includes(opts.range)) {
|
|
50
50
|
error(`Invalid --range "${opts.range}". Choose one of: ${RANGES.join(", ")}`);
|
|
@@ -335,6 +335,156 @@ interface BillingResource {
|
|
|
335
335
|
costPerHour: number;
|
|
336
336
|
}
|
|
337
337
|
|
|
338
|
+
interface UsagePrices {
|
|
339
|
+
cpuPerVcpuPerSec: number;
|
|
340
|
+
memoryPerGbPerSec: number;
|
|
341
|
+
storagePerGbPerSec: number;
|
|
342
|
+
objectStoragePerGbMonth?: number;
|
|
343
|
+
egressPerGb: number;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
interface ProjectUsageSummary {
|
|
347
|
+
projectId: string;
|
|
348
|
+
cpuVcpuSeconds: number;
|
|
349
|
+
memoryGbSeconds: number;
|
|
350
|
+
storageGbSeconds: number;
|
|
351
|
+
objectStorageGbSeconds?: number;
|
|
352
|
+
egressBytes: number;
|
|
353
|
+
costUsd: number;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
interface BillingSummary {
|
|
357
|
+
projects: ProjectUsageSummary[];
|
|
358
|
+
periodStart: number;
|
|
359
|
+
periodEnd: number;
|
|
360
|
+
currentAvgsByProject?: Record<string, { vcpu: number; memGb: number; storageGb: number }>;
|
|
361
|
+
prices: UsagePrices;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
interface UsageRow {
|
|
365
|
+
key: "cpu" | "memory" | "volumes" | "egress" | "object";
|
|
366
|
+
label: string;
|
|
367
|
+
usage: number;
|
|
368
|
+
usageUnit: string;
|
|
369
|
+
costUsd: number;
|
|
370
|
+
estimatedUsd: number;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
interface PeriodUsage {
|
|
374
|
+
periodStart: number;
|
|
375
|
+
periodEnd: number;
|
|
376
|
+
rows: UsageRow[];
|
|
377
|
+
totalCostUsd: number;
|
|
378
|
+
totalEstimatedUsd: number;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const HOUR_MS = 3_600_000;
|
|
382
|
+
// Object storage is priced per GB/month on a 30-day basis (matches the backend).
|
|
383
|
+
const OBJECT_MONTH_SECONDS = 2_592_000;
|
|
384
|
+
|
|
385
|
+
// Current-period usage and cost, mirroring the web Usage page
|
|
386
|
+
// (ProjectUsageView's resource breakdown): quantities × prices straight from
|
|
387
|
+
// /api/billing/summary; CPU/memory/volumes estimates ride the project's
|
|
388
|
+
// current measured rates, while egress and object storage — cumulative
|
|
389
|
+
// throughput with no steady-state hourly rate — extrapolate linearly from
|
|
390
|
+
// usage so far. The extrapolation anchor is the later of the billing-period
|
|
391
|
+
// start and the oldest service's createdAt, so a mid-period project's burst
|
|
392
|
+
// isn't smeared across time it didn't exist. A frozen workspace accrues
|
|
393
|
+
// nothing — estimates collapse to the actuals.
|
|
394
|
+
async function fetchPeriodUsage(projectId: string, workspaceId: string): Promise<PeriodUsage | null> {
|
|
395
|
+
const [summaryR, servicesR, accountR] = await Promise.allSettled([
|
|
396
|
+
api.get<BillingSummary>(withQuery("/api/billing/summary", { workspaceId })),
|
|
397
|
+
api.get<{ apps?: { createdAt?: number }[]; addons?: { createdAt?: number }[] }>(
|
|
398
|
+
withScope(`/api/projects/${projectId}/services`, { workspaceId }),
|
|
399
|
+
),
|
|
400
|
+
api.get<{ status?: string }>(withQuery("/api/billing/account", { workspaceId })),
|
|
401
|
+
]);
|
|
402
|
+
if (summaryR.status !== "fulfilled") return null;
|
|
403
|
+
const summary = summaryR.value;
|
|
404
|
+
const mine = summary.projects?.find((p) => p.projectId === projectId);
|
|
405
|
+
const prices = summary.prices;
|
|
406
|
+
if (!mine || !prices) return null;
|
|
407
|
+
|
|
408
|
+
const isFrozen = accountR.status === "fulfilled" && accountR.value.status === "frozen";
|
|
409
|
+
const now = Date.now();
|
|
410
|
+
const remainingHours = isFrozen ? 0 : Math.max(0, (summary.periodEnd - now) / HOUR_MS);
|
|
411
|
+
|
|
412
|
+
const services = servicesR.status === "fulfilled" ? servicesR.value : {};
|
|
413
|
+
const createdAts = [...(services.apps ?? []), ...(services.addons ?? [])]
|
|
414
|
+
.map((s) => s.createdAt)
|
|
415
|
+
.filter((t): t is number => typeof t === "number" && t > 0);
|
|
416
|
+
const projectStart = createdAts.length > 0 ? Math.min(...createdAts) : summary.periodStart;
|
|
417
|
+
const throughputStart = Math.max(summary.periodStart, projectStart);
|
|
418
|
+
const elapsedHrs = Math.max(0.001, (now - throughputStart) / HOUR_MS);
|
|
419
|
+
const monthHrs = Math.max(elapsedHrs, (summary.periodEnd - summary.periodStart) / HOUR_MS);
|
|
420
|
+
const linearFactor = isFrozen ? 1 : monthHrs / elapsedHrs;
|
|
421
|
+
|
|
422
|
+
const avgs = summary.currentAvgsByProject?.[projectId];
|
|
423
|
+
const cpuCost = (mine.cpuVcpuSeconds ?? 0) * prices.cpuPerVcpuPerSec;
|
|
424
|
+
const memCost = (mine.memoryGbSeconds ?? 0) * prices.memoryPerGbPerSec;
|
|
425
|
+
const volCost = (mine.storageGbSeconds ?? 0) * prices.storagePerGbPerSec;
|
|
426
|
+
const egressGb = (mine.egressBytes ?? 0) / 1e9;
|
|
427
|
+
const egressCost = egressGb * prices.egressPerGb;
|
|
428
|
+
const objCost =
|
|
429
|
+
((mine.objectStorageGbSeconds ?? 0) / OBJECT_MONTH_SECONDS) * (prices.objectStoragePerGbMonth ?? 0);
|
|
430
|
+
|
|
431
|
+
const allRows: UsageRow[] = [
|
|
432
|
+
{
|
|
433
|
+
key: "cpu",
|
|
434
|
+
label: "CPU",
|
|
435
|
+
usage: (mine.cpuVcpuSeconds ?? 0) / 3600,
|
|
436
|
+
usageUnit: "vCPU·hr",
|
|
437
|
+
costUsd: cpuCost,
|
|
438
|
+
estimatedUsd: cpuCost + (avgs?.vcpu ?? 0) * prices.cpuPerVcpuPerSec * 3600 * remainingHours,
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
key: "memory",
|
|
442
|
+
label: "Memory",
|
|
443
|
+
usage: (mine.memoryGbSeconds ?? 0) / 3600,
|
|
444
|
+
usageUnit: "GB·hr",
|
|
445
|
+
costUsd: memCost,
|
|
446
|
+
estimatedUsd: memCost + (avgs?.memGb ?? 0) * prices.memoryPerGbPerSec * 3600 * remainingHours,
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
key: "volumes",
|
|
450
|
+
label: "Volumes",
|
|
451
|
+
usage: (mine.storageGbSeconds ?? 0) / 3600,
|
|
452
|
+
usageUnit: "GB·hr",
|
|
453
|
+
costUsd: volCost,
|
|
454
|
+
estimatedUsd: volCost + (avgs?.storageGb ?? 0) * prices.storagePerGbPerSec * 3600 * remainingHours,
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
key: "egress",
|
|
458
|
+
label: "Egress",
|
|
459
|
+
usage: egressGb,
|
|
460
|
+
usageUnit: "GB",
|
|
461
|
+
costUsd: egressCost,
|
|
462
|
+
estimatedUsd: egressCost > 0 ? egressCost * linearFactor : 0,
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
key: "object",
|
|
466
|
+
label: "Object Storage",
|
|
467
|
+
usage: (mine.objectStorageGbSeconds ?? 0) / 3600,
|
|
468
|
+
usageUnit: "GB·hr",
|
|
469
|
+
costUsd: objCost,
|
|
470
|
+
estimatedUsd: objCost > 0 ? objCost * linearFactor : 0,
|
|
471
|
+
},
|
|
472
|
+
];
|
|
473
|
+
const rows = allRows.filter((r) => r.key === "object" || r.costUsd > 0 || r.usage > 0);
|
|
474
|
+
|
|
475
|
+
return {
|
|
476
|
+
periodStart: summary.periodStart,
|
|
477
|
+
periodEnd: summary.periodEnd,
|
|
478
|
+
rows,
|
|
479
|
+
totalCostUsd: rows.reduce((s, r) => s + r.costUsd, 0),
|
|
480
|
+
totalEstimatedUsd: rows.reduce((s, r) => s + r.estimatedUsd, 0),
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
function fmtPeriodDate(ms: number): string {
|
|
485
|
+
return new Date(ms).toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
|
486
|
+
}
|
|
487
|
+
|
|
338
488
|
async function showCost(projectId: string, scope: ResourceScope) {
|
|
339
489
|
if (!scope.workspaceId) {
|
|
340
490
|
error("Could not resolve the workspace for this project. Run `lizard link` first.");
|
|
@@ -342,8 +492,12 @@ async function showCost(projectId: string, scope: ResourceScope) {
|
|
|
342
492
|
}
|
|
343
493
|
|
|
344
494
|
let data: { resources: BillingResource[]; costPerHour: number };
|
|
495
|
+
let usage: PeriodUsage | null;
|
|
345
496
|
try {
|
|
346
|
-
data = await
|
|
497
|
+
[data, usage] = await Promise.all([
|
|
498
|
+
api.get(withQuery("/api/billing/live", { workspaceId: scope.workspaceId })),
|
|
499
|
+
fetchPeriodUsage(projectId, scope.workspaceId),
|
|
500
|
+
]);
|
|
347
501
|
} catch (e) {
|
|
348
502
|
if (e instanceof APIError && e.status === 403) {
|
|
349
503
|
error("Billing is only visible to the workspace owner.");
|
|
@@ -361,6 +515,7 @@ async function showCost(projectId: string, scope: ResourceScope) {
|
|
|
361
515
|
resources: mine,
|
|
362
516
|
projectCostPerHour: projectCost,
|
|
363
517
|
workspaceCostPerHour: data.costPerHour,
|
|
518
|
+
currentPeriod: usage,
|
|
364
519
|
});
|
|
365
520
|
return;
|
|
366
521
|
}
|
|
@@ -387,4 +542,29 @@ async function showCost(projectId: string, scope: ResourceScope) {
|
|
|
387
542
|
);
|
|
388
543
|
}
|
|
389
544
|
console.log(chalk.dim("Workspace ") + `$${data.costPerHour.toFixed(4)}/hr`);
|
|
545
|
+
|
|
546
|
+
if (usage && usage.rows.length > 0) {
|
|
547
|
+
console.log();
|
|
548
|
+
console.log(
|
|
549
|
+
chalk.bold("This billing period") +
|
|
550
|
+
chalk.dim(` (${fmtPeriodDate(usage.periodStart)} – ${fmtPeriodDate(usage.periodEnd)})`),
|
|
551
|
+
);
|
|
552
|
+
table(
|
|
553
|
+
["Resource", "Usage", "Cost so far", "Est. period total"],
|
|
554
|
+
[
|
|
555
|
+
...usage.rows.map((r) => [
|
|
556
|
+
r.label,
|
|
557
|
+
`${r.usage.toFixed(2)} ${r.usageUnit}`,
|
|
558
|
+
`$${r.costUsd.toFixed(4)}`,
|
|
559
|
+
`$${r.estimatedUsd.toFixed(2)}`,
|
|
560
|
+
]),
|
|
561
|
+
[
|
|
562
|
+
chalk.bold("Total"),
|
|
563
|
+
"",
|
|
564
|
+
chalk.bold(`$${usage.totalCostUsd.toFixed(4)}`),
|
|
565
|
+
chalk.bold(`$${usage.totalEstimatedUsd.toFixed(2)}`),
|
|
566
|
+
],
|
|
567
|
+
],
|
|
568
|
+
);
|
|
569
|
+
}
|
|
390
570
|
}
|
package/src/lib/updater.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { join, dirname } from "node:path";
|
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
7
7
|
|
|
8
|
-
export const CURRENT_VERSION = "0.3.
|
|
8
|
+
export const CURRENT_VERSION = "0.3.48";
|
|
9
9
|
const RELEASES_API = "https://api.github.com/repos/lizard-build/lizard-cli/releases/latest";
|
|
10
10
|
const RELEASE_BASE = "https://github.com/lizard-build/lizard-cli/releases/latest/download";
|
|
11
11
|
|