|
|
|
import { PanelData, TimeRange } from '@grafana/data';
|
|
|
|
import { DataProcessor } from '../grafana/data_processor';
|
|
|
|
|
|
|
|
import { ValueOptions } from 'types';
|
|
|
|
|
|
|
|
import * as _ from 'lodash';
|
|
|
|
|
|
|
|
|
|
|
|
// Convert Grafana series into Chartwerk series
|
|
|
|
export class Series {
|
|
|
|
private processor;
|
|
|
|
private _seriesList;
|
|
|
|
private _selectedSerieName;
|
|
|
|
|
|
|
|
constructor(grafanaData: PanelData, timeRange: TimeRange, private gaugeValueOptions: ValueOptions) {
|
|
|
|
if(_.isEmpty(this.gaugeValueOptions.metricName)) {
|
|
|
|
throw new Error(`Value or metric is not selected.`);
|
|
|
|
}
|
|
|
|
|
|
|
|
this._selectedSerieName = this.gaugeValueOptions.metricName;
|
|
|
|
this.processor = new DataProcessor({});
|
|
|
|
const seriesList = this.processor.getSeriesList({
|
|
|
|
dataList: grafanaData.series,
|
|
|
|
range: timeRange,
|
|
|
|
});
|
|
|
|
|
|
|
|
const filteredSeries = _.filter(seriesList, serie => serie.alias === this._selectedSerieName);
|
|
|
|
if(filteredSeries.length === 0) {
|
|
|
|
throw new Error(`Can't find metric for ${this._selectedSerieName} name`);
|
|
|
|
}
|
|
|
|
if(filteredSeries.length > 1) {
|
|
|
|
throw new Error(`Get ${filteredSeries.length} metrics for ${this._selectedSerieName} name. Please choose one`);
|
|
|
|
}
|
|
|
|
|
|
|
|
this._seriesList = this._updateSeriesListWithChartwerkParams(filteredSeries);
|
|
|
|
}
|
|
|
|
|
|
|
|
public getChartwerkSeries(): any[] {
|
|
|
|
return this._seriesList;
|
|
|
|
}
|
|
|
|
|
|
|
|
private _updateSeriesListWithChartwerkParams(series: any[]): any[] {
|
|
|
|
return _.map(series, (serie: any, idx: number) => {
|
|
|
|
return {
|
|
|
|
target: serie.alias,
|
|
|
|
color: serie.color,
|
|
|
|
datapoints: _.map(serie.datapoints, (row) => _.reverse(row)),
|
|
|
|
alias: serie.label,
|
|
|
|
};
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|