Add min/max/first selector for alerts (#7076)

This commit is contained in:
Ezra Odio
2024-08-01 10:30:57 -04:00
committed by GitHub
parent 8725fa4737
commit fc1e1f7a01
6 changed files with 128 additions and 33 deletions

View File

@@ -49,7 +49,9 @@ class TestAlertEvaluate(BaseTestCase):
def create_alert(self, results, column="foo", value="1"):
result = self.factory.create_query_result(data=results)
query = self.factory.create_query(latest_query_data_id=result.id)
alert = self.factory.create_alert(query_rel=query, options={"op": "equals", "column": column, "value": value})
alert = self.factory.create_alert(
query_rel=query, options={"selector": "first", "op": "equals", "column": column, "value": value}
)
return alert
def test_evaluate_triggers_alert_when_equal(self):
@@ -69,6 +71,24 @@ class TestAlertEvaluate(BaseTestCase):
alert = self.create_alert(results)
self.assertEqual(alert.evaluate(), Alert.UNKNOWN_STATE)
def test_evaluates_correctly_with_max_selector(self):
results = {"rows": [{"foo": 1}, {"foo": 2}], "columns": [{"name": "foo", "type": "STRING"}]}
alert = self.create_alert(results)
alert.options["selector"] = "max"
self.assertEqual(alert.evaluate(), Alert.OK_STATE)
def test_evaluates_correctly_with_min_selector(self):
results = {"rows": [{"foo": 2}, {"foo": 1}], "columns": [{"name": "foo", "type": "STRING"}]}
alert = self.create_alert(results)
alert.options["selector"] = "min"
self.assertEqual(alert.evaluate(), Alert.TRIGGERED_STATE)
def test_evaluates_correctly_with_first_selector(self):
results = {"rows": [{"foo": 1}, {"foo": 2}], "columns": [{"name": "foo", "type": "STRING"}]}
alert = self.create_alert(results)
alert.options["selector"] = "first"
self.assertEqual(alert.evaluate(), Alert.TRIGGERED_STATE)
class TestNextState(TestCase):
def test_numeric_value(self):
@@ -94,7 +114,9 @@ class TestAlertRenderTemplate(BaseTestCase):
def create_alert(self, results, column="foo", value="5"):
result = self.factory.create_query_result(data=results)
query = self.factory.create_query(latest_query_data_id=result.id)
alert = self.factory.create_alert(query_rel=query, options={"op": "equals", "column": column, "value": value})
alert = self.factory.create_alert(
query_rel=query, options={"selector": "first", "op": "equals", "column": column, "value": value}
)
return alert
def test_render_custom_alert_template(self):
@@ -102,6 +124,7 @@ class TestAlertRenderTemplate(BaseTestCase):
custom_alert = """
<pre>
ALERT_STATUS {{ALERT_STATUS}}
ALERT_SELECTOR {{ALERT_SELECTOR}}
ALERT_CONDITION {{ALERT_CONDITION}}
ALERT_THRESHOLD {{ALERT_THRESHOLD}}
ALERT_NAME {{ALERT_NAME}}
@@ -116,6 +139,7 @@ class TestAlertRenderTemplate(BaseTestCase):
expected = """
<pre>
ALERT_STATUS UNKNOWN
ALERT_SELECTOR first
ALERT_CONDITION equals
ALERT_THRESHOLD 5
ALERT_NAME %s