///
import EventEmitter from 'events';
import { IAlertEmailSettings, TAlert, TAlertSentFlags, TMergeResult } from './i-alert';
import { AlertsStat } from './AlertsStat';
import { KeyedSingleEventTimeWindow } from '../classes/keyed/KeyedSingleEventTimeWindow';
import { VirtualTimeObj } from '../VirtualTimeObj';
import { IEcho, ILoggerEx } from '../interfaces';
interface IAlertsBufferConstructorOptions {
logger: ILoggerEx;
echo: IEcho;
eventEmitter: EventEmitter;
virtualTimeObj: VirtualTimeObj;
/**
* Время, в течение которого храним состояние отправки/сохранения сигнала
*/
trackAlertsStateMillis?: number;
/**
* Периодичность очистки кеша состояний сигналов
*/
removeExpiredItemsFromAlertsStatesCacheIntervalMillis?: number;
mergeAlerts: (alerts: TAlert[]) => Promise;
checkAlertExists: (guid: string) => Promise;
emailSettings: IAlertEmailSettings;
linkBase?: string;
}
/**
* Буфер сигналов. Сюда поступают сигналы, идентифицированные по alert.guid.
* Если в буфере уже есть сигнал с неким alert.guid, то он будет заменен на вновь прибывший.
* Через определенный интервал времени все сигналы из буфера сохраняется в БД (при этом буфер очищается)
*/
export declare class AlertsBuffer {
options: IAlertsBufferConstructorOptions;
buffer: {
[alertGuid: string]: {
alert: TAlert;
updatesCount: number;
};
};
/**
* Временное окно для хранения признака отправки сигнала.
* Служит для определения - это добавление или обновление сигнала при выводе диагностики.
* Ширина окна должна быть достаточно большой, чтобы за это время сигналы преставали обновляться.
*/
sentAlertsFlags: KeyedSingleEventTimeWindow;
alertsStat: AlertsStat;
private alert2emailThrottled;
private sendMail;
private _loopTimer;
private busy;
private _locked;
constructor(options: IAlertsBufferConstructorOptions);
markAlertAsSentByEmail(alert: TAlert): void;
private markAlertAsSavedToDb;
private isAlertSavedToDb;
private isAlertSentByEmail;
add(alert: TAlert): Promise;
sendOneAlertToEmail(alert: TAlert): Promise<{
to: string;
info?: any;
error?: any;
}[] | null>;
/**
* Фильтрация сигналов, по признаку возможности отправки по Email
*/
filterAlertsAllowedSendByEmail(alerts: TAlert[]): Promise;
/**
* Отправка пакета сигналов по EMail
* Ограничение на количество отправляемых писем за 1 раз
*/
sendAlertsToEmail(alerts: TAlert[]): Promise;
/**
* Фильтрация сигналов, по признаку возможности сохранения в БД
*/
filterAlertsAllowedSaveToDb(alerts: TAlert[]): Promise;
/**
* Группировка сигналы по eventName
*/
static groupAlertsByEventName(alerts: TAlert[]): [string, TAlert[]][];
private saveAlertsOfTypeToDb;
private saveAlertsToDb;
flushBuffer(awaitSend?: boolean): Promise;
loop(): Promise;
printDebugMessage(alert: TAlert): void;
getDiagnostics(eventNames?: string[]): {
data: {
[key: string]: unknown[];
};
headers: string[][];
};
get length(): number;
lock(): void;
destroy(): void;
}
export {};
//# sourceMappingURL=AlertsBuffer.d.ts.map