Skip to content

feat: avisa no Discord quando uma pipeline é desativada automaticamente - #1086

Merged
Winzen merged 1 commit into
mainfrom
fix/discord-notify-flow-disabled
Sep 16, 2026
Merged

Winzen merged 1 commit into
mainfrom
fix/discord-notify-flow-disabled

Conversation

@Winzen

@Winzen Winzen commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

feat: avisa no Discord quando uma pipeline é desativada automaticamente

Contexto

FlowFailedWebhookView já desativa automaticamente uma pipeline no Prefect (2 execuções consecutivas falhas, ou falha de uma task run_dbt), mas isso só ficava registrado em log — ninguém era avisado de que uma pipeline parou de rodar.

O que mudou

_notify_disabled(), chamado logo depois de pausar o schedule, monta a causa (distinguindo as duas condições) e reaproveita send_discord_message() — já existente e usada em outro lugar do mesmo app, não é mecanismo novo:

if consecutive_failure and dbt_failure:
    cause = "2 execuções consecutivas falharam, incluindo uma falha de task dbt"
elif consecutive_failure:
    cause = "2 execuções consecutivas falharam"
else:
    cause = "uma task dbt (`run_dbt`) falhou"

send_discord_message(
    f"<@&{settings.DISCORD_DADOS_TEAM_ROLE_ID}>\n"
    f"🔴 Pipeline desativada automaticamente: **{record.flow_name}**\n"
    f"Motivo: {cause}\n"
    f"[Ver no admin]({change_url}) · [Ver no Prefect]({deployment_url})"
)

A menção <@&...> usa o mesmo ID de role já configurado no template de notificação de falha de flow existente como Automation no Prefect 3 — não é segredo, só um identificador, por isso vive em settings.py como constante (não em secret/env var).

De quebra, tirei as constantes que estavam soltas no meio de views.py (tipos legados de BigQuery, estados de falha, nomes de task dbt, mensagens ignoradas) pra um constants.py novo do próprio app — nenhum outro app do backend tinha esse arquivo ainda, primeira vez usando esse padrão aqui.

Testes

Disparado manualmente contra o webhook real do Discord (DISCORD_BACKEND_WEBHOOK_URL), duas vezes — sem e com a menção da role — confirmando formatação e que a notificação dispara de verdade.

Resolve #1085.

FlowFailedWebhookView já desativava a pipeline (2 falhas consecutivas ou
falha de task dbt), mas só logava — ninguém era avisado. Reaproveita
send_discord_message (já existente e usada em outro lugar do mesmo app)
pra postar o nome do flow, a causa exata, e links pro admin e pro
Prefect, mencionando a role da equipe de dados.

Constantes que estavam soltas em views.py (tipos legados de BigQuery,
estados de falha, nomes de task dbt, mensagens ignoradas) movidas pra
constants.py do próprio app; o ID da role do Discord foi pra
settings/base.py, junto dos outros valores de configuração do Discord.

Testado disparando 2 mensagens reais no webhook do Discord (uma sem e
uma com a menção da role), confirmando o formato e que a notificação
dispara de verdade.

Resolve #1085.
@Winzen Winzen self-assigned this Sep 16, 2026
@Winzen Winzen added the prod Indica que o Pull Request está com a branch de destino (base) apontando para main label Sep 16, 2026
@Winzen
Winzen merged commit 72b4ec2 into main Sep 16, 2026
5 checks passed
@Winzen
Winzen deleted the fix/discord-notify-flow-disabled branch September 16, 2026 19:23
github-actions Bot added a commit that referenced this pull request Sep 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

prod Indica que o Pull Request está com a branch de destino (base) apontando para main

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Backend avisar a causa e quando uma pipeline for desativada

1 participant