Add boolean thresholds for kapacitor threshold alerts
parent
d899b8b07f
commit
e97c510e63
|
@ -76,10 +76,12 @@ func Vars(rule chronograf.AlertRule) (string, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotEmpty is an error collector checking if strings are empty values
|
||||||
type NotEmpty struct {
|
type NotEmpty struct {
|
||||||
Err error
|
Err error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Valid checks if string s is empty and if so reports an error using name
|
||||||
func (n *NotEmpty) Valid(name, s string) error {
|
func (n *NotEmpty) Valid(name, s string) error {
|
||||||
if n.Err != nil {
|
if n.Err != nil {
|
||||||
return n.Err
|
return n.Err
|
||||||
|
@ -91,6 +93,7 @@ func (n *NotEmpty) Valid(name, s string) error {
|
||||||
return n.Err
|
return n.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Escape sanitizes strings with single quotes for kapacitor
|
||||||
func Escape(str string) string {
|
func Escape(str string) string {
|
||||||
return strings.Replace(str, "'", `\'`, -1)
|
return strings.Replace(str, "'", `\'`, -1)
|
||||||
}
|
}
|
||||||
|
@ -251,5 +254,10 @@ func formatValue(value string) string {
|
||||||
if _, err := strconv.ParseFloat(value, 64); err == nil {
|
if _, err := strconv.ParseFloat(value, 64); err == nil {
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
return "'" + value + "'"
|
|
||||||
|
// If the value is a kapacitor boolean value perform no formatting
|
||||||
|
if value == "TRUE" || value == "FALSE" {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
return "'" + Escape(value) + "'"
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,3 +49,39 @@ func TestVarsCritStringEqual(t *testing.T) {
|
||||||
t.Errorf("Error validating alert: %v %s", err, tick)
|
t.Errorf("Error validating alert: %v %s", err, tick)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_formatValue(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
value string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "parses floats",
|
||||||
|
value: "3.14",
|
||||||
|
want: "3.14",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "parses booleans",
|
||||||
|
value: "TRUE",
|
||||||
|
want: "TRUE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "single quotes for strings",
|
||||||
|
value: "up",
|
||||||
|
want: "'up'",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "handles escaping of single quotes",
|
||||||
|
value: "down's",
|
||||||
|
want: "'down\\'s'",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := formatValue(tt.value); got != tt.want {
|
||||||
|
t.Errorf("formatValue() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue