@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.
@@ -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 and cost per hour instead of metrics")
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 api.get(withQuery("/api/billing/live", { workspaceId: scope.workspaceId }));
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":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare const CURRENT_VERSION = "0.3.47";
1
+ export declare const CURRENT_VERSION = "0.3.48";
2
2
  /**
3
3
  * True only when running as the Bun-compiled standalone binary. Under
4
4
  * npm/node, `process.execPath` is the *node* executable — self-update would
@@ -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.47";
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lizard-build/cli",
3
- "version": "0.3.47",
3
+ "version": "0.3.48",
4
4
  "description": "Lizard CLI — deploy and manage apps on Lizard",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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 and cost per hour instead of metrics")
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 api.get(withQuery("/api/billing/live", { workspaceId: scope.workspaceId }));
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
  }
@@ -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.47";
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