From 84419de6f5785fa9d8e461333dc8ca62d2f3ba7a Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 6 May 2022 12:17:06 +0300 Subject: [PATCH] Fix displaying metric names and alias functions, closes #1444 --- pkg/datasource/response_handler.go | 9 +++++---- src/datasource-zabbix/dataProcessor.ts | 20 +++++++++++++++----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/pkg/datasource/response_handler.go b/pkg/datasource/response_handler.go index 0931516..293d0c4 100644 --- a/pkg/datasource/response_handler.go +++ b/pkg/datasource/response_handler.go @@ -103,8 +103,8 @@ func convertTimeSeriesToDataFrames(series []*timeseries.TimeSeriesData, valuemap } func seriesToDataFrame(series *timeseries.TimeSeriesData, valuemaps []zabbix.ValueMap) *data.Frame { - timeFileld := data.NewFieldFromFieldType(data.FieldTypeTime, 0) - timeFileld.Name = data.TimeSeriesTimeFieldName + timeField := data.NewFieldFromFieldType(data.FieldTypeTime, 0) + timeField.Name = data.TimeSeriesTimeFieldName seriesName := series.Meta.Name valueField := data.NewFieldFromFieldType(data.FieldTypeNullableFloat64, 0) @@ -136,6 +136,7 @@ func seriesToDataFrame(series *timeseries.TimeSeriesData, valuemaps []zabbix.Val } valueField.Config = &data.FieldConfig{ + DisplayNameFromDS: seriesName, Custom: map[string]interface{}{ "scopedVars": scopedVars, "units": item.Units, @@ -147,10 +148,10 @@ func seriesToDataFrame(series *timeseries.TimeSeriesData, valuemaps []zabbix.Val valueField.Config.Mappings = mappings } - frame := data.NewFrame(seriesName, timeFileld, valueField) + frame := data.NewFrame(seriesName, timeField, valueField) for _, point := range series.TS { - timeFileld.Append(point.Time) + timeField.Append(point.Time) valueField.Append(point.Value) } diff --git a/src/datasource-zabbix/dataProcessor.ts b/src/datasource-zabbix/dataProcessor.ts index 2243f4a..5c1e8e8 100644 --- a/src/datasource-zabbix/dataProcessor.ts +++ b/src/datasource-zabbix/dataProcessor.ts @@ -9,6 +9,9 @@ function setAlias(alias: string, frame: DataFrame) { if (valueField?.config?.custom?.scopedVars) { alias = getTemplateSrv().replace(alias, valueField?.config?.custom?.scopedVars); } + if (valueField) { + valueField.config.displayNameFromDS = alias; + } frame.name = alias; return frame; } @@ -19,7 +22,7 @@ function setAlias(alias: string, frame: DataFrame) { if (field?.config?.custom?.scopedVars) { alias = getTemplateSrv().replace(alias, field?.config?.custom?.scopedVars); } - field.name = alias; + field.config.displayNameFromDS = alias; } } return frame; @@ -39,17 +42,20 @@ function replaceAlias(regexp: string, newAlias: string, frame: DataFrame) { if (valueField?.state?.scopedVars) { alias = getTemplateSrv().replace(alias, valueField?.state?.scopedVars); } + if (valueField) { + valueField.config.displayNameFromDS = alias; + } frame.name = alias; return frame; } for (const field of frame.fields) { if (field.type !== FieldType.time) { - let alias = field.name.replace(pattern, newAlias); - if (field?.state?.scopedVars) { + let alias = field.config?.displayNameFromDS?.replace(pattern, newAlias); + if (field?.state?.scopedVars && alias) { alias = getTemplateSrv().replace(alias, field?.state?.scopedVars); } - field.name = alias; + field.name = alias || field.name; } } return frame; @@ -57,7 +63,11 @@ function replaceAlias(regexp: string, newAlias: string, frame: DataFrame) { function setAliasByRegex(alias: string, frame: DataFrame) { if (frame.fields?.length <= 2) { + const valueField = frame.fields.find(f => f.name === TIME_SERIES_VALUE_FIELD_NAME); try { + if (valueField) { + valueField.config.displayNameFromDS = extractText(valueField.config?.displayNameFromDS, alias); + } frame.name = extractText(frame.name, alias); } catch (error) { console.error('Failed to apply RegExp:', error?.message || error); @@ -68,7 +78,7 @@ function setAliasByRegex(alias: string, frame: DataFrame) { for (const field of frame.fields) { if (field.type !== FieldType.time) { try { - field.name = extractText(field.name, alias); + field.config.displayNameFromDS = extractText(field.config?.displayNameFromDS, alias); } catch (error) { console.error('Failed to apply RegExp:', error?.message || error); }