| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import { colors, getFlotPairs, getColorFromHexRgbOrName, getDisplayProcessor, PanelData } from '@grafana/ui';
- import { NullValueMode, reduceField, FieldCache, FieldType, DisplayValue, GraphSeriesXY } from '@grafana/data';
- import { SeriesOptions, GraphOptions } from './types';
- import { GraphLegendEditorLegendOptions } from './GraphLegendEditor';
- export const getGraphSeriesModel = (
- data: PanelData,
- seriesOptions: SeriesOptions,
- graphOptions: GraphOptions,
- legendOptions: GraphLegendEditorLegendOptions
- ) => {
- const graphs: GraphSeriesXY[] = [];
- const displayProcessor = getDisplayProcessor({
- field: {
- decimals: legendOptions.decimals,
- },
- });
- for (const series of data.series) {
- const fieldCache = new FieldCache(series.fields);
- const timeColumn = fieldCache.getFirstFieldOfType(FieldType.time);
- if (!timeColumn) {
- continue;
- }
- const numberFields = fieldCache.getFields(FieldType.number);
- for (let i = 0; i < numberFields.length; i++) {
- const field = numberFields[i];
- // Use external calculator just to make sure it works :)
- const points = getFlotPairs({
- series,
- xIndex: timeColumn.index,
- yIndex: field.index,
- nullValueMode: NullValueMode.Null,
- });
- if (points.length > 0) {
- const seriesStats = reduceField({
- series,
- reducers: legendOptions.stats,
- fieldIndex: field.index,
- });
- let statsDisplayValues: DisplayValue[];
- if (legendOptions.stats) {
- statsDisplayValues = legendOptions.stats.map<DisplayValue>(stat => {
- const statDisplayValue = displayProcessor(seriesStats[stat]);
- return {
- ...statDisplayValue,
- text: statDisplayValue.text,
- title: stat,
- };
- });
- }
- const seriesColor =
- seriesOptions[field.name] && seriesOptions[field.name].color
- ? getColorFromHexRgbOrName(seriesOptions[field.name].color)
- : colors[graphs.length % colors.length];
- graphs.push({
- label: field.name,
- data: points,
- color: seriesColor,
- info: statsDisplayValues,
- isVisible: true,
- yAxis: (seriesOptions[field.name] && seriesOptions[field.name].yAxis) || 1,
- });
- }
- }
- }
- return graphs;
- };
|