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.
52 lines
1.6 KiB
52 lines
1.6 KiB
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, |
|
}; |
|
}); |
|
} |
|
}
|
|
|