rumd3x / cptm-alerts
直接在 Slack 频道中接收圣保罗地铁和火车线路状态变更的警报。
Requires
- php: >=7.2
- guzzlehttp/guzzle: ^6.3
- monolog/monolog: ^1.24
- nesbot/carbon: ^2.7
- php-http/curl-client: ^1.7
- rumd3x/notifier-interface: ^1.0
- rumd3x/php-persistence: ^1.0
- rumd3x/slack-notifier: ^0.2
- tightenco/collect: ^5.7
- vlucas/phpdotenv: ^2.5
Requires (Dev)
- phpunit/phpunit: ^8.0
README
实时接收圣保罗地铁和火车线路状态变更的警报。
入门指南
工作空间
- 您需要一个 Slack 工作空间。如果没有,请 创建一个
令牌
-
您需要生成一个令牌,以便您的 Workspace 与项目通信。
-
为此 在工作空间中创建一个应用
-
创建应用后,转到侧边菜单中的 Bot Users 并为您的应用创建一个 Bot。
-
创建 Bot 后,转到侧边菜单中的 OAuth & Permissions。在 Scope 部分,为您的应用赋予 chat:write:bot 和 bot 权限。需要重新安装应用以应用新的权限。
- 赋予权限并重新安装应用后,保存 Bot User OAuth Access Token,它将用于配置项目。
配置项目
通过 Docker 运行
- 使用以下命令创建项目容器
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
- 替换
SLACK_KEY
和SLACK_CHANNEL
的值。 NOTIFY_LEVEL
、NOTIFY_DAYS
和NOTIFY_LINES
参数是可选的,可以省略。
- 建议在生产环境中创建一个卷以保持数据的持久性并访问应用程序的日志。
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
本地运行
- 将项目下载到您的机器上的一个文件夹中
git clone https://github.com/rumd3x/cptm-alerts.git
# ou
composer create-project rumd3x/cptm-alerts
-
转到项目文件夹:
cd cptm-alerts
。 -
安装依赖:
composer install
(如果已通过 composer create-project 下载,则不需要)。 -
创建项目配置文件:
cp .env.example .env
。 -
编辑
.env
文件。在SLACK_CHANNEL
中填写 bot 发布状态变更的 Slack 频道。在SLACK_KEY
中填写之前保存的 Bot User OAuth Access Token。 -
要检查线路状态,请执行
php /caminho/do/projeto/run.php
。 -
要自动接收状态变更,请将命令放入 cron 中。例如
* * * * * php /caminho/do/projeto/run.php >> /caminho/do/log/run.log 2>&1
环境配置
在 .env
文件中(或 Docker 的 --env
或 -e
标志)存储配置,并且可以自定义应用程序的行为。
NOTIFY_LEVEL
NOTIFY_LEVEL
配置应包含一个有效的整数,表示应用程序将通知的最小严重性级别。
现有级别
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.
- 示例
如果您想接收所有级别的通知,请配置为 NOTIFY_LEVEL=0
。如果您不想接收预期的变更通知,请将其更改为 NOTIFY_LEVEL=1
。如果您只想接收停运通知,请配置为 NOTIFY_LEVEL=3
。
NOTIFY_DAYS
NOTIFY_DAYS
配置指定应发送通知的天数。应包含将发送通知的天数,用逗号分隔。
值
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
- 示例:要每天接收通知,请使用
NOTIFY_DAYS=all
。要仅在星期几接收通知,请使用NOTIFY_DAYS=1,2,3,4,5
。
NOTIFY_LINES
NOTIFY_LINES
配置指定了需要监控的列车/地铁线路。应包含以逗号分隔的线路编号。
值
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
- 示例:要接收所有线路的通知,请使用
NOTIFY_LINES=all
。要仅接收蓝色和黄色线路的通知,请使用NOTIFY_LINES=1,4
。
调试
如果您正确完成了以上所有步骤,但在Slack通道中没有收到通知
- 请检查Composer是否正确执行
- 请检查cron的日志中的php输出(或者执行命令时将输出重定向到文件)。
- 请检查项目日志文件
/caminho/do/projeto/Storage/Logs/app.log
。 - 请检查运行php的用户是否属于正确的权限组。
- 请检查.env文件是否有读取权限。
- 请检查Storage文件夹是否有写入权限。
全部
- 提高单元测试覆盖率
- 重构以支持除CPTM以外的更多提供商。
- 添加对IFTTT触发器的支持。