* feat(pyroscope): Exemplar support for series queries use enum flag, add exemplar flag to explore disable exemplars on explore as well tests feature toggle fixing tests * resolve conflicts * lint
44 lines
978 B
Go
44 lines
978 B
Go
package exemplar
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/data"
|
|
)
|
|
|
|
type Exemplar struct {
|
|
Id string
|
|
Value float64
|
|
Timestamp int64
|
|
}
|
|
|
|
func CreateExemplarFrame(labels map[string]string, exemplars []*Exemplar) *data.Frame {
|
|
frame := data.NewFrame("exemplar")
|
|
frame.Meta = &data.FrameMeta{
|
|
DataTopic: data.DataTopicAnnotations,
|
|
}
|
|
fields := []*data.Field{
|
|
data.NewField("Time", nil, []time.Time{}),
|
|
data.NewField("Value", labels, []float64{}), // add labels here?
|
|
data.NewField("Id", nil, []string{}),
|
|
}
|
|
fields[2].Config = &data.FieldConfig{
|
|
DisplayName: "Profile ID",
|
|
}
|
|
for name := range labels {
|
|
fields = append(fields, data.NewField(name, nil, []string{}))
|
|
}
|
|
frame.Fields = fields
|
|
|
|
for _, e := range exemplars {
|
|
frame.AppendRow(time.UnixMilli(e.Timestamp), e.Value, e.Id)
|
|
for name, value := range labels {
|
|
field, _ := frame.FieldByName(name)
|
|
if field != nil {
|
|
field.Append(value)
|
|
}
|
|
}
|
|
}
|
|
return frame
|
|
}
|