///
import { ChildProcess } from 'child_process';
export declare enum When {
immediately = "immediately",
daily = "daily",
all = "all"
}
export declare enum ProcessStatus {
Online = 0,
Offline = 1,
Failure = 2,
UnKnown = 3
}
export interface Process {
name: string;
processManagerType: 'pm2';
process2Watch: string;
notifyOnRestart: {
enable: boolean;
when2Notify: When;
maxMessagePerDay: number;
includeInDailyReport: boolean;
};
notifyOnFailure: {
enable: boolean;
when2Notify: When;
maxMessagePerDay: number;
includeInDailyReport: boolean;
};
logWatchList: LogWatch[];
}
interface LogWatch {
text2Watch: string;
lineCount2RecordBefore: number;
lineCount2RecordAfter: number;
when2Notify: When;
maxMessagePerDay: number;
includeInDailyReport: boolean;
mailOptions: {
messagePrefix: string;
subject: string;
};
}
export interface Notification {
processName: string;
text2Watch: string | null;
type: 'log-notify' | 'restart' | 'failure';
emailTo: string;
emailFrom: string;
emailSubject: string;
when2Notify: When;
includeInDailyReport: boolean;
maxMessagePerDay: number;
message: string;
}
export interface ProcessInfo {
status: ProcessStatus;
restartCount: number;
memory: number;
cpu: number;
}
export declare abstract class ProcessAgent {
protected PROCESS_INFO_UPDATE_CYCLE: number;
protected processConfig: Process;
protected logListenerApp: ChildProcess;
protected logArchieve: {
text: string;
timestamp: string;
}[];
protected totalLogLineCount: number;
protected lastCreatedNotification: {
[text2Watch: string]: number;
};
protected prevStatus: ProcessStatus;
protected prevRestartCount: number;
protected isFailureMessageSent: boolean;
private createResourceCpuCb;
private createResourceMemoryCb;
private createNotificationCb;
private defaultTo;
private defaultFrom;
constructor(processConfig: Process, defaultTo: string, defaultFrom: string, createNotificationCb: (values: object) => Promise, createResourceCpuCb: (timestamp: Date, process: string, value: number) => Promise, createResourceMemoryCb: (timestamp: Date, process: string, value: number) => Promise);
protected abstract watchProcessLogOutput(): void;
protected abstract watchProcessInfo(): void;
protected abstract convertStatusFromStr(strStatus: string): ProcessStatus;
start(): void;
private getHeaderText;
private getFooterText;
protected newLogLine(logLine: string, timestamp: string): void;
protected archieveLogLine(text: string, timestamp: string): void;
protected processLogLine(): void;
protected processProcessInfo(info: ProcessInfo): void;
}
export {};