/// 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