UNPKG

@grafana/ui

Version:
1 lines • 22 kB
{"version":3,"file":"SingleStatBaseOptions.mjs","sources":["../../../../src/components/SingleStatShared/SingleStatBaseOptions.ts"],"sourcesContent":["import { cloneDeep, identity, isNumber, omit, pickBy } from 'lodash';\n\nimport {\n convertOldAngularValueMappings,\n FieldColorModeId,\n FieldConfig,\n fieldReducers,\n PanelModel,\n ReduceDataOptions,\n ReducerID,\n sortThresholds,\n Threshold,\n ThresholdsConfig,\n ThresholdsMode,\n validateFieldConfig,\n ValueMapping,\n VizOrientation,\n} from '@grafana/data';\nimport { LegendDisplayMode, OptionsWithLegend, OptionsWithTextFormatting } from '@grafana/schema';\n\nexport interface SingleStatBaseOptions extends OptionsWithTextFormatting {\n reduceOptions: ReduceDataOptions;\n orientation: VizOrientation;\n}\n\nconst optionsToKeep = ['reduceOptions', 'orientation'];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function sharedSingleStatPanelChangedHandler(\n panel: PanelModel<Partial<SingleStatBaseOptions>> | any,\n prevPluginId: string,\n prevOptions: any\n) {\n let options = panel.options;\n\n panel.fieldConfig = panel.fieldConfig || {\n defaults: {},\n overrides: [],\n };\n\n // Migrating from angular singlestat\n if (prevPluginId === 'singlestat' && prevOptions.angular) {\n return migrateFromAngularSinglestat(panel, prevOptions);\n } else if (prevPluginId === 'graph') {\n // Migrating from Graph panel\n return migrateFromGraphPanel(panel, prevOptions);\n }\n\n for (const k of optionsToKeep) {\n if (prevOptions.hasOwnProperty(k)) {\n options[k] = cloneDeep(prevOptions[k]);\n }\n }\n\n return options;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction migrateFromGraphPanel(panel: PanelModel<Partial<SingleStatBaseOptions>> | any, prevOptions: any) {\n const graphOptions: GraphOptions = prevOptions.angular;\n\n const options: SingleStatBaseOptions & OptionsWithLegend = {\n orientation: VizOrientation.Auto,\n reduceOptions: {\n values: false,\n calcs: [],\n },\n legend: {\n displayMode: LegendDisplayMode.List,\n showLegend: true,\n placement: 'bottom',\n calcs: [],\n },\n };\n\n if (graphOptions.xaxis?.mode === 'series') {\n panel.fieldConfig = {\n ...panel.fieldConfig,\n defaults: {\n ...panel.fieldConfig.defaults,\n color: { mode: 'palette-classic' },\n },\n };\n\n // Value options calculation migration\n if (graphOptions.xaxis.values) {\n options.reduceOptions.calcs = getReducerForMigration(graphOptions.xaxis.values);\n }\n\n // Legend migration\n const legendConfig = graphOptions.legend;\n if (legendConfig) {\n if (legendConfig.show) {\n options.legend.displayMode = legendConfig.alignAsTable ? LegendDisplayMode.Table : LegendDisplayMode.List;\n } else {\n options.legend.showLegend = false;\n }\n\n if (legendConfig.rightSide) {\n options.legend.placement = 'right';\n }\n\n if (legendConfig.values) {\n const enabledLegendValues = pickBy(legendConfig, identity);\n options.legend.calcs = getReducersFromLegend(enabledLegendValues);\n }\n\n if (legendConfig.sideWidth) {\n options.legend.width = legendConfig.sideWidth;\n }\n }\n }\n\n return options;\n}\n\nfunction migrateFromAngularSinglestat(panel: PanelModel<Partial<SingleStatBaseOptions>> | any, prevOptions: any) {\n const prevPanel = prevOptions.angular;\n const reducer = fieldReducers.getIfExists(prevPanel.valueName);\n const options: SingleStatBaseOptions = {\n reduceOptions: {\n calcs: [reducer ? reducer.id : ReducerID.mean],\n },\n orientation: VizOrientation.Horizontal,\n };\n\n const defaults: FieldConfig = {};\n\n if (prevPanel.format) {\n defaults.unit = prevPanel.format;\n }\n\n if (prevPanel.tableColumn) {\n options.reduceOptions.fields = `/^${prevPanel.tableColumn}$/`;\n }\n\n if (prevPanel.nullPointMode) {\n defaults.nullValueMode = prevPanel.nullPointMode;\n }\n\n if (prevPanel.nullText) {\n defaults.noValue = prevPanel.nullText;\n }\n\n if (prevPanel.decimals || prevPanel.decimals === 0) {\n defaults.decimals = prevPanel.decimals;\n }\n\n // Convert thresholds and color values\n if (prevPanel.thresholds && prevPanel.colors) {\n const levels = prevPanel.thresholds.split(',').map((strVale: string) => {\n return Number(strVale.trim());\n });\n\n // One more color than threshold\n const thresholds: Threshold[] = [];\n for (const color of prevPanel.colors) {\n const idx = thresholds.length - 1;\n if (idx >= 0) {\n thresholds.push({ value: levels[idx], color });\n } else {\n thresholds.push({ value: -Infinity, color });\n }\n }\n\n defaults.thresholds = {\n mode: ThresholdsMode.Absolute,\n steps: thresholds,\n };\n }\n\n // Convert value mappings\n const mappings = convertOldAngularValueMappings(prevPanel, defaults.thresholds);\n if (mappings && mappings.length) {\n defaults.mappings = mappings;\n }\n\n if (prevPanel.gauge && prevPanel.gauge.show) {\n defaults.min = prevPanel.gauge.minValue;\n defaults.max = prevPanel.gauge.maxValue;\n }\n\n panel.fieldConfig.defaults = defaults;\n\n return options;\n}\n\nexport function sharedSingleStatMigrationHandler(panel: PanelModel<SingleStatBaseOptions>): SingleStatBaseOptions {\n if (!panel.options) {\n // This happens on the first load or when migrating from angular\n return {\n reduceOptions: {\n calcs: [ReducerID.mean],\n },\n orientation: VizOrientation.Horizontal,\n };\n }\n\n const previousVersion = parseFloat(panel.pluginVersion || '6.1');\n let options = panel.options as any;\n\n if (previousVersion < 6.2) {\n options = migrateFromValueOptions(options);\n }\n\n if (previousVersion < 6.3) {\n options = moveThresholdsAndMappingsToField(options);\n }\n\n const { fieldOptions } = options;\n\n if (previousVersion < 6.6 && fieldOptions) {\n // discard the old `override` options and enter an empty array\n if (fieldOptions && fieldOptions.override) {\n const { override, ...rest } = options.fieldOptions;\n options = {\n ...options,\n fieldOptions: {\n ...rest,\n overrides: [],\n },\n };\n }\n\n // Move thresholds to steps\n let thresholds = fieldOptions?.defaults?.thresholds;\n if (thresholds) {\n delete fieldOptions.defaults.thresholds;\n } else {\n thresholds = fieldOptions?.thresholds;\n delete fieldOptions.thresholds;\n }\n\n if (thresholds) {\n fieldOptions.defaults.thresholds = {\n mode: ThresholdsMode.Absolute,\n steps: thresholds,\n };\n }\n\n // Migrate color from simple string to a mode\n const { defaults } = fieldOptions;\n if (defaults.color && typeof defaults.color === 'string') {\n defaults.color = {\n mode: FieldColorModeId.Fixed,\n fixedColor: defaults.color,\n };\n }\n\n validateFieldConfig(defaults);\n }\n\n if (previousVersion < 7.0) {\n panel.fieldConfig = panel.fieldConfig || { defaults: {}, overrides: [] };\n panel.fieldConfig = {\n defaults:\n fieldOptions && fieldOptions.defaults\n ? { ...panel.fieldConfig.defaults, ...fieldOptions.defaults }\n : panel.fieldConfig.defaults,\n overrides:\n fieldOptions && fieldOptions.overrides\n ? [...panel.fieldConfig.overrides, ...fieldOptions.overrides]\n : panel.fieldConfig.overrides,\n };\n\n if (fieldOptions) {\n options.reduceOptions = {\n values: fieldOptions.values,\n limit: fieldOptions.limit,\n calcs: fieldOptions.calcs,\n };\n }\n\n delete options.fieldOptions;\n }\n\n if (previousVersion < 7.1) {\n // move title to displayName\n const oldTitle = (panel.fieldConfig.defaults as any).title;\n if (oldTitle !== undefined && oldTitle !== null) {\n panel.fieldConfig.defaults.displayName = oldTitle;\n delete (panel.fieldConfig.defaults as any).title;\n }\n }\n\n if (previousVersion < 8.0) {\n // Explicit min/max was removed for percent/percentunit in 8.0\n const config = panel.fieldConfig?.defaults;\n let unit = config?.unit;\n if (unit === 'percent') {\n if (!isNumber(config.min)) {\n config.min = 0;\n }\n if (!isNumber(config.max)) {\n config.max = 100;\n }\n } else if (unit === 'percentunit') {\n if (!isNumber(config.min)) {\n config.min = 0;\n }\n if (!isNumber(config.max)) {\n config.max = 1;\n }\n }\n }\n\n return options;\n}\n\nexport function moveThresholdsAndMappingsToField(old: any) {\n const { fieldOptions } = old;\n\n if (!fieldOptions) {\n return old;\n }\n\n const { mappings, ...rest } = old.fieldOptions;\n\n let thresholds: ThresholdsConfig | undefined = undefined;\n if (old.thresholds) {\n thresholds = {\n mode: ThresholdsMode.Absolute,\n steps: migrateOldThresholds(old.thresholds)!,\n };\n }\n\n return {\n ...old,\n fieldOptions: {\n ...rest,\n defaults: {\n ...fieldOptions.defaults,\n mappings,\n thresholds,\n },\n },\n };\n}\n\n/*\n * Moves valueMappings and thresholds from root to new fieldOptions object\n * Renames valueOptions to to defaults and moves it under fieldOptions\n */\nexport function migrateFromValueOptions(old: any) {\n const { valueOptions } = old;\n if (!valueOptions) {\n return old;\n }\n\n const fieldOptions: any = {};\n const fieldDefaults: any = {};\n\n fieldOptions.mappings = old.valueMappings;\n fieldOptions.thresholds = old.thresholds;\n fieldOptions.defaults = fieldDefaults;\n\n fieldDefaults.unit = valueOptions.unit;\n fieldDefaults.decimals = valueOptions.decimals;\n\n // Make sure the stats have a valid name\n if (valueOptions.stat) {\n const reducer = fieldReducers.get(valueOptions.stat);\n if (reducer) {\n fieldOptions.calcs = [reducer.id];\n }\n }\n\n fieldDefaults.min = old.minValue;\n fieldDefaults.max = old.maxValue;\n\n const newOptions = {\n ...old,\n fieldOptions,\n };\n\n return omit(newOptions, 'valueMappings', 'thresholds', 'valueOptions', 'minValue', 'maxValue');\n}\n\nexport function migrateOldThresholds(thresholds?: any[]): Threshold[] | undefined {\n if (!thresholds || !thresholds.length) {\n return undefined;\n }\n const copy = thresholds.map((t) => {\n return {\n // Drops 'index'\n value: t.value === null ? -Infinity : t.value,\n color: t.color,\n };\n });\n sortThresholds(copy);\n copy[0].value = -Infinity;\n return copy;\n}\n\n/**\n * @deprecated use convertOldAngularValueMappings instead\n * Convert the angular single stat mapping to new react style\n */\nexport function convertOldAngularValueMapping(panel: any): ValueMapping[] {\n return convertOldAngularValueMappings(panel);\n}\n\ninterface GraphOptions {\n xaxis: {\n mode: 'series' | 'time' | 'histogram';\n values?: string[];\n };\n legend: {\n show: boolean;\n alignAsTable: boolean;\n rightSide: boolean;\n values: boolean;\n min?: boolean;\n max?: boolean;\n avg?: boolean;\n current?: boolean;\n total?: boolean;\n sideWidth?: number;\n };\n}\n\nfunction getReducersFromLegend(obj: Record<string, unknown>): string[] {\n const ids: string[] = [];\n for (const key in obj) {\n const reducer = fieldReducers.getIfExists(key);\n if (reducer) {\n ids.push(reducer.id);\n }\n }\n return ids;\n}\n\n// same as public/app/plugins/panel/barchart/migrations.ts\nfunction getReducerForMigration(reducers: string[] | undefined) {\n const transformReducers: string[] = [];\n\n reducers?.forEach((reducer) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n if (!Object.values(ReducerID).includes(reducer as ReducerID)) {\n if (reducer === 'current') {\n transformReducers.push(ReducerID.lastNotNull);\n } else if (reducer === 'total') {\n transformReducers.push(ReducerID.sum);\n } else if (reducer === 'avg') {\n transformReducers.push(ReducerID.mean);\n }\n } else {\n transformReducers.push(reducer);\n }\n });\n\n return reducers ? transformReducers : [ReducerID.sum];\n}\n"],"names":[],"mappings":"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"}