adelinferaru / nestedflowtracker
Laravel 包,帮助跟踪嵌套执行流程。
Requires
- illuminate/support: ~5
- kalnoy/nestedset: ^5.0
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ~3.0
- phpunit/phpunit: ~7.0
- sempro/phpunit-pretty-print: ^1.0
This package is auto-updated.
Last update: 2024-09-22 18:36:36 UTC
README
此 Laravel 包允许测量从代码中的起始点到结束点所花费的时间。
查看 contributing.md 了解待办事项列表。
安装
通过 Composer
$ composer require adelinferaru/nestedflowtracker
配置
1. 发布配置文件
> php artisan vendor:publish --provider="AdelinFeraru\NestedFlowTracker\NestedFlowTrackerServiceProvider" --tag="nestedflowtracker.config"
2. 发布迁移文件
> php artisan vendor:publish --provider="AdelinFeraru\NestedFlowTracker\NestedFlowTrackerServiceProvider" --tag="nestedflowtracker.migrations"
3. 设置环境变量
该包需要您设置两个环境变量。编辑 .env 并添加以下内容
FLOW_TRACKER_COMPONENT="default-component-name"
FLOW_TRACKER_DB_CONNECTION=default
FLOW_TRACKER_COMPONENT
变量表示当前应用程序的名称,当使用该包跟踪跨越多个应用程序的用户流程时,它非常有用,可以了解哪个应用程序报告了特定的跟踪记录。
FLOW_TRACKER_DB_CONNECTION
变量将指定用于写入跟踪记录的数据库连接名称。如果您不是使用 default
,您必须在 config/database.php
中定义一个新的数据库连接,以便 NestedFlowTracker 使用。
示例
...
'nestedflowtracker' => [
'driver' => 'mysql',
'host' => env('FLOW_TRACKER_DB_HOST', '127.0.0.1'),
'port' => env('FLOW_TRACKER_DB_PORT', '3306'),
'database' => env('FLOW_TRACKER_DB_DATABASE', 'my_external_db'),
'username' => env('FLOW_TRACKER_DB_USERNAME', 'root'),
'password' => env('FLOW_TRACKER_DB_PASSWORD', 'secret'),
'unix_socket' => env('FLOW_TRACKER_DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('FLOW_TRACKER_MYSQL_ATTR_SSL_CA'),
]) : [],
],
...
现在在 .env 文件中,您将会有
FLOW_TRACKER_DB_CONNECTION=nestedflowtracker
使用方法
您通常会使用两个类静态方法
$track_model = NestedFlowTracker::startTrack($timer_name, $message = null, array $setting = []);
NestedFlowTracker::endTrack($timer_name, array $setting = []);
$settings 数组可能包含以下内容
- tracker_id : 整个流程的唯一标识符(跨越多个应用)
- user_id: 执行流程的用户_id 或代表其执行流程的用户
- component: 当需要时覆盖 .env 文件中定义的默认组件/应用程序名称
- message: 覆盖消息(在 ::endTask 中很有用)
- context: 指定上下文
- result: 传入一个结果
- parent_id: 以编程方式指定父跟踪器的 ID
注意: NestedFlowTracker::startTrack
方法返回一个实现嵌套集的 Model。
注意: startTrack / endTrack 标记子流程的开始和结束。
startTrack -------------------------> root:
startTrack ---------------------> child 1
startTrack -----------------> child 1.1
endTrack
startTrack -----------------> child 1.2
endTrack
endTrack
startTrack ---------------------> child 2
startTrack -----------------> child 2.1
endTrack
endTrack
endTrack
当向作为流程一部分的其他应用程序发出 API 调用,并且可能需要跟踪其自身内部流程时,您可以传递以下变量
"tracker_id" => NestedFlowTracker::getTrackerId(),
"tracker_parent_id" => $current_tracker->id,
...
public static function doSomething($data) {
$tracker_parent_id = $data['tracker_parent_id] ?? null;
$tracker_id = $data['tracker_id] ?? NestedFlowTracker::getTrackerId();
$doSomething_timer = "Meter my doSomething";
$track = NestedFlowTracker::startTrack($doSomething_timer,
"Track my doSomething function",
[
'context' => [],
'user_id' => $data['user_id'],
// "tracker_id" to be used only at the begining of a flow
//'tracker_id' => $tracker_id,
// "parent_id" to be used only at the begining of a flow
//'parent_id' => $tracker_parent_id
]);
$result = [
'success' => 1,
'message' => null
];
...
...
some code that the function does
...
// Supposedly we'll call another function that we want to track as a child of the already existing tracker "$track"
$processData_timer = "Meter my processData";
$track2 = NestedFlowTracker::starTrack($processData_timer, "Process my data");
// Call another function to do something with data
$new_data = $this->processData($data);
NestedFlowTracker::endTrack($processData_timer);
if($new_data) $result['success'] = 1;
...
...
NestedFlowTracker::endTrack($doSomething_timer, ['result' => $result]);
return $result;
}
...
变更日志
请参阅 changelog 了解最近更改的详细信息。
测试
$ composer test
贡献
请参阅 contributing.md 了解详细信息和一个待办事项列表。
安全
如果您发现任何安全相关的问题,请通过电子邮件 alu@feenavigator.com 而不是使用问题跟踪器。
致谢
许可证
许可证。请参阅许可证文件以获取更多信息。