import { PanelOptions, Aggregation } from 'types'; import { filterMetricListByAlias, getAggregatedValueFromSerie } from '../utils'; // Convert Grafana options into Chartwerk Gauge options export class Options { private minValue: number | undefined; private maxValue: number | undefined; constructor(private grafanaSeriesList: any[], private grafanaOptions: PanelOptions) { this._setMin(); this._setMax(); } private _setMin(): any { if (!this.grafanaOptions.gauge.min.metricName) { this.minValue = this.grafanaOptions.gauge.min.value; return; } const filteredSeries = filterMetricListByAlias( this.grafanaSeriesList, this.grafanaOptions.gauge.min.metricName, 'Min' ); const serie = filteredSeries[0]; // Last value for now const aggregatedValue = getAggregatedValueFromSerie(serie, Aggregation.LAST); this.minValue = aggregatedValue ? aggregatedValue : undefined; } private _setMax(): any { if (!this.grafanaOptions.gauge.max.metricName) { this.maxValue = this.grafanaOptions.gauge.max.value; return; } const filteredSeries = filterMetricListByAlias( this.grafanaSeriesList, this.grafanaOptions.gauge.max.metricName, 'Max' ); const serie = filteredSeries[0]; // Last value for now const aggregatedValue = getAggregatedValueFromSerie(serie, Aggregation.LAST); this.maxValue = aggregatedValue ? aggregatedValue : undefined; } public getChartwerkOptions(): any { console.log('opt', this.maxValue, this.minValue); return { maxValue: this.maxValue, minValue: this.minValue, valueFormatter: (val: any) => val.toFixed(2), defaultColor: 'green', reversed: this.grafanaOptions.gauge.reversed, stops: [ { color: 'green', value: 100, }, { color: 'orange', value: 140, }, ], // @ts-ignore icons: [{ src: 'https://cityhost.ua/upload_img/blog5ef308ea5529c_trash2-01.jpg', position: 'middle', size: 30 }], }; } }