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 {
|
||||
res.Error = ErrNonMetricQueryNotSupported
|
||||
} else {
|
||||
frame, err := zabbixDS.queryNumericItems(ctx, &query)
|
||||
frames, err := zabbixDS.queryNumericItems(ctx, &query)
|
||||
if err != nil {
|
||||
res.Error = err
|
||||
} else {
|
||||
res.Frames = append(res.Frames, frame)
|
||||
res.Frames = append(res.Frames, frames...)
|
||||
}
|
||||
}
|
||||
qdr.Responses[q.RefID] = res
|
||||
|
||||
@@ -55,6 +55,10 @@ func convertTimeSeriesToDataFrame(series []*timeseries.TimeSeriesData) *data.Fra
|
||||
timeFileld.Name = "time"
|
||||
frame := data.NewFrame("History", timeFileld)
|
||||
|
||||
if len(series) == 0 {
|
||||
return frame
|
||||
}
|
||||
|
||||
for _, s := range series {
|
||||
field := data.NewFieldFromFieldType(data.FieldTypeNullableFloat64, 0)
|
||||
field.Name = s.Meta.Name
|
||||
@@ -84,6 +88,32 @@ func convertTimeSeriesToDataFrame(series []*timeseries.TimeSeriesData) *data.Fra
|
||||
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 {
|
||||
timeFileld := data.NewFieldFromFieldType(data.FieldTypeTime, 0)
|
||||
timeFileld.Name = "time"
|
||||
|
||||
@@ -41,7 +41,7 @@ func (ds *ZabbixDatasourceInstance) TestConnection(ctx context.Context) (string,
|
||||
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
|
||||
hostFilter := query.Host.Filter
|
||||
appFilter := query.Application.Filter
|
||||
@@ -60,7 +60,7 @@ func (ds *ZabbixDatasourceInstance) queryNumericItems(ctx context.Context, query
|
||||
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)
|
||||
consolidateBy := ds.getConsolidateBy(query)
|
||||
|
||||
@@ -79,10 +79,8 @@ func (ds *ZabbixDatasourceInstance) queryNumericDataForItems(ctx context.Context
|
||||
return nil, err
|
||||
}
|
||||
|
||||
frame := convertTimeSeriesToDataFrame(series)
|
||||
|
||||
// frame := convertHistoryToDataFrame(history, items)
|
||||
return frame, nil
|
||||
frames := convertTimeSeriesToDataFrames(series)
|
||||
return frames, nil
|
||||
}
|
||||
|
||||
func (ds *ZabbixDatasourceInstance) getTrendValueType(query *QueryModel) string {
|
||||
|
||||
Reference in New Issue
Block a user