fix: show actual memory usage (exclude cache) + add build:container script
- Dashboard memory: use /proc/meminfo MemAvailable instead of os.freemem() to exclude Linux buffer/cache from reported usage - Add build:container npm script for reviewer Docker image rebuild - Update deploy commands in CLAUDE.md and README.md to include build:container
This commit is contained in:
@@ -40,6 +40,7 @@ Run commands directly—don't tell the user to run them.
|
|||||||
```bash
|
```bash
|
||||||
bun run build # Build main project
|
bun run build # Build main project
|
||||||
bun run build:runners # Install + build both runners
|
bun run build:runners # Install + build both runners
|
||||||
|
bun run build:container # Rebuild reviewer Docker image
|
||||||
bun run dev # Dev mode with hot reload
|
bun run dev # Dev mode with hot reload
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ journalctl --user -u ejclaw -f # Follow logs
|
|||||||
|
|
||||||
Deploy to server (build on server, not locally):
|
Deploy to server (build on server, not locally):
|
||||||
```bash
|
```bash
|
||||||
ssh clone-ej@100.64.185.108 'cd ~/EJClaw && git pull && bun run build && bun run build:runners && systemctl --user restart ejclaw'
|
ssh clone-ej@100.64.185.108 'cd ~/EJClaw && git pull && bun run build && bun run build:runners && bun run build:container && systemctl --user restart ejclaw'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Service Stack Architecture
|
## Service Stack Architecture
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ cd EJClaw
|
|||||||
bun install
|
bun install
|
||||||
bun run build:runners
|
bun run build:runners
|
||||||
bun run build
|
bun run build
|
||||||
|
bun run build:container # Build reviewer Docker image
|
||||||
```
|
```
|
||||||
|
|
||||||
### Environment
|
### Environment
|
||||||
@@ -157,7 +158,7 @@ MOA_GLM_API_FORMAT=anthropic
|
|||||||
### Deploy
|
### Deploy
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh clone-ej@100.64.185.108 'cd ~/EJClaw && git pull && bun run build && bun run build:runners && systemctl --user restart ejclaw'
|
ssh clone-ej@100.64.185.108 'cd ~/EJClaw && git pull && bun run build && bun run build:runners && bun run build:container && systemctl --user restart ejclaw'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
@@ -165,6 +166,7 @@ ssh clone-ej@100.64.185.108 'cd ~/EJClaw && git pull && bun run build && bun run
|
|||||||
```bash
|
```bash
|
||||||
bun run build # Build main project
|
bun run build # Build main project
|
||||||
bun run build:runners # Install + build both runners
|
bun run build:runners # Install + build both runners
|
||||||
|
bun run build:container # Rebuild reviewer Docker image
|
||||||
bun run dev # Dev mode with hot reload
|
bun run dev # Dev mode with hot reload
|
||||||
bun test # Run tests
|
bun test # Run tests
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"build:runners": "bun install --cwd runners/agent-runner && bun run --cwd runners/agent-runner build && bun install --cwd runners/codex-runner && bun run --cwd runners/codex-runner build",
|
"build:runners": "bun install --cwd runners/agent-runner && bun run --cwd runners/agent-runner build && bun install --cwd runners/codex-runner && bun run --cwd runners/codex-runner build",
|
||||||
|
"build:container": "docker build -f container/Dockerfile -t ejclaw-reviewer:latest .",
|
||||||
"restart:stack": "bash scripts/restart-ejclaw-stack.sh",
|
"restart:stack": "bash scripts/restart-ejclaw-stack.sh",
|
||||||
"restart:hint": "bun src/restart-context-cli.ts write",
|
"restart:hint": "bun src/restart-context-cli.ts write",
|
||||||
"start": "bun dist/index.js",
|
"start": "bun dist/index.js",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -524,7 +525,17 @@ async function buildUsageContent(): Promise<string> {
|
|||||||
const cpuCount = os.cpus().length;
|
const cpuCount = os.cpus().length;
|
||||||
const cpuPct = Math.round((loadAvg[1] / cpuCount) * 100);
|
const cpuPct = Math.round((loadAvg[1] / cpuCount) * 100);
|
||||||
const totalMem = os.totalmem();
|
const totalMem = os.totalmem();
|
||||||
const usedMem = totalMem - os.freemem();
|
// os.freemem() includes buffers/cache as "used" — misleading.
|
||||||
|
// Read MemAvailable from /proc/meminfo for actual available memory.
|
||||||
|
let availableMem = os.freemem();
|
||||||
|
try {
|
||||||
|
const meminfo = fs.readFileSync('/proc/meminfo', 'utf-8');
|
||||||
|
const match = meminfo.match(/MemAvailable:\s+(\d+)\s+kB/);
|
||||||
|
if (match) availableMem = parseInt(match[1], 10) * 1024;
|
||||||
|
} catch {
|
||||||
|
/* non-Linux or unreadable — fall back to os.freemem() */
|
||||||
|
}
|
||||||
|
const usedMem = totalMem - availableMem;
|
||||||
const memPct = Math.round((usedMem / totalMem) * 100);
|
const memPct = Math.round((usedMem / totalMem) * 100);
|
||||||
const memUsedGB = (usedMem / 1073741824).toFixed(1);
|
const memUsedGB = (usedMem / 1073741824).toFixed(1);
|
||||||
const memTotalGB = (totalMem / 1073741824).toFixed(1);
|
const memTotalGB = (totalMem / 1073741824).toFixed(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user