def create_alert( dbsession, sql: str, validator_type: Optional[str] = None, validator_config: Optional[str] = None, ) -> Alert: alert = Alert( label="test_alert", active=True, crontab="* * * * *", slice_id=dbsession.query(Slice).all()[0].id, recipients="*****@*****.**", slack_channel="#test_channel", ) dbsession.add(alert) dbsession.commit() sql_observer = SQLObserver( sql=sql, alert_id=alert.id, database_id=utils.get_example_database().id, ) if validator_type and validator_config: validator = Validator( validator_type=validator_type, config=validator_config, alert_id=alert.id, ) dbsession.add(validator) dbsession.add(sql_observer) dbsession.commit() return alert
def operator_validator(observer: SQLObserver, validator_config: str) -> bool: """ Returns True if a SQLObserver's recent observation is greater than or equal to the value given in the validator config """ observation = observer.get_last_observation() if not observation or observation.value in (None, np.nan): return False operator = json.loads(validator_config)["op"] threshold = json.loads(validator_config)["threshold"] return OPERATOR_FUNCTIONS[operator](observation.value, threshold)
def not_null_validator( observer: SQLObserver, validator_config: str # pylint: disable=unused-argument ) -> bool: """Returns True if a SQLObserver's recent observation is not NULL""" observation = observer.get_last_observation() # TODO: Validate malformed observations/observations with errors separately if (not observation or observation.error_msg or observation.value in (0, None, np.nan)): return False return True