50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package datasource
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/grafana/grafana-plugin-sdk-go/data"
|
|
)
|
|
|
|
func convertHistoryToDataFrame(history History, items Items) *data.Frame {
|
|
timeFileld := data.NewFieldFromFieldType(data.FieldTypeTime, 0)
|
|
timeFileld.Name = "time"
|
|
frame := data.NewFrame("History", timeFileld)
|
|
|
|
for _, item := range items {
|
|
field := data.NewFieldFromFieldType(data.FieldTypeNullableFloat64, 0)
|
|
if len(item.Hosts) > 0 {
|
|
field.Name = fmt.Sprintf("%s: %s", item.Hosts[0].Name, item.ExpandItem())
|
|
} else {
|
|
field.Name = item.ExpandItem()
|
|
}
|
|
frame.Fields = append(frame.Fields, field)
|
|
}
|
|
|
|
for _, point := range history {
|
|
for columnIndex, field := range frame.Fields {
|
|
if columnIndex == 0 {
|
|
ts := time.Unix(point.Clock, point.NS)
|
|
field.Append(ts)
|
|
} else {
|
|
item := items[columnIndex-1]
|
|
if point.ItemID == item.ID {
|
|
value := point.Value
|
|
field.Append(&value)
|
|
} else {
|
|
field.Append(nil)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
wideFrame, err := data.LongToWide(frame, &data.FillMissing{Mode: data.FillModeNull})
|
|
if err != nil {
|
|
backend.Logger.Debug("Error converting data frame to the wide format", "error", err)
|
|
return frame
|
|
}
|
|
return wideFrame
|
|
}
|