38 lines
983 B
TypeScript
38 lines
983 B
TypeScript
import { existsSync, readFileSync } from 'node:fs';
|
|
import { spawn } from 'node:child_process';
|
|
import { LOG_FILE } from './daemon.js';
|
|
|
|
interface LogsOpts {
|
|
follow?: boolean;
|
|
lines?: number;
|
|
}
|
|
|
|
export function runLogs(opts: LogsOpts): void {
|
|
if (!existsSync(LOG_FILE)) {
|
|
console.log('No log file found. Is the gateway installed?');
|
|
return;
|
|
}
|
|
|
|
if (opts.follow) {
|
|
const lines = opts.lines ?? 50;
|
|
const tail = spawn('tail', ['-n', lines.toString(), '-f', LOG_FILE], {
|
|
stdio: 'inherit',
|
|
});
|
|
tail.on('error', () => {
|
|
// Fallback for systems without tail
|
|
console.log(readLastLines(opts.lines ?? 50));
|
|
console.log('\n(--follow requires `tail` command)');
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Just print last N lines
|
|
console.log(readLastLines(opts.lines ?? 50));
|
|
}
|
|
|
|
function readLastLines(n: number): string {
|
|
const content = readFileSync(LOG_FILE, 'utf-8');
|
|
const lines = content.split('\n');
|
|
return lines.slice(-n).join('\n');
|
|
}
|