You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.2 KiB
99 lines
2.2 KiB
import { |
|
AnalyticUnitId, AnalyticUnitStatus, DetectorType |
|
} from './types'; |
|
|
|
import { Metric } from 'grafana-datasource-kit'; |
|
|
|
import * as _ from 'lodash'; |
|
|
|
export abstract class AnalyticUnit { |
|
|
|
public learningAfterUpdateRequired = false; |
|
|
|
constructor( |
|
public name: string, |
|
public grafanaUrl: string, |
|
public panelId: string, |
|
// TODO: enum type |
|
// TODO: type -> subType |
|
public type: string, |
|
public metric?: Metric, |
|
public alert?: boolean, |
|
public id?: AnalyticUnitId, |
|
public lastDetectionTime?: number, |
|
public status?: AnalyticUnitStatus, |
|
public error?: string, |
|
public labeledColor?: string, |
|
public deletedColor?: string, |
|
// TODO: detectorType -> type |
|
public detectorType?: DetectorType, |
|
public visible?: boolean, |
|
public collapsed?: boolean |
|
) { |
|
|
|
if(name === undefined) { |
|
throw new Error(`Missing field "name"`); |
|
} |
|
if(grafanaUrl === undefined) { |
|
throw new Error(`Missing field "grafanaUrl"`); |
|
} |
|
if(type === undefined) { |
|
throw new Error(`Missing field "type"`); |
|
} |
|
} |
|
|
|
public toObject(): any { |
|
let metric; |
|
if(this.metric !== undefined) { |
|
metric = this.metric.toObject(); |
|
} |
|
|
|
return { |
|
_id: this.id, |
|
name: this.name, |
|
grafanaUrl: this.grafanaUrl, |
|
panelId: this.panelId, |
|
type: this.type, |
|
metric, |
|
alert: this.alert, |
|
lastDetectionTime: this.lastDetectionTime, |
|
status: this.status, |
|
error: this.error, |
|
labeledColor: this.labeledColor, |
|
deletedColor: this.deletedColor, |
|
detectorType: this.detectorType, |
|
visible: this.visible, |
|
collapsed: this.collapsed |
|
}; |
|
} |
|
|
|
public toPanelObject(): any { |
|
return { |
|
id: this.id, |
|
name: this.name, |
|
type: this.type, |
|
alert: this.alert, |
|
labeledColor: this.labeledColor, |
|
deletedColor: this.deletedColor, |
|
detectorType: this.detectorType, |
|
visible: this.visible, |
|
collapsed: this.collapsed |
|
}; |
|
} |
|
|
|
public toTemplate(): any { |
|
const obj = _.cloneDeep(this.toObject()); |
|
|
|
delete obj._id; |
|
obj.grafanaUrl = '${GRAFANA_URL}'; |
|
obj.panelId = '${PANEL_ID}'; |
|
obj.metric.datasource.url = '${DATASOURCE_URL}'; |
|
|
|
return obj; |
|
} |
|
|
|
get analyticProps () { |
|
return {}; |
|
} |
|
|
|
}
|
|
|