mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-06-20 20:37:18 +08:00
74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
package godruid
|
|
|
|
type Having struct {
|
|
Type string `json:"type"`
|
|
Aggregation string `json:"aggregation,omitempty"`
|
|
Value interface{} `json:"value,omitempty"`
|
|
HavingSpec *Having `json:"havingSpec,omitempty"`
|
|
HavingSpecs []*Having `json:"havingSpecs,omitempty"`
|
|
}
|
|
|
|
func HavingEqualTo(agg string, value interface{}) *Having {
|
|
return &Having{
|
|
Type: "equalTo",
|
|
Aggregation: agg,
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func HavingGreaterThan(agg string, value interface{}) *Having {
|
|
return &Having{
|
|
Type: "greaterThan",
|
|
Aggregation: agg,
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func HavingLessThan(agg string, value interface{}) *Having {
|
|
return &Having{
|
|
Type: "lessThan",
|
|
Aggregation: agg,
|
|
Value: value,
|
|
}
|
|
}
|
|
|
|
func HavingAnd(havings ...*Having) *Having {
|
|
return joinHavings(havings, "and")
|
|
}
|
|
|
|
func HavingOr(havings ...*Having) *Having {
|
|
return joinHavings(havings, "or")
|
|
}
|
|
|
|
func HavingNot(having *Having) *Having {
|
|
return &Having{
|
|
Type: "not",
|
|
HavingSpec: having,
|
|
}
|
|
}
|
|
|
|
func joinHavings(havings []*Having, connector string) *Having {
|
|
// Remove null havings.
|
|
p := 0
|
|
for _, h := range havings {
|
|
if h != nil {
|
|
havings[p] = h
|
|
p++
|
|
}
|
|
}
|
|
havings = havings[0:p]
|
|
|
|
fLen := len(havings)
|
|
if fLen == 0 {
|
|
return nil
|
|
}
|
|
if fLen == 1 {
|
|
return havings[0]
|
|
}
|
|
|
|
return &Having{
|
|
Type: connector,
|
|
HavingSpecs: havings,
|
|
}
|
|
}
|