signoz/pkg/querybuilder/agg_funcs.go
2025-05-27 20:54:48 +05:30

283 lines
8.6 KiB
Go

package querybuilder
import (
"github.com/SigNoz/signoz/pkg/valuer"
)
var (
AggreFuncMap = map[valuer.String]AggrFunc{}
)
type AggrFunc struct {
Name valuer.String
FuncName string
Aliases []valuer.String
RequireArgs bool
Numeric bool
FuncCombinator bool
Rate bool
MinArgs int
MaxArgs int
}
var (
AggrFuncCount = AggrFunc{
Name: valuer.NewString("count"),
FuncName: "count",
RequireArgs: false, MinArgs: 0, MaxArgs: 1,
}
AggrFuncCountIf = AggrFunc{
Name: valuer.NewString("countif"),
FuncName: "countIf",
Aliases: []valuer.String{valuer.NewString("count_if")},
RequireArgs: true, FuncCombinator: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncCountDistinct = AggrFunc{
Name: valuer.NewString("countdistinct"),
FuncName: "countDistinct",
Aliases: []valuer.String{valuer.NewString("count_distinct")},
RequireArgs: true, MinArgs: 1, MaxArgs: 10,
}
AggrFuncCountDistinctIf = AggrFunc{
Name: valuer.NewString("countdistinctif"),
FuncName: "countDistinctIf",
Aliases: []valuer.String{valuer.NewString("count_distinct_if")},
RequireArgs: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncSum = AggrFunc{
Name: valuer.NewString("sum"),
FuncName: "sum",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncSumIf = AggrFunc{
Name: valuer.NewString("sumif"),
FuncName: "sumIf",
Aliases: []valuer.String{valuer.NewString("sum_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncAvg = AggrFunc{
Name: valuer.NewString("avg"),
FuncName: "avg",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncAvgIf = AggrFunc{
Name: valuer.NewString("avgif"),
FuncName: "avgIf",
Aliases: []valuer.String{valuer.NewString("avg_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncMin = AggrFunc{
Name: valuer.NewString("min"),
FuncName: "min",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncMinIf = AggrFunc{
Name: valuer.NewString("minif"),
FuncName: "minIf",
Aliases: []valuer.String{valuer.NewString("min_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncMax = AggrFunc{
Name: valuer.NewString("max"),
FuncName: "max",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncMaxIf = AggrFunc{
Name: valuer.NewString("maxif"),
FuncName: "maxIf",
Aliases: []valuer.String{valuer.NewString("max_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP05 = AggrFunc{
Name: valuer.NewString("p05"),
FuncName: "quantile(0.05)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP05IF = AggrFunc{
Name: valuer.NewString("p05if"),
FuncName: "quantileIf(0.05)",
Aliases: []valuer.String{valuer.NewString("p05_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP10 = AggrFunc{
Name: valuer.NewString("p10"),
FuncName: "quantile(0.10)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP10IF = AggrFunc{
Name: valuer.NewString("p10if"),
FuncName: "quantileIf(0.10)",
Aliases: []valuer.String{valuer.NewString("p10_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP20 = AggrFunc{
Name: valuer.NewString("p20"),
FuncName: "quantile(0.20)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP20IF = AggrFunc{
Name: valuer.NewString("p20if"),
FuncName: "quantileIf(0.20)",
Aliases: []valuer.String{valuer.NewString("p20_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP25 = AggrFunc{
Name: valuer.NewString("p25"),
FuncName: "quantile(0.25)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP25IF = AggrFunc{
Name: valuer.NewString("p25if"),
FuncName: "quantileIf(0.25)",
Aliases: []valuer.String{valuer.NewString("p25_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP50 = AggrFunc{
Name: valuer.NewString("p50"),
FuncName: "quantile(0.50)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP50IF = AggrFunc{
Name: valuer.NewString("p50if"),
FuncName: "quantileIf(0.50)",
Aliases: []valuer.String{valuer.NewString("p50_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP75 = AggrFunc{
Name: valuer.NewString("p75"),
FuncName: "quantile(0.75)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP75IF = AggrFunc{
Name: valuer.NewString("p75if"),
FuncName: "quantileIf(0.75)",
Aliases: []valuer.String{valuer.NewString("p75_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP90 = AggrFunc{
Name: valuer.NewString("p90"),
FuncName: "quantile(0.90)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP90IF = AggrFunc{
Name: valuer.NewString("p90if"),
FuncName: "quantileIf(0.90)",
Aliases: []valuer.String{valuer.NewString("p90_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP95 = AggrFunc{
Name: valuer.NewString("p95"),
FuncName: "quantile(0.95)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP95IF = AggrFunc{
Name: valuer.NewString("p95if"),
FuncName: "quantileIf(0.95)",
Aliases: []valuer.String{valuer.NewString("p95_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP99 = AggrFunc{
Name: valuer.NewString("p99"),
FuncName: "quantile(0.99)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP99IF = AggrFunc{
Name: valuer.NewString("p99if"),
FuncName: "quantileIf(0.99)",
Aliases: []valuer.String{valuer.NewString("p99_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncP999 = AggrFunc{
Name: valuer.NewString("p999"),
FuncName: "quantile(0.999)",
RequireArgs: true, Numeric: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncP999IF = AggrFunc{
Name: valuer.NewString("p999if"),
FuncName: "quantileIf(0.999)",
Aliases: []valuer.String{valuer.NewString("p999_if")},
RequireArgs: true, Numeric: true, FuncCombinator: true, MinArgs: 2, MaxArgs: 2,
}
AggrFuncRate = AggrFunc{
Name: valuer.NewString("rate"),
FuncName: "count",
RequireArgs: true, Rate: true, MinArgs: 0, MaxArgs: 1,
}
AggrFuncRateIf = AggrFunc{
Name: valuer.NewString("rateif"),
FuncName: "count",
Aliases: []valuer.String{valuer.NewString("rate_if")},
RequireArgs: true, Rate: true, FuncCombinator: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncRateSum = AggrFunc{
Name: valuer.NewString("rate_sum"),
FuncName: "sum",
RequireArgs: true, Numeric: true, Rate: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncRateAvg = AggrFunc{
Name: valuer.NewString("rate_avg"),
FuncName: "avg",
RequireArgs: true, Numeric: true, Rate: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncRateMin = AggrFunc{
Name: valuer.NewString("rate_min"),
FuncName: "min",
RequireArgs: true, Numeric: true, Rate: true, MinArgs: 1, MaxArgs: 1,
}
AggrFuncRateMax = AggrFunc{
Name: valuer.NewString("rate_max"),
FuncName: "max",
RequireArgs: true, Numeric: true, Rate: true, MinArgs: 1, MaxArgs: 1,
}
)
func init() {
var aggFuncs = []AggrFunc{
AggrFuncCount,
AggrFuncCountIf,
AggrFuncCountDistinct,
AggrFuncCountDistinctIf,
AggrFuncSum,
AggrFuncSumIf,
AggrFuncAvg,
AggrFuncAvgIf,
AggrFuncMin,
AggrFuncMinIf,
AggrFuncMax,
AggrFuncMaxIf,
AggrFuncP05,
AggrFuncP05IF,
AggrFuncP10,
AggrFuncP10IF,
AggrFuncP20,
AggrFuncP20IF,
AggrFuncP25,
AggrFuncP25IF,
AggrFuncP50,
AggrFuncP50IF,
AggrFuncP75,
AggrFuncP75IF,
AggrFuncP90,
AggrFuncP90IF,
AggrFuncP95,
AggrFuncP95IF,
AggrFuncP99,
AggrFuncP99IF,
AggrFuncP999,
AggrFuncP999IF,
AggrFuncRate,
AggrFuncRateIf,
AggrFuncRateSum,
AggrFuncRateAvg,
AggrFuncRateMin,
AggrFuncRateMax,
}
for _, aggFunc := range aggFuncs {
AggreFuncMap[aggFunc.Name] = aggFunc
for _, alias := range aggFunc.Aliases {
AggreFuncMap[alias] = aggFunc
}
}
}