import { ITimeWindowSetStatOptions, TimeWindow } from '../base/TimeWindow'; import { VirtualTimeObj } from '../../VirtualTimeObj'; export interface IKeyedTimeWindowOptions { /** * Отличительное имя окна для логирования */ winName: string; /** * Ширина окна, мс */ widthMillis: number; /** * Окно работает на основе "виртуального" времени, что важно в режиме тестирования на исторических данных. * Хотя этот параметр используется только для вычисления времени устаревания событий в окне, в функции this.removeExpired() */ virtualTimeObj?: VirtualTimeObj; /** * Периодичность очистки окна от устаревших событий. * Если 0, то очистка происходит при добавлении каждого события * Если undefined, то очистка не производится (этим управляет вышестоящий объект) */ removeExpiredIntervalMillis?: number; /** * Интервал цикла удаления из хеша пустых окон */ removeEmptyIntervalMillis?: number; /** * Кастомная функция для инициализации статистики ключеванных окон. */ initStat?: (_timeWindow: TimeWindow) => void; /** * Опциональная функция для записи статистики при добавлении(удалении) событий в ключеванное окно. * Если передана, то подменит собой метод NumberWindow.setStat() */ setStat?: (_setStatOptions: ITimeWindowSetStatOptions) => void; /** * Кастомная функция для получения статистики. Она подменит метод окна NumberWindow.getStat() * Если не передана, то метод this.getStatByKey() будет возвращать свойство окна NumberWindow.stat */ getStat?: (timeWindow: TimeWindow, ...args: any[]) => any; } export interface IKeyedTimeWindowHash { [key: string | number]: TimeWindow; } export interface IKeyedTimeWindowInfo { numberOfItemsInWindow: number; perHour: number; firstTs: number; lastTs: number; [fieldName: string]: any; } /** * Набор временных окон (TimeWindow), идентифицированных ключами. * Ширина всех временных окон задается единым параметром this.widthMillis в момент создания ключеванного окна. * (впрочем это не запрещает изменение ширины отдельно взятого окна в реалтайме) * * Пример использования: для создания множества временных окон в разрезе пользователей (ключ - guid пользователя) * для отслеживания его сделок (и сбора статистики по ним) в пределах заданного интервала времени. */ export declare class KeyedTimeWindow { options: IKeyedTimeWindowOptions; hash: IKeyedTimeWindowHash; widthMillis: number; _removeExpiredTimer: any; _collectGarbageTimer: any; constructor(options: IKeyedTimeWindowOptions); setRemoveExpiredEventsTimer(removeExpiredIntervalMillis: number | undefined): void; add(key: string | number, ts: number, data: T): void; /** * Удаление из хеша все окна, в которых нет событий */ collectGarbage(): void; removeExpired(virtualTs: number): number; /** * Возвращает временное окно по ключу. */ getWindowByKey(key: string | number): TimeWindow | undefined; getStatByKey(key: string | number, ...args: any[]): ST | undefined; getCount(key: string | number): number; /** * Возвращает сведения о содержимом временного окна. * Нужно следить за тем, чтобы метод вызывался ПОСЛЕ добавления очередной сущности в окно, * для того, чтобы из окна были удалены "протухшие" сущности */ getInfo(key: string | number, customDataCallback?: Function): IKeyedTimeWindowInfo; setCountWindowWidth(widthMillis: number): void; destroy(): void; } //# sourceMappingURL=KeyedTimeWindow.d.ts.map