Return multiple frames (frame per series)
This commit is contained in:
@@ -125,11 +125,11 @@ func (ds *ZabbixDatasource) QueryData(ctx context.Context, req *backend.QueryDat
|
|||||||
} else if query.Mode != 0 {
|
} else if query.Mode != 0 {
|
||||||
res.Error = ErrNonMetricQueryNotSupported
|
res.Error = ErrNonMetricQueryNotSupported
|
||||||
} else {
|
} else {
|
||||||
frame, err := zabbixDS.queryNumericItems(ctx, &query)
|
frames, err := zabbixDS.queryNumericItems(ctx, &query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res.Error = err
|
res.Error = err
|
||||||
} else {
|
} else {
|
||||||
res.Frames = append(res.Frames, frame)
|
res.Frames = append(res.Frames, frames...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qdr.Responses[q.RefID] = res
|
qdr.Responses[q.RefID] = res
|
||||||
|
|||||||
@@ -55,6 +55,10 @@ func convertTimeSeriesToDataFrame(series []*timeseries.TimeSeriesData) *data.Fra
|
|||||||
timeFileld.Name = "time"
|
timeFileld.Name = "time"
|
||||||
frame := data.NewFrame("History", timeFileld)
|
frame := data.NewFrame("History", timeFileld)
|
||||||
|
|
||||||
|
if len(series) == 0 {
|
||||||
|
return frame
|
||||||
|
}
|
||||||
|
|
||||||
for _, s := range series {
|
for _, s := range series {
|
||||||
field := data.NewFieldFromFieldType(data.FieldTypeNullableFloat64, 0)
|
field := data.NewFieldFromFieldType(data.FieldTypeNullableFloat64, 0)
|
||||||
field.Name = s.Meta.Name
|
field.Name = s.Meta.Name
|
||||||
@@ -84,6 +88,32 @@ func convertTimeSeriesToDataFrame(series []*timeseries.TimeSeriesData) *data.Fra
|
|||||||
return wideFrame
|
return wideFrame
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func convertTimeSeriesToDataFrames(series []*timeseries.TimeSeriesData) []*data.Frame {
|
||||||
|
frames := make([]*data.Frame, 0)
|
||||||
|
|
||||||
|
for _, s := range series {
|
||||||
|
frames = append(frames, seriesToDataFrame(s))
|
||||||
|
}
|
||||||
|
|
||||||
|
return frames
|
||||||
|
}
|
||||||
|
|
||||||
|
func seriesToDataFrame(series *timeseries.TimeSeriesData) *data.Frame {
|
||||||
|
timeFileld := data.NewFieldFromFieldType(data.FieldTypeTime, 0)
|
||||||
|
timeFileld.Name = "time"
|
||||||
|
seriesName := series.Meta.Name
|
||||||
|
valueField := data.NewFieldFromFieldType(data.FieldTypeNullableFloat64, 0)
|
||||||
|
valueField.Name = seriesName
|
||||||
|
frame := data.NewFrame(seriesName, timeFileld, valueField)
|
||||||
|
|
||||||
|
for _, point := range series.TS {
|
||||||
|
timeFileld.Append(point.Time)
|
||||||
|
valueField.Append(point.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return frame
|
||||||
|
}
|
||||||
|
|
||||||
func convertHistoryToDataFrame(history zabbix.History, items []*zabbix.Item) *data.Frame {
|
func convertHistoryToDataFrame(history zabbix.History, items []*zabbix.Item) *data.Frame {
|
||||||
timeFileld := data.NewFieldFromFieldType(data.FieldTypeTime, 0)
|
timeFileld := data.NewFieldFromFieldType(data.FieldTypeTime, 0)
|
||||||
timeFileld.Name = "time"
|
timeFileld.Name = "time"
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func (ds *ZabbixDatasourceInstance) TestConnection(ctx context.Context) (string,
|
|||||||
return string(resultByte), nil
|
return string(resultByte), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ds *ZabbixDatasourceInstance) queryNumericItems(ctx context.Context, query *QueryModel) (*data.Frame, error) {
|
func (ds *ZabbixDatasourceInstance) queryNumericItems(ctx context.Context, query *QueryModel) ([]*data.Frame, error) {
|
||||||
groupFilter := query.Group.Filter
|
groupFilter := query.Group.Filter
|
||||||
hostFilter := query.Host.Filter
|
hostFilter := query.Host.Filter
|
||||||
appFilter := query.Application.Filter
|
appFilter := query.Application.Filter
|
||||||
@@ -60,7 +60,7 @@ func (ds *ZabbixDatasourceInstance) queryNumericItems(ctx context.Context, query
|
|||||||
return frames, nil
|
return frames, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ds *ZabbixDatasourceInstance) queryNumericDataForItems(ctx context.Context, query *QueryModel, items []*zabbix.Item) (*data.Frame, error) {
|
func (ds *ZabbixDatasourceInstance) queryNumericDataForItems(ctx context.Context, query *QueryModel, items []*zabbix.Item) ([]*data.Frame, error) {
|
||||||
valueType := ds.getTrendValueType(query)
|
valueType := ds.getTrendValueType(query)
|
||||||
consolidateBy := ds.getConsolidateBy(query)
|
consolidateBy := ds.getConsolidateBy(query)
|
||||||
|
|
||||||
@@ -79,10 +79,8 @@ func (ds *ZabbixDatasourceInstance) queryNumericDataForItems(ctx context.Context
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
frame := convertTimeSeriesToDataFrame(series)
|
frames := convertTimeSeriesToDataFrames(series)
|
||||||
|
return frames, nil
|
||||||
// frame := convertHistoryToDataFrame(history, items)
|
|
||||||
return frame, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ds *ZabbixDatasourceInstance) getTrendValueType(query *QueryModel) string {
|
func (ds *ZabbixDatasourceInstance) getTrendValueType(query *QueryModel) string {
|
||||||
|
|||||||
Reference in New Issue
Block a user