adelinferaru/nestedflowtracker

Laravel 包,帮助跟踪嵌套执行流程。

1.0 2019-11-21 17:36 UTC

This package is auto-updated.

Last update: 2024-09-22 18:36:36 UTC


README

Latest Version on Packagist Total Downloads Build Status StyleCI

此 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 而不是使用问题跟踪器。

致谢

许可证

许可证。请参阅许可证文件以获取更多信息。