mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
103 lines
2.8 KiB
Go
103 lines
2.8 KiB
Go
|
|
package transition
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
v3 "github.com/SigNoz/signoz/pkg/query-service/model/v3"
|
||
|
|
qbtypes "github.com/SigNoz/signoz/pkg/types/querybuildertypes/querybuildertypesv5"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ConvertV5TimeSeriesDataToV4Result converts v5 TimeSeriesData to v4 Result
|
||
|
|
func ConvertV5TimeSeriesDataToV4Result(v5Data *qbtypes.TimeSeriesData) *v3.Result {
|
||
|
|
if v5Data == nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
result := &v3.Result{
|
||
|
|
QueryName: v5Data.QueryName,
|
||
|
|
Series: make([]*v3.Series, 0),
|
||
|
|
}
|
||
|
|
|
||
|
|
toV4Series := func(ts *qbtypes.TimeSeries) *v3.Series {
|
||
|
|
series := &v3.Series{
|
||
|
|
Labels: make(map[string]string),
|
||
|
|
LabelsArray: make([]map[string]string, 0),
|
||
|
|
Points: make([]v3.Point, 0, len(ts.Values)),
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, label := range ts.Labels {
|
||
|
|
valueStr := fmt.Sprintf("%v", label.Value)
|
||
|
|
series.Labels[label.Key.Name] = valueStr
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(series.Labels) > 0 {
|
||
|
|
series.LabelsArray = append(series.LabelsArray, series.Labels)
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, tsValue := range ts.Values {
|
||
|
|
if tsValue.Partial {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
|
||
|
|
point := v3.Point{
|
||
|
|
Timestamp: tsValue.Timestamp,
|
||
|
|
Value: tsValue.Value,
|
||
|
|
}
|
||
|
|
series.Points = append(series.Points, point)
|
||
|
|
}
|
||
|
|
return series
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, aggBucket := range v5Data.Aggregations {
|
||
|
|
for _, ts := range aggBucket.Series {
|
||
|
|
result.Series = append(result.Series, toV4Series(ts))
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(aggBucket.AnomalyScores) != 0 {
|
||
|
|
result.AnomalyScores = make([]*v3.Series, 0)
|
||
|
|
for _, ts := range aggBucket.AnomalyScores {
|
||
|
|
result.AnomalyScores = append(result.AnomalyScores, toV4Series(ts))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(aggBucket.PredictedSeries) != 0 {
|
||
|
|
result.PredictedSeries = make([]*v3.Series, 0)
|
||
|
|
for _, ts := range aggBucket.PredictedSeries {
|
||
|
|
result.PredictedSeries = append(result.PredictedSeries, toV4Series(ts))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(aggBucket.LowerBoundSeries) != 0 {
|
||
|
|
result.LowerBoundSeries = make([]*v3.Series, 0)
|
||
|
|
for _, ts := range aggBucket.LowerBoundSeries {
|
||
|
|
result.LowerBoundSeries = append(result.LowerBoundSeries, toV4Series(ts))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(aggBucket.UpperBoundSeries) != 0 {
|
||
|
|
result.UpperBoundSeries = make([]*v3.Series, 0)
|
||
|
|
for _, ts := range aggBucket.UpperBoundSeries {
|
||
|
|
result.UpperBoundSeries = append(result.UpperBoundSeries, toV4Series(ts))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return result
|
||
|
|
}
|
||
|
|
|
||
|
|
// ConvertV5TimeSeriesDataSliceToV4Results converts a slice of v5 TimeSeriesData to v4 QueryRangeResponse
|
||
|
|
func ConvertV5TimeSeriesDataSliceToV4Results(v5DataSlice []*qbtypes.TimeSeriesData) *v3.QueryRangeResponse {
|
||
|
|
response := &v3.QueryRangeResponse{
|
||
|
|
ResultType: "matrix", // Time series data is typically "matrix" type
|
||
|
|
Result: make([]*v3.Result, 0, len(v5DataSlice)),
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, v5Data := range v5DataSlice {
|
||
|
|
if result := ConvertV5TimeSeriesDataToV4Result(v5Data); result != nil {
|
||
|
|
response.Result = append(response.Result, result)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return response
|
||
|
|
}
|