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.

128 lines
3.7 KiB

7 years ago
import { Segment, SegmentId } from '../models/segment';
7 years ago
import { MetricExpanded } from '../models/metric';
import { DatasourceRequest } from '../models/datasource';
import { SegmentsSet } from '../models/segment_set';
import { AnalyticUnitId, AnalyticUnit, AnalyticSegment } from '../models/analytic_unit';
7 years ago
import { BackendSrv } from 'grafana/app/core/services/backend_srv';
export class AnalyticService {
7 years ago
constructor(private _backendURL: string, private _backendSrv: BackendSrv) {
}
7 years ago
async postNewItem(
metric: MetricExpanded, datasourceRequest: DatasourceRequest,
newItem: AnalyticUnit, panelId: number
7 years ago
): Promise<AnalyticUnitId> {
7 years ago
return this._backendSrv.post(
7 years ago
this._backendURL + '/analyticUnits',
7 years ago
{
panelUrl: window.location.origin + window.location.pathname + `?panelId=${panelId}&fullscreen`,
type: newItem.type,
7 years ago
name: newItem.name,
7 years ago
metric: metric.toJSON(),
datasource: datasourceRequest
7 years ago
}
7 years ago
).then(res => res.id as AnalyticUnitId);
7 years ago
};
async isBackendOk(): Promise<boolean> {
try {
var data = await this._backendSrv.get(this._backendURL);
7 years ago
// TODO: check version
return true;
} catch(e) {
return false;
}
}
7 years ago
async updateSegments(
7 years ago
id: AnalyticUnitId, addedSegments: SegmentsSet<Segment>, removedSegments: SegmentsSet<Segment>
7 years ago
): Promise<SegmentId[]> {
7 years ago
const getJSONs = (segs: SegmentsSet<Segment>) => segs.getSegments().map(segment => ({
"from": segment.from,
"to": segment.to
7 years ago
}));
var payload = {
7 years ago
id,
7 years ago
addedSegments: getJSONs(addedSegments),
removedSegments: removedSegments.getSegments().map(s => s.id)
7 years ago
}
var data = await this._backendSrv.patch(this._backendURL + '/segments', payload);
7 years ago
if(data.addedIds === undefined) {
7 years ago
throw new Error('Server didn`t send addedIds');
7 years ago
}
7 years ago
return data.addedIds as SegmentId[];
7 years ago
}
7 years ago
async getSegments(id: AnalyticUnitId, from?: number, to?: number): Promise<AnalyticSegment[]> {
7 years ago
if(id === undefined) {
throw new Error('id is undefined');
}
7 years ago
var payload: any = { id };
7 years ago
if(from !== undefined) {
payload['from'] = from;
}
if(to !== undefined) {
payload['to'] = to;
}
7 years ago
var data = await this._backendSrv.get(this._backendURL + '/segments', payload);
7 years ago
if(data.segments === undefined) {
throw new Error('Server didn`t return segments array');
}
var segments = data.segments as { id: SegmentId, from: number, to: number, labeled: boolean }[];
return segments.map(s => new AnalyticSegment(s.labeled, s.id, s.from, s.to));
7 years ago
}
7 years ago
async * getStatusGenerator(id: AnalyticUnitId, duration: number) {
7 years ago
if(id === undefined) {
throw new Error('id is undefined');
}
7 years ago
let statusCheck = async () => {
var data = await this._backendSrv.get(
7 years ago
this._backendURL + '/analyticUnits/status', { id }
7 years ago
);
return data;
7 years ago
}
let timeout = async () => new Promise(
resolve => setTimeout(resolve, duration)
);
while(true) {
yield await statusCheck();
await timeout();
}
}
7 years ago
async getAlertEnabled(id: AnalyticUnitId): Promise<boolean> {
7 years ago
if(id === undefined) {
throw new Error('id is undefined');
}
7 years ago
var data = await this._backendSrv.get(
7 years ago
this._backendURL + '/alerts', { id }
7 years ago
);
7 years ago
if(data.enabled === undefined) {
throw new Error('Server didn`t return "enabled"');
}
return data.enabled as boolean;
7 years ago
}
7 years ago
async setAlertEnabled(id: AnalyticUnitId, enabled: boolean): Promise<void> {
7 years ago
if(id === undefined) {
throw new Error('id is undefined');
}
7 years ago
return this._backendSrv.post(
7 years ago
this._backendURL + '/alerts', { id, enabled }
7 years ago
);
}
}