A Docker-like CLI and HTTP API for managing headless VMs

feat: enhance VM display with drive path and improve code formatting

+26 -9
+26 -9
src/subcommands/ps.ts
··· 1 1 import { Table } from "@cliffy/table"; 2 + import { basename } from "@std/path"; 2 3 import dayjs from "dayjs"; 3 4 import relativeTime from "dayjs/plugin/relativeTime.js"; 4 5 import utc from "dayjs/plugin/utc.js"; ··· 16 17 const fetchVMs = (all: boolean) => 17 18 Effect.tryPromise({ 18 19 try: () => 19 - ctx.db.selectFrom("virtual_machines") 20 + ctx.db 21 + .selectFrom("virtual_machines") 20 22 .selectAll() 21 23 .where((eb) => { 22 24 if (all) { ··· 30 32 31 33 const createTable = () => 32 34 Effect.succeed( 33 - new Table( 34 - ["NAME", "VCPU", "MEMORY", "STATUS", "PID", "BRIDGE", "PORTS", "CREATED"], 35 - ), 35 + new Table([ 36 + "NAME", 37 + "VCPU", 38 + "MEMORY", 39 + "STATUS", 40 + "PID", 41 + "IMAGE", 42 + "BRIDGE", 43 + "PORTS", 44 + "CREATED", 45 + ]), 36 46 ); 37 47 38 48 const populateTable = (table: Table, vms: VirtualMachine[]) => ··· 44 54 vm.memory, 45 55 formatStatus(vm), 46 56 vm.pid?.toString() ?? "-", 57 + basename(vm.drivePath || vm.isoPath || "-"), 47 58 vm.bridge ?? "-", 48 59 formatPorts(vm.portForward), 49 60 dayjs.utc(vm.createdAt).local().fromNow(), ··· 79 90 switch (vm.status) { 80 91 case "RUNNING": 81 92 return `Up ${ 82 - dayjs.utc(vm.updatedAt).local().fromNow().replace("ago", "") 93 + dayjs 94 + .utc(vm.updatedAt) 95 + .local() 96 + .fromNow() 97 + .replace("ago", "") 83 98 }`; 84 99 case "STOPPED": 85 100 return `Exited ${dayjs.utc(vm.updatedAt).local().fromNow()}`; ··· 94 109 } 95 110 96 111 const mappings = portForward.split(","); 97 - return mappings.map((mapping) => { 98 - const [hostPort, guestPort] = mapping.split(":"); 99 - return `${hostPort}->${guestPort}`; 100 - }).join(", "); 112 + return mappings 113 + .map((mapping) => { 114 + const [hostPort, guestPort] = mapping.split(":"); 115 + return `${hostPort}->${guestPort}`; 116 + }) 117 + .join(", "); 101 118 }