// Libraries import React, { PureComponent, CSSProperties } from 'react'; // Types import { SingleStatOptions, SingleStatBaseOptions } from './types'; import { DisplayValue, PanelProps, processTimeSeries, NullValueMode, ColumnType } from '@grafana/ui'; import { config } from 'app/core/config'; import { getDisplayProcessor } from '@grafana/ui'; import { ProcessedValuesRepeater } from './ProcessedValuesRepeater'; export const getSingleStatValues = (props: PanelProps): DisplayValue[] => { const { data, replaceVariables, options } = props; const { valueOptions, valueMappings } = options; const { unit, decimals, stat } = valueOptions; const processor = getDisplayProcessor({ unit, decimals, mappings: valueMappings, thresholds: options.thresholds, prefix: replaceVariables(valueOptions.prefix), suffix: replaceVariables(valueOptions.suffix), theme: config.theme, }); const values: DisplayValue[] = []; for (const table of data) { for (let i = 0; i < table.columns.length; i++) { const column = table.columns[i]; // Show all columns that are not 'time' if (column.type === ColumnType.number) { const series = processTimeSeries({ data: [table], xColumn: i, yColumn: i, nullValueMode: NullValueMode.Null, })[0]; const value = stat !== 'name' ? series.stats[stat] : series.label; values.push(processor(value)); } } } if (values.length === 0) { throw { message: 'Could not find numeric data' }; } return values; }; export class SingleStatPanel extends PureComponent> { renderValue = (value: DisplayValue, width: number, height: number): JSX.Element => { const style: CSSProperties = {}; style.margin = '0 auto'; style.fontSize = '250%'; style.textAlign = 'center'; if (value.color) { style.color = value.color; } return (
{value.text}
); }; getProcessedValues = (): DisplayValue[] => { return getSingleStatValues(this.props); }; render() { const { height, width, options, data, renderCounter } = this.props; return ( ); } }