mirror of
https://github.com/getredash/redash.git
synced 2025-12-25 01:03:20 -05:00
Fix: Alert.evaluate failing when the column is missing. (#3167)
This commit is contained in:
@@ -1308,7 +1308,8 @@ class Alert(TimestampMixin, db.Model):
|
||||
|
||||
def evaluate(self):
|
||||
data = json_loads(self.query_rel.latest_query_data.data)
|
||||
if data['rows']:
|
||||
|
||||
if data['rows'] and self.options['column'] in data['rows'][0]:
|
||||
value = data['rows'][0][self.options['column']]
|
||||
op = self.options['op']
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from tests import BaseTestCase
|
||||
from redash.models import Alert, db
|
||||
from redash.utils import json_dumps
|
||||
|
||||
|
||||
class TestAlertAll(BaseTestCase):
|
||||
@@ -36,3 +37,28 @@ class TestAlertAll(BaseTestCase):
|
||||
alerts = Alert.all(group_ids=[self.factory.default_group.id, group.id])
|
||||
self.assertEqual(1, len(list(alerts)))
|
||||
self.assertIn(alert, alerts)
|
||||
|
||||
|
||||
def get_results(value):
|
||||
return json_dumps({'rows': [{'foo': value}], 'columns': [{'name': 'foo', 'type': 'STRING'}]})
|
||||
|
||||
|
||||
class TestAlertEvaluate(BaseTestCase):
|
||||
def create_alert(self, results, column='foo'):
|
||||
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': 1})
|
||||
return alert
|
||||
|
||||
def test_evaluate_triggers_alert_when_equal(self):
|
||||
alert = self.create_alert(get_results(1))
|
||||
self.assertEqual(alert.evaluate(), Alert.TRIGGERED_STATE)
|
||||
|
||||
def test_evaluate_return_unknown_when_missing_column(self):
|
||||
alert = self.create_alert(get_results(1), column='bar')
|
||||
self.assertEqual(alert.evaluate(), Alert.UNKNOWN_STATE)
|
||||
|
||||
def test_evaluate_return_unknown_when_empty_results(self):
|
||||
results = json_dumps({'rows': [], 'columns': [{'name': 'foo', 'type': 'STRING'}]})
|
||||
alert = self.create_alert(results)
|
||||
self.assertEqual(alert.evaluate(), Alert.UNKNOWN_STATE)
|
||||
Reference in New Issue
Block a user