feat(daemon): Add real-time log streaming and pub/sub: daemon publishes per-process logs, IPC client subscribe/unsubscribe, CLI --follow streaming, and sequencing for logs
This commit is contained in:
@@ -15,6 +15,8 @@ export interface IProcessLog {
|
||||
timestamp: Date;
|
||||
type: 'stdout' | 'stderr' | 'system';
|
||||
message: string;
|
||||
seq: number;
|
||||
runId: string;
|
||||
}
|
||||
|
||||
export class ProcessWrapper extends EventEmitter {
|
||||
@@ -24,12 +26,15 @@ export class ProcessWrapper extends EventEmitter {
|
||||
private logBufferSize: number;
|
||||
private startTime: Date | null = null;
|
||||
private logger: Logger;
|
||||
private nextSeq: number = 0;
|
||||
private runId: string = '';
|
||||
|
||||
constructor(options: IProcessWrapperOptions) {
|
||||
super();
|
||||
this.options = options;
|
||||
this.logBufferSize = options.logBuffer || 100;
|
||||
this.logger = new Logger(`ProcessWrapper:${options.name}`);
|
||||
this.runId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -217,6 +222,8 @@ export class ProcessWrapper extends EventEmitter {
|
||||
timestamp: new Date(),
|
||||
type,
|
||||
message,
|
||||
seq: this.nextSeq++,
|
||||
runId: this.runId,
|
||||
};
|
||||
|
||||
this.logs.push(log);
|
||||
@@ -238,6 +245,8 @@ export class ProcessWrapper extends EventEmitter {
|
||||
timestamp: new Date(),
|
||||
type: 'system',
|
||||
message,
|
||||
seq: this.nextSeq++,
|
||||
runId: this.runId,
|
||||
};
|
||||
|
||||
this.logs.push(log);
|
||||
|
Reference in New Issue
Block a user