jhumanj / laravel-model-stats
为您的Laravel应用程序提供模型统计仪表板
Requires
- php: ^8.0|^8.1|^8.2
- illuminate/contracts: ^8.0|^v9.0|^v10.0
- illuminate/support: ^8.0|^9.0|^10.0
- laravel/tinker: ^1.0|^2.0
- spatie/laravel-package-tools: ^1.4
Requires (Dev)
- brianium/paratest: ^6.2|^7.0
- nunomaduro/collision: ^5.3|^6.0|^7.0
- orchestra/testbench: ^6.15|^7.0|^8.0
- phpunit/phpunit: ^9.3|^10.0
- spatie/laravel-ray: ^1.2
- vimeo/psalm: ^4.4|^5.0
README
为您的Laravel应用程序提供模型统计仪表板
此Laravel包为您提供了Laravel应用程序的统计仪表板。将其视为Grafana的轻量级版本,但它是内置在您的Laravel应用程序中,并且更容易上手。使用Laravel模型统计不需要代码知识,用户可以从Web界面完成所有操作。它还支持自定义代码小部件,允许您使用代码定义小部件数据,就像使用tinker一样。
安装
您可以通过composer安装此包
composer require jhumanj/laravel-model-stats
您可以使用以下命令安装包并运行迁移
php artisan model-stats:install php artisan migrate
可用的无代码小部件
不同类型的小部件(每日计数、每日平均数等)可供选择。在创建小部件时,您可以选择模型、聚合类型和用于图形的列。然后您可以在仪表板上调整大小和移动小部件。
当前可用的聚合类型
- 每日计数(所选期间每天记录的数量)。
- 累积每日计数(所选期间累积的总记录数)。
- 期间总数(所选期间的新记录数)。
- 按组计数(所选期间给定列的组计数)。
- ...(更多即将推出)
对于每种小部件类型,日期可以是任何列:created_at、updated_at、custom_date。
自定义代码小部件
您还可以使用自定义代码小部件,允许您使用代码定义小部件数据,就像使用tinker一样。
您的代码必须定义一个包含要返回到所选图表的数据的$result变量。您可以使用$dateFrom和$dateTo变量。
条形图的自定义代码示例
$result = [ 'a' => 10, 'b' => 20 ];
自定义代码设置
🚨 在生产数据库上使用自定义代码功能存在极大的风险 🚨
任何可以访问仪表板的恶意用户或任何错误都可能对您的数据库造成损害。不要这样做。这里有一个安全使用此功能的方法
- 为您的数据库创建一个
只读用户- 以下是创建PostgreSQL数据库只读用户的步骤:PostgreSQL指南
- 以下是创建MySQL数据库只读用户的步骤:MySQL指南
- 将只读数据库连接添加到您的
config/database.php文件中// in database.php 'connections' => [ // ... your other connections 'readonly' => [ 'driver' => 'pgsql', // Copy the settings for the driver you use, but change the user 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME_READONLY', 'forge'), // User is changed here 'password' => env('DB_PASSWORD_READONLY', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'schema' => 'public', 'sslmode' => 'prefer', ], ]
- 在您的.env文件中设置以下内容
MODEL_STATS_CUSTOM_CODE=true MODEL_STATS_DB_CONNECTION=readonly DB_USERNAME_READONLY=<username> DB_PASSWORD_READONLY=<password>
因此,此包将使用只读连接执行您的代码。请注意,这是一个防止错误的保护措施,但不是针对恶意用户的保护措施。可以在自定义代码中覆盖此连接,因此在生产中使用此功能仍存在一些风险。请确保您的仪表板授权配置正确。
禁用自定义代码
您可能希望通过将MODEL_STATS_CUSTOM_CODE环境变量设置为false来禁用自定义代码小部件。
仪表板授权
可以在 /stats 路由访问 ModelStats 控制台。默认情况下,您只能在本地环境中访问此控制台。在您的 app/Providers/ModelStatsServiceProvider.php 文件中,有一个授权门定义。这个授权门控制非本地环境中对 ModelStats 的访问。您可以自由地根据需要修改此门以限制对您的 ModelStats 安装的访问
/** * Register the ModelStats gate. * * This gate determines who can access ModelStats in non-local environments. * * @return void */ protected function gate() { Gate::define('viewModelStats', function ($user) { return in_array($user->email, [ 'taylor@laravel.com', ]); }); }
升级
升级 ModelStats 时,请务必重新发布前端资源
php artisan model-stats:publish
变更日志
有关最近更改的更多信息,请参阅 变更日志
贡献
有关详细信息,请参阅 贡献指南
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略
鸣谢(贡献者)
灵感来源
- Grafana:仪表板/小部件方面
- Laravel/Telescope:包结构中的许多方面(前端、授权等)
- Spatie/Laravel-Web-Tinker:他们的 Web Tinker 实现被用于自定义代码小部件
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件