Fix scoped vars for alias functions

This commit is contained in:
Alexander Zobnin
2021-06-02 14:54:32 +03:00
parent e1557e3924
commit 4ec5616029
3 changed files with 29 additions and 4 deletions

View File

@@ -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{

View File

@@ -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 {

View File

@@ -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;
}