Skip to content

Latest commit

 

History

History
166 lines (127 loc) · 6.39 KB

README.md

File metadata and controls

166 lines (127 loc) · 6.39 KB

CPTM Alerts

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.

GitHub release Build Status Docker Cloud Build Status Docker Cloud Automated build GitHub PHP Version

Notificação Exemplo

Getting started

Workspace

  1. Você precisará de um Workspace no slack. Se não tiver crie-o

Token

  1. Você precisará gerar um token para o seu Workspace se comunicar com o projeto.

  2. Para isso crie um App no seu Workspace

App no Workspace

  1. Após criado o App, vá até Bot Users no menu lateral e crie um Bot para seu App.

  2. 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.

App configurado corretamente

  1. 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.

Configurando o Projeto

Rodando via Docker

  • 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 e SLACK_CHANNEL.
  • Os parametros NOTIFY_LEVEL, NOTIFY_DAYS e NOTIFY_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

Rodando Local

  1. 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
  1. Vá até a pasta do projeto: cd cptm-alerts.

  2. Instale as dependências: composer install (Não é necessário caso tenha baixado via composer create-project).

  3. Crie o seu arquivo de configurações do projeto: cp .env.example .env.

  4. Edite o arquivo .env. Em SLACK_CHANNEL coloque o canal do slack em que o bot publicará as alterações de status. Em SLACK_KEY coloque o Bot User OAuth Access Token salvo anteriormente.

  5. Para verificar o status das linhas execute php /caminho/do/projeto/run.php.

  6. 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

Configurações de ambiente

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.

NOTIFY_LEVEL

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.

NOTIFY_DAYS

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 use NOTIFY_DAYS=1,2,3,4,5.

NOTIFY_LINES

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 use NOTIFY_LINES=1,4.

Debugando

Se você fez tudo acima corretamente e não está recebendo notificações em seu canal do slack:

  • 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

Todo

  • Aumentar o Coverage de Testes Unitários
  • Refactor para suportar mais provedores além da CPTM.
  • Adicionar suporte a IFTTT Trigger.