| 129 | // can watch growth without attaching a debugger. Used by the |
| 130 | // /__computerd/stats endpoint while diagnosing the npm install OOM. |
| 131 | function collectDbStats(db: Database): Record<string, unknown> { |
| 132 | // biome-ignore lint/suspicious/noExplicitAny: small ad-hoc shape |
| 133 | const out: Record<string, any> = {}; |
| 134 | try { |
| 135 | out.vfs_nodes_count = db.scalar<number>("SELECT COUNT(*) FROM vfs_nodes") ?? 0; |
| 136 | out.vfs_dirents_count = db.scalar<number>("SELECT COUNT(*) FROM vfs_dirents") ?? 0; |
| 137 | out.vfs_chunks_count = db.scalar<number>("SELECT COUNT(*) FROM vfs_chunks") ?? 0; |
| 138 | out.vfs_blobs_count = db.scalar<number>("SELECT COUNT(*) FROM vfs_blobs") ?? 0; |
| 139 | out.vfs_blob_bytes_total = |
| 140 | db.scalar<number>("SELECT COALESCE(SUM(LENGTH(bytes)), 0) FROM vfs_blob_bytes") ?? 0; |
| 141 | out.vfs_blobs_orphan = |
| 142 | db.scalar<number>( |
| 143 | "SELECT COUNT(*) FROM vfs_blobs b WHERE NOT EXISTS (SELECT 1 FROM vfs_chunks c WHERE c.hash = b.hash)", |
| 144 | ) ?? 0; |
| 145 | out.vfs_blob_bytes_orphan = |
| 146 | db.scalar<number>( |
| 147 | "SELECT COALESCE(SUM(LENGTH(bytes)), 0) FROM vfs_blob_bytes bb WHERE NOT EXISTS (SELECT 1 FROM vfs_chunks c WHERE c.hash = bb.hash)", |
| 148 | ) ?? 0; |
| 149 | } catch (error) { |
| 150 | out.error = (error as Error).message; |
| 151 | } |
| 152 | const mem = process.memoryUsage(); |
| 153 | out.rss = mem.rss; |
| 154 | out.heap_used = mem.heapUsed; |
| 155 | out.heap_total = mem.heapTotal; |
| 156 | out.external = mem.external; |
| 157 | out.array_buffers = mem.arrayBuffers; |
| 158 | return out; |
| 159 | } |
| 160 | |
| 161 | interface HTTPHandle { |
| 162 | server: Server; |