import { AnalyticUnit } from './analytic_unit_model'; import { AnalyticUnitId, AnalyticUnitStatus, DetectorType } from './types'; import { Metric } from '@corpglory/tsdb-kit'; type SeasonalityPeriod = { unit: string, value: number } export enum Bound { ALL = 'ALL', UPPER = 'UPPER', LOWER = 'LOWER' }; export class AnomalyAnalyticUnit extends AnalyticUnit { public learningAfterUpdateRequired = true; constructor( name: string, grafanaUrl: string, panelId: string, type: string, public alpha: number, public confidence: number, public seasonality: number, //seasonality in ms private seasonalityPeriod: SeasonalityPeriod, public enableBounds: Bound, metric?: Metric, alert?: boolean, id?: AnalyticUnitId, lastDetectionTime?: number, status?: AnalyticUnitStatus, error?: string, labeledColor?: string, deletedColor?: string, visible?: boolean, collapsed?: boolean ) { super( name, grafanaUrl, panelId, type, metric, alert, id, lastDetectionTime, status, error, labeledColor, deletedColor, DetectorType.ANOMALY, visible, collapsed ); } toObject() { const baseObject = super.toObject(); return { ...baseObject, ...this.analyticProps }; } toPanelObject() { const baseObject = super.toPanelObject(); return { ...baseObject, ...this.analyticProps }; } static fromObject(obj: any) { // TODO: remove duplication let metric: Metric | undefined = undefined; if (obj.metric !== undefined) { metric = Metric.fromObject(obj.metric); } return new AnomalyAnalyticUnit( obj.name, obj.grafanaUrl, obj.panelId, obj.type, obj.alpha, obj.confidence, obj.seasonality, obj.seasonalityPeriod, obj.enableBounds, metric, obj.alert, obj._id, obj.lastDetectionTime, obj.status, obj.error, obj.labeledColor, obj.deletedColor, obj.visible, obj.collapsed ); } get analyticProps() { return { alpha: this.alpha, confidence: this.confidence, seasonality: this.seasonality, seasonalityPeriod: this.seasonalityPeriod, enableBounds: this.enableBounds }; } }