package cloudwatch import ( "github.com/grafana/grafana-plugin-sdk-go/data" ) func groupResponseFrame(frame *data.Frame, statsGroups []string) (data.Frames, error) { var dataFrames data.Frames // When a query of the form "stats ... by ..." is made, we want to return // one series per group defined in the query, but due to the format // the query response is in, there does not seem to be a way to tell // by the response alone if/how the results should be grouped. // Because of this, if the frontend sees that a "stats ... by ..." query is being made // the "statsGroups" parameter is sent along with the query to the backend so that we // can correctly group the CloudWatch logs response. // Check if we have time field though as it makes sense to split only for time series. if hasTimeField(frame) { if len(statsGroups) > 0 && len(frame.Fields) > 0 { groupedFrames, err := groupResults(frame, statsGroups) if err != nil { return nil, err } dataFrames = groupedFrames } else { setPreferredVisType(frame, "logs") dataFrames = data.Frames{frame} } } else { dataFrames = data.Frames{frame} } return dataFrames, nil } func hasTimeField(frame *data.Frame) bool { for _, field := range frame.Fields { if field.Type() == data.FieldTypeNullableTime { return true } } return false } func setPreferredVisType(frame *data.Frame, visType data.VisType) { if frame.Meta != nil { frame.Meta.PreferredVisualization = visType } else { frame.Meta = &data.FrameMeta{ PreferredVisualization: visType, } } }