mirror of
https://github.com/hanzoai/o11y.git
synced 2026-10-15 12:58:33 +00:00
Full rebrand of the SigNoz observability platform: - Go module: github.com/SigNoz/signoz → github.com/hanzoai/o11y - Frontend: @signozhq/* → @hanzo/o11y-*, posthog-js → @hanzo/insights - Docker: signoz/* → ghcr.io/hanzoai/o11y* - ClickHouse → Hanzo Datastore (hanzoai/datastore) - Env vars: SIGNOZ_* → HANZO_* - DB tables: signoz_* → o11y_* - All branding, URLs, docs updated - 2172 files changed
72 lines
2.4 KiB
Go
72 lines
2.4 KiB
Go
package postprocess
|
|
|
|
import (
|
|
v3 "github.com/hanzoai/o11y/pkg/query-service/model/v3"
|
|
)
|
|
|
|
// applyReduceTo applies the reduceTo operator to each series
|
|
// and returns a new series with the reduced value
|
|
// reduceTo can be one of the following:
|
|
// - last
|
|
// - sum
|
|
// - avg
|
|
// - min
|
|
// - max
|
|
func applyReduceTo(result []*v3.Result, queryRangeParams *v3.QueryRangeParamsV3) {
|
|
for _, result := range result {
|
|
builderQueries := queryRangeParams.CompositeQuery.BuilderQueries
|
|
|
|
// reduceTo is only applicable for metrics data source
|
|
// and for table and value panels
|
|
if builderQueries[result.QueryName] != nil && (builderQueries[result.QueryName].DataSource == v3.DataSourceMetrics &&
|
|
(queryRangeParams.CompositeQuery.PanelType == v3.PanelTypeTable || queryRangeParams.CompositeQuery.PanelType == v3.PanelTypeValue)) {
|
|
reduceTo := builderQueries[result.QueryName].ReduceTo
|
|
|
|
switch reduceTo {
|
|
case v3.ReduceToOperatorLast:
|
|
for i := 0; i < len(result.Series); i++ {
|
|
if len(result.Series[i].Points) > 0 {
|
|
result.Series[i].Points = []v3.Point{result.Series[i].Points[len(result.Series[i].Points)-1]}
|
|
}
|
|
}
|
|
case v3.ReduceToOperatorSum:
|
|
for i := 0; i < len(result.Series); i++ {
|
|
var sum float64
|
|
for j := 0; j < len(result.Series[i].Points); j++ {
|
|
sum += result.Series[i].Points[j].Value
|
|
}
|
|
result.Series[i].Points = []v3.Point{{Value: sum}}
|
|
}
|
|
case v3.ReduceToOperatorAvg:
|
|
for i := 0; i < len(result.Series); i++ {
|
|
var sum float64
|
|
for j := 0; j < len(result.Series[i].Points); j++ {
|
|
sum += result.Series[i].Points[j].Value
|
|
}
|
|
result.Series[i].Points = []v3.Point{{Value: sum / float64(len(result.Series[i].Points))}}
|
|
}
|
|
case v3.ReduceToOperatorMin:
|
|
for i := 0; i < len(result.Series); i++ {
|
|
var min float64
|
|
for j := 0; j < len(result.Series[i].Points); j++ {
|
|
if j == 0 || result.Series[i].Points[j].Value < min {
|
|
min = result.Series[i].Points[j].Value
|
|
}
|
|
}
|
|
result.Series[i].Points = []v3.Point{{Value: min}}
|
|
}
|
|
case v3.ReduceToOperatorMax:
|
|
for i := 0; i < len(result.Series); i++ {
|
|
var max float64
|
|
for j := 0; j < len(result.Series[i].Points); j++ {
|
|
if j == 0 || result.Series[i].Points[j].Value > max {
|
|
max = result.Series[i].Points[j].Value
|
|
}
|
|
}
|
|
result.Series[i].Points = []v3.Point{{Value: max}}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|