Stat: recompute shared y range during streaming updates (#39485)

This commit is contained in:
Leon Sorokin 2021-10-07 03:48:49 -05:00 committed by GitHub
parent 8180121495
commit d3815a851c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,14 +10,18 @@ import {
import {
DisplayValueAlignmentFactors,
FieldDisplay,
FieldType,
getDisplayValueAlignmentFactors,
getFieldDisplayValues,
NumericRange,
PanelProps,
} from '@grafana/data';
import { config } from 'app/core/config';
import { StatPanelOptions } from './types';
import { DataLinksContextMenuApi } from '@grafana/ui/src/components/DataLinks/DataLinksContextMenu';
import { findNumericFieldMinMax } from '@grafana/data/src/field/fieldOverrides';
import { isNumber } from 'lodash';
export class StatPanel extends PureComponent<PanelProps<StatPanelOptions>> {
renderComponent = (
@ -83,6 +87,28 @@ export class StatPanel extends PureComponent<PanelProps<StatPanelOptions>> {
getValues = (): FieldDisplay[] => {
const { data, options, replaceVariables, fieldConfig, timeZone } = this.props;
let globalRange: NumericRange | undefined = undefined;
for (let frame of data.series) {
for (let field of frame.fields) {
let { config } = field;
// mostly copied from fieldOverrides, since they are skipped during streaming
// Set the Min/Max value automatically
if (field.type === FieldType.number) {
if (field.state?.range) {
continue;
}
if (!globalRange && (!isNumber(config.min) || !isNumber(config.max))) {
globalRange = findNumericFieldMinMax(data.series);
}
const min = config.min ?? globalRange!.min;
const max = config.max ?? globalRange!.max;
field.state = field.state ?? {};
field.state.range = { min, max, delta: max! - min! };
}
}
}
return getFieldDisplayValues({
fieldConfig,
reduceOptions: options.reduceOptions,