from providers.slack import QualitySlack
from streambuild.events import AuditCompleted, AuditTransition
from streambuild.sensors import (
DefaultSensorStatus,
EventSensorContext,
SensorRetryPolicy,
event_sensor,
)
@event_sensor(
on=AuditCompleted,
default_status=DefaultSensorStatus.STOPPED,
retry_policy=SensorRetryPolicy(max_attempts=3, backoff_seconds=30),
)
def quality_alerts(
ctx: EventSensorContext[AuditCompleted], quality_slack: QualitySlack
) -> None:
if ctx.event.transition not in {
AuditTransition.NEW_FAILURE,
AuditTransition.RECOVERED,
}:
return
message = ctx.step(
"compose",
lambda: f"{ctx.event.audit_name}: {ctx.event.transition}",
)
ctx.step("slack", lambda: quality_slack.send(str(message)))