Pagerlite/pagerlite-laravel

GitHub: Pagerlite/pagerlite-laravel

一款极简的自托管 Laravel 值班排班与告警升级系统,让团队在自有应用内管理值班日程并自动通知与升级事件。

Stars: 6 | Forks: 0

# PagerLite [![Packagist 最新版本](https://img.shields.io/packagist/v/pagerlite/pagerlite-laravel.svg?style=flat-square)](https://packagist.org/packages/pagerlite/pagerlite-laravel) [![测试](https://img.shields.io/github/actions/workflow/status/Pagerlite/pagerlite-laravel/tests.yml?branch=main&label=tests&style=flat-square)](https://github.com/Pagerlite/pagerlite-laravel/actions/workflows/tests.yml) [![代码风格](https://img.shields.io/github/actions/workflow/status/Pagerlite/pagerlite-laravel/formats.yml?branch=main&label=code%20style&style=flat-square)](https://github.com/Pagerlite/pagerlite-laravel/actions/workflows/formats.yml) [![总下载量](https://img.shields.io/packagist/dt/pagerlite/pagerlite-laravel.svg?style=flat-square)](https://packagist.org/packages/pagerlite/pagerlite-laravel) [![PHP 版本](https://img.shields.io/packagist/dependency-v/pagerlite/pagerlite-laravel/php.svg?style=flat-square)](composer.json) [![许可证](https://img.shields.io/github/license/Pagerlite/pagerlite-laravel.svg?style=flat-square)](LICENSE.md) 一款为 Laravel 打造的极简、自托管的值班与寻呼系统 —— 秉承 Horizon 和 Telescope 的精神。安装该包后,访问 `/pagerlite`,添加你的团队,并将某人拖拽到日历上:当有事件发生时,PagerLite 会通知当前值班的人员,并持续升级直到有人确认。所有数据都存储在你自己的数据库中;数据绝对不会离开你的应用。 ![PagerLite 仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/cas/80/8014125de46c58a132c0c5cc1e86c84928dbafeda1c6d17893bea78537f2059c.png) ## 功能特性 - **事件接入** — 一个可供任何监控工具调用的 `POST` endpoint,以及一个用于从你自己的代码中报告事件的 `PagerLite::notify()` facade。 - **值班日程** — 一个支持拖拽的按天显示的日历。将成员拖到某一天,可根据需要将轮班延长至任意天数。同一时间只有一人值班。 - **团队管理** — 添加和移除成员而不会丢失历史记录:移除某人会释放其今天及以后的轮班,而恢复他们只会带回他们过去的轮班记录,在你再次为他们排班之前,他们不会进入升级链。 - **升级链** — 如果值班成员在超时时间内未确认,链中的下一位成员将收到寻呼,直到有人响应为止。可以在仪表盘中重新排序升级链。 - **确认与解决** — 可直接在仪表盘中操作(带有确认步骤),并且提供每个事件的完整时间线:谁收到了寻呼,何时升级的,以及谁确认并解决了该事件。 - **成员洞察** — 每个成员都有一个专属页面,展示他们的值班历史、每月的值班天数以及他们收到寻呼的事件。 - **可嵌入日历** — 通过一个加密链接分享日程的只读视图,可直接通过 iframe 嵌入到 wiki 或状态页面中。 - **实时更新** — 仪表盘、事件列表、事件详情和嵌入的日历都会在后台进行轮询,因此状态更改和新事件无需手动刷新即可显示。 - **邮件通知** — 通过应用现有的邮件配置发送。无需第三方服务。 ## 环境要求 - PHP 8.4+ - Laravel 12 - 一个真正的队列驱动 (`database`, `redis`, 等) — 事件升级依赖于延迟任务按时触发,而 `sync` 驱动无法满足这一要求。 ## 安装 使用 Composer 引入该包: ``` composer require pagerlite/pagerlite-laravel ``` 然后运行安装命令: ``` php artisan pagerlite:install ``` 它会发布配置文件和预构建的仪表盘静态资源,并提示你运行数据库迁移(四个带有 `pagerlite_` 前缀的表)。接着: 1. 在 `.env` 中设置 token,以便外部工具可以报告事件: PAGERLITE_TOKEN=your-long-random-secret 2. 运行一个队列 worker — 升级机制是由延迟的队列任务驱动的: php artisan queue:work 3. 访问 `/pagerlite`,添加成员,排序升级链,并安排某人值班。 ## 仪表盘授权 开箱即用时,仪表盘只能在 `local` 环境中访问。要在其他环境中开放访问,请注册一个授权回调 — 通常放在某个 service provider 的 `boot` 方法中: ``` use Pagerlite\Laravel\PagerLite; PagerLite::auth(function ($request) { return $request->user()?->isAdmin() ?? false; }); ``` 确认和解决操作将归属于你应用中已认证的用户。 ## 报告事件 ### 通过 HTTP,从任何地方 ``` curl -X POST https://your-app.test/pagerlite/api/events \ -H "Authorization: Bearer $PAGERLITE_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "Server down", "message": "CPU at 100%", "service": "api"}' ``` `title` 是必填项;`message` 和 `service` 是可选的。该 endpoint 会返回 `201` 状态码以及事件的 `id` 和 `status`。对于无法设置请求头的工具,可以直接在 URL 中传递 token:`POST /pagerlite/api/events/{token}`。 每个请求都会创建一个新的事件 — PagerLite 不会进行去重,因此请将你监控工具的 *状态改变(state change)* hook 指向它,而不是每分钟的例行检查。 ### 从你自己的代码中 ``` use Pagerlite\Laravel\PagerLite; PagerLite::notify('Nightly backup failed', 'Disk full on backup volume', 'backups'); ``` ## 寻呼的工作原理 1. 记录一个事件,并通知当前值班(来自日程安排)的成员。 2. 如果当前无人值班,则会直接从顶部开始寻呼升级链中的成员。 3. 如果在升级超时时间内(默认为 5 分钟)未确认事件,将通知升级链中的下一位成员 — 同时跳过当前已值班的成员 — 直到升级链中的所有成员都被遍历。 4. 从仪表盘确认该事件将停止升级。 日程按 UTC 天运作:轮班在 UTC 午夜进行交接,并且无论成员身处哪个时区,每个人看到的都是相同的日历。 ## 嵌入日历 在 `.env` 中设置一个密钥: ``` PAGERLITE_EMBED_TOKEN=another-long-random-secret ``` 随后,无需登录即可通过以下地址访问只读日历: ``` https://your-app.test/pagerlite/embed/calendar/{token} ``` 将其放入 wiki 或状态页面的 iframe 中: ``` ``` 任何拥有此链接的人都可以看到谁在值班(仅限姓名和日程安排 — 不包含事件详情,且无法编辑)。如果不设置 `PAGERLITE_EMBED_TOKEN`,则该嵌入 URL 将无法访问。 ## 配置 发布的 `config/pagerlite.php` 涵盖了所有配置;每个选项也都有对应的环境变量: | 变量 | 默认值 | 用途 | | --- | --- | --- | | `PAGERLITE_PATH` | `pagerlite` | 提供仪表盘服务的 URI 路径。 | | `PAGERLITE_TOKEN` | — | events endpoint 所需的 Bearer token。 | | `PAGERLITE_EMBED_TOKEN` | — | 用于启用公开只读日历的密钥。未设置 = 禁用。 | | `PAGERLITE_ESCALATION_TIMEOUT` | `300` | 在升级前等待确认的秒数。 | | `PAGERLITE_USER_MODEL` | `App\Models\User` | 用于归属确认/解决操作的主体应用 user model。 | ## 升级 更新此包后,请重新发布仪表盘静态资源: ``` php artisan vendor:publish --tag=pagerlite-assets --force ``` (或者直接重新运行 `php artisan pagerlite:install`)。 ## 待办事项 - [ ] 添加更多通知渠道 - [ ] SMS - [ ] Discord - [ ] Slack - [ ] Telegram - [ ] Webhook - [ ] 移动应用 - [ ] 统一电话号码,自动转接给当前值班人员 ## 许可证 PagerLite 是开源软件,基于 [MIT 许可证](LICENSE.md) 发布。
标签:ffuf, Laravel, OpenVAS, PHP, 值班排班, 告警通知, 搜索引擎查询, 自托管, 运维监控