예제 #1
0
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