Notificações em tempo real sobre mudanças de status nas linhas dos trens e metrôs de São Paulo diretamente no canal do Slack.
- Você precisará de um Workspace no slack. Se não tiver crie-o
-
Você precisará gerar um token para o seu Workspace se comunicar com o projeto.
-
Para isso crie um App no seu Workspace
-
Após criado o App, vá até Bot Users no menu lateral e crie um Bot para seu App.
-
Após criado o Bot, vá até OAuth & Permissions no menu lateral. Na seção Scope dê a permissão chat:write:bot e bot para o seu App. Será solicitado que o App seja reinstalado no Workspace para as novas permissões.
- Após dadas as permissões e reinstalado o App salve a Bot User OAuth Access Token ela será necessária para configurar o projeto.
- Crie um container do projeto com o comando:
docker run --detach \
--env SLACK_KEY=your-slack-bot-oauth-key \
--env SLACK_CHANNEL=channel-name \
--env NOTIFY_LEVEL=0 \
--env NOTIFY_DAYS=all \
--env NOTIFY_LINES=all \
--restart unless-stopped \
edmur/cptm-alerts
- Substitua os valores para as chaves
SLACK_KEY
eSLACK_CHANNEL
. - Os parametros
NOTIFY_LEVEL
,NOTIFY_DAYS
eNOTIFY_LINES
são opcionais e podem ser omitidos.
- Para rodar em produção recomendo que crie um volume para manter a persistencia dos dados e para ter acesso aos logs da aplicação.
docker volume create cptm_alerts_data
docker run --detach \
--env SLACK_KEY=your-slack-bot-oauth-key \
--env SLACK_CHANNEL=channel-name \
--env NOTIFY_LEVEL=0 \
--env NOTIFY_DAYS=all \
--env NOTIFY_LINES=all \
--restart unless-stopped \
--volume cptm_alerts_data:/usr/src/Storage \
edmur/cptm-alerts
- Baixe o projeto para uma pasta em sua maquina:
git clone https://github.com/rumd3x/cptm-alerts.git
# ou
composer create-project rumd3x/cptm-alerts
-
Vá até a pasta do projeto:
cd cptm-alerts
. -
Instale as dependências:
composer install
(Não é necessário caso tenha baixado via composer create-project). -
Crie o seu arquivo de configurações do projeto:
cp .env.example .env
. -
Edite o arquivo
.env
. EmSLACK_CHANNEL
coloque o canal do slack em que o bot publicará as alterações de status. EmSLACK_KEY
coloque o Bot User OAuth Access Token salvo anteriormente. -
Para verificar o status das linhas execute
php /caminho/do/projeto/run.php
. -
Para receber automaticamente as mudanças de status coloque o comando num cron. Exemplo:
* * * * * php /caminho/do/projeto/run.php >> /caminho/do/log/run.log 2>&1
No arquivo .env
(ou nas flags --env
ou -e
do docker) é onde são armazaneadas as configurações e existem possibilidades de personalização no comportamento da aplicação.
A configuração NOTIFY_LEVEL
deve conter um número inteiro válido e representa o menor nível de criticidade que a aplicação notificará.
Os níveis existentes são:
Nível 0: Mudanças já esperadas, como o encerramento das operações as 0h e o início das operações.
Nível 1: Mudanças positivas, como a normalização da operação após um período de lentidão.
Nível 2: Mudanças alarmantes, como a operação da linha estar com lentidão.
Nível 3: Mudanças perigosas, como a paralização da operação em uma linha.
- Exemplo:
Se desejar receber notificações em todos os níveis deverá configurar para NOTIFY_LEVEL=0
. Se não quiser receber notificações de mudanças já esperadas trocar para NOTIFY_LEVEL=1
. Se quiser receber apenas notificações de paralização NOTIFY_LEVEL=3
.
A configuração NOTIFY_DAYS
diz os dias que deverão ser enviadas notificações. Deve conter os dias que as notificações serão enviadas separados por vírgula.
Os valores são:
all: Enviar Notificações todos os dias
0: Domingo
1: Segunda-feira
2: Terça-feira
3: Quarta-feira
4: Quinta-feira
5: Sexta-feira
6: Sábado
- Exemplo:
Para receber notificações todos os dias use
NOTIFY_DAYS=all
. Para receber notificações somente em dias da semana useNOTIFY_DAYS=1,2,3,4,5
.
A configuração NOTIFY_LINES
diz as linhas dos trens/metrô que deverão ser monitoradas. Deve conter o numero das linhas separados por vírgula.
Os valores são:
all: Enviar Notificações para todas as linhas
1: Linha 1 Azul do Metrô
2: Linha 2 Verde do Metrô
3: Linha 3 Vermelha do Metrô
4: Linha 4 Amarela do Metrô
5: Linha 5 Lilás do Metrô
6: Linha 6 Laranja do Metrô
7: Linha 7 Rubi da CPTM
8: Linha 8 Diamante da CPTM
9: Linha 9 Esmeralda da CPTM
10: Linha 10 Turquesa da CPTM
11: Linha 11 Coral da CPTM
12: Linha 12 Safira da CPTM
13: Linha 13 Jade da CPTM
15: Linha 15 Prata da CPTM
17: Linha 17 Ouro da CPTM
- Exemplo:
Para receber notificações de todas as linhas
NOTIFY_LINES=all
. Para receber notificações somente da linha azul e amarela useNOTIFY_LINES=1,4
.
- Verifique se o composer foi executado corretamente
- Verifique a saída do php nos logs do cron (Ou execute o comando redirecionando a saída para um arquivo).
- Verifique os logs do projeto no arquivo
/caminho/do/projeto/Storage/Logs/app.log
- Verifique se o usuário rodando o php está no grupo de permissões correto
- Verifique se o arquivo .env tem permissão de leitura
- Verifique se a pasta Storage tem permissão de escrita
- Aumentar o Coverage de Testes Unitários
- Refactor para suportar mais provedores além da CPTM.
- Adicionar suporte a IFTTT Trigger.