mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 01:32:10 +08:00

* markup timeseries panel edit * mark up matchers ui * mark up bar chart * mark up stat panel * mark up gauge * mark up bar gauge * mark up table component * mark up pie chart * mark up state timeline * mark up heatmap * mark up status history * mark up histogram * mark up text panel * mark up alert list * mark up dashboard list * mark up news panel * mark up annolist * mark up logs panel * mark up node-graph * mark up traces * mark up trend * mark up xychart * fix build
153 lines
4.8 KiB
TypeScript
153 lines
4.8 KiB
TypeScript
import {
|
|
FieldColorModeId,
|
|
FieldConfigProperty,
|
|
FieldType,
|
|
identityOverrideProcessor,
|
|
PanelPlugin,
|
|
histogramFieldInfo,
|
|
} from '@grafana/data';
|
|
import { t } from '@grafana/i18n';
|
|
import { commonOptionsBuilder, getGraphFieldOptions } from '@grafana/ui';
|
|
import { StackingEditor } from '@grafana/ui/internal';
|
|
|
|
import { HistogramPanel } from './HistogramPanel';
|
|
import { defaultHistogramConfig } from './config';
|
|
import { changeToHistogramPanelMigrationHandler } from './migrations';
|
|
import { FieldConfig, Options, defaultFieldConfig, defaultOptions } from './panelcfg.gen';
|
|
import { originalDataHasHistogram } from './utils';
|
|
|
|
export const plugin = new PanelPlugin<Options, FieldConfig>(HistogramPanel)
|
|
.setPanelChangeHandler(changeToHistogramPanelMigrationHandler)
|
|
.setPanelOptions((builder) => {
|
|
const category = [t('histogram.category-histogram', 'Histogram')];
|
|
builder
|
|
.addCustomEditor({
|
|
id: '__calc__',
|
|
path: '__calc__',
|
|
name: 'Values',
|
|
category,
|
|
description: 'Showing frequencies that are calculated in the query',
|
|
editor: () => null, // empty editor
|
|
showIf: (opts, data) => originalDataHasHistogram(data),
|
|
})
|
|
.addNumberInput({
|
|
path: 'bucketCount',
|
|
name: histogramFieldInfo.bucketCount.name,
|
|
category,
|
|
description: histogramFieldInfo.bucketCount.description,
|
|
settings: {
|
|
placeholder: `Default: ${defaultOptions.bucketCount}`,
|
|
min: 0,
|
|
},
|
|
showIf: (opts, data) => !originalDataHasHistogram(data),
|
|
})
|
|
.addNumberInput({
|
|
path: 'bucketSize',
|
|
name: histogramFieldInfo.bucketSize.name,
|
|
category,
|
|
description: histogramFieldInfo.bucketSize.description,
|
|
settings: {
|
|
placeholder: 'Auto',
|
|
min: 0,
|
|
},
|
|
defaultValue: defaultOptions.bucketSize,
|
|
showIf: (opts, data) => !originalDataHasHistogram(data),
|
|
})
|
|
.addNumberInput({
|
|
path: 'bucketOffset',
|
|
name: histogramFieldInfo.bucketOffset.name,
|
|
category,
|
|
description: histogramFieldInfo.bucketOffset.description,
|
|
settings: {
|
|
placeholder: `Default: ${defaultOptions.bucketOffset}`,
|
|
min: 0,
|
|
},
|
|
showIf: (opts, data) => !originalDataHasHistogram(data),
|
|
})
|
|
.addBooleanSwitch({
|
|
path: 'combine',
|
|
name: histogramFieldInfo.combine.name,
|
|
category,
|
|
description: histogramFieldInfo.combine.description,
|
|
defaultValue: defaultOptions.combine,
|
|
showIf: (opts, data) => !originalDataHasHistogram(data),
|
|
});
|
|
|
|
commonOptionsBuilder.addTooltipOptions(builder);
|
|
commonOptionsBuilder.addLegendOptions(builder);
|
|
})
|
|
.useFieldConfig({
|
|
standardOptions: {
|
|
[FieldConfigProperty.Color]: {
|
|
settings: {
|
|
byValueSupport: false,
|
|
bySeriesSupport: true,
|
|
preferThresholdsMode: false,
|
|
},
|
|
defaultValue: {
|
|
mode: FieldColorModeId.PaletteClassic,
|
|
},
|
|
},
|
|
[FieldConfigProperty.Links]: {
|
|
settings: {
|
|
showOneClick: true,
|
|
},
|
|
},
|
|
},
|
|
useCustomConfig: (builder) => {
|
|
const cfg = defaultFieldConfig;
|
|
const graphFieldOptions = getGraphFieldOptions();
|
|
const category = [t('histogram.category-histogram', 'Histogram')];
|
|
|
|
builder
|
|
.addCustomEditor({
|
|
id: 'stacking',
|
|
path: 'stacking',
|
|
name: t('histogram.name-stacking', 'Stacking'),
|
|
category,
|
|
defaultValue: defaultHistogramConfig.stacking,
|
|
editor: StackingEditor,
|
|
override: StackingEditor,
|
|
settings: {
|
|
options: graphFieldOptions.stacking,
|
|
},
|
|
process: identityOverrideProcessor,
|
|
shouldApply: (f) => f.type === FieldType.number,
|
|
showIf: (opts, data) => !originalDataHasHistogram(data),
|
|
})
|
|
.addSliderInput({
|
|
path: 'lineWidth',
|
|
name: t('histogram.name-line-width', 'Line width'),
|
|
category,
|
|
defaultValue: cfg.lineWidth,
|
|
settings: {
|
|
min: 0,
|
|
max: 10,
|
|
step: 1,
|
|
},
|
|
})
|
|
.addSliderInput({
|
|
path: 'fillOpacity',
|
|
name: t('histogram.name-fill-opacity', 'Fill opacity'),
|
|
category,
|
|
defaultValue: cfg.fillOpacity,
|
|
settings: {
|
|
min: 0,
|
|
max: 100,
|
|
step: 1,
|
|
},
|
|
})
|
|
.addRadio({
|
|
path: 'gradientMode',
|
|
name: t('histogram.name-gradient-mode', 'Gradient mode'),
|
|
category,
|
|
defaultValue: graphFieldOptions.fillGradient[0].value,
|
|
settings: {
|
|
options: graphFieldOptions.fillGradient,
|
|
},
|
|
});
|
|
|
|
commonOptionsBuilder.addHideFrom(builder);
|
|
},
|
|
});
|