diff --git a/pkg/datasource/models.go b/pkg/datasource/models.go index fb0d897..89c71fb 100644 --- a/pkg/datasource/models.go +++ b/pkg/datasource/models.go @@ -111,6 +111,11 @@ type QueryFunctionParamDef struct { type QueryFunctionParam = interface{} +type ScopedVar struct { + Text string `json:"text"` + Value string `json:"value"` +} + // ReadQuery will read and validate Settings from the DataSourceConfg func ReadQuery(query backend.DataQuery) (QueryModel, error) { model := QueryModel{ diff --git a/pkg/datasource/response_handler.go b/pkg/datasource/response_handler.go index ef304a4..466b055 100644 --- a/pkg/datasource/response_handler.go +++ b/pkg/datasource/response_handler.go @@ -105,9 +105,29 @@ func convertTimeSeriesToDataFrames(series []*timeseries.TimeSeriesData) []*data. func seriesToDataFrame(series *timeseries.TimeSeriesData) *data.Frame { timeFileld := data.NewFieldFromFieldType(data.FieldTypeTime, 0) timeFileld.Name = data.TimeSeriesTimeFieldName + seriesName := series.Meta.Name valueField := data.NewFieldFromFieldType(data.FieldTypeNullableFloat64, 0) valueField.Name = data.TimeSeriesValueFieldName + + item := series.Meta.Item + scopedVars := map[string]ScopedVar{ + "__zbx_item": {Value: item.Name}, + "__zbx_item_name": {Value: item.Name}, + "__zbx_item_key": {Value: item.Key}, + "__zbx_item_interval": {Value: item.Delay}, + "__zbx_host": {Value: item.Delay}, + } + if len(item.Hosts) > 0 { + scopedVars["__zbx_host"] = ScopedVar{Value: item.Hosts[0].Name} + scopedVars["__zbx_host_name"] = ScopedVar{Value: item.Hosts[0].Name} + } + valueField.Config = &data.FieldConfig{ + Custom: map[string]interface{}{ + "scopedVars": scopedVars, + }, + } + frame := data.NewFrame(seriesName, timeFileld, valueField) for _, point := range series.TS { diff --git a/src/datasource-zabbix/dataProcessor.ts b/src/datasource-zabbix/dataProcessor.ts index ce09c04..c68ff86 100644 --- a/src/datasource-zabbix/dataProcessor.ts +++ b/src/datasource-zabbix/dataProcessor.ts @@ -77,8 +77,8 @@ function sortSeries(direction, timeseries: any[]) { function setAlias(alias: string, frame: DataFrame) { if (frame.fields?.length <= 2) { const valueFileld = frame.fields.find(f => f.name === TIME_SERIES_VALUE_FIELD_NAME); - if (valueFileld?.state?.scopedVars) { - alias = getTemplateSrv().replace(alias, valueFileld?.state?.scopedVars); + if (valueFileld?.config?.custom?.scopedVars) { + alias = getTemplateSrv().replace(alias, valueFileld?.config?.custom?.scopedVars); } frame.name = alias; return frame; @@ -87,8 +87,8 @@ function setAlias(alias: string, frame: DataFrame) { for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) { const field = frame.fields[fieldIndex]; if (field.type !== FieldType.time) { - if (field?.state?.scopedVars) { - alias = getTemplateSrv().replace(alias, field?.state?.scopedVars); + if (field?.config?.custom?.scopedVars) { + alias = getTemplateSrv().replace(alias, field?.config?.custom?.scopedVars); } field.name = alias; }