From 1e7c3f011c5601c130f8ac927e3958dd9ef7c653 Mon Sep 17 00:00:00 2001 From: eeliu <27064129+eeliu@users.noreply.github.com> Date: Fri, 5 Jul 2024 16:48:12 +0800 Subject: [PATCH] support c level plugin in php (#623) * test c-level plugins * test pinpoint_join_cut * use zend_string_release - fix bug in pinpoint_interceptor_handler_entry * add try_end * test pinpoint_join_cut * test pdo * ci(versions): test php versions (#63) - covered all phpt by docker compose - pdo,redis,curl - fix CI * remote php5 support * support ci for php7 * add php8.0 testCI * add php8.3 * rename internal API - pinpoint_start_trace => _pinpoint_start_trace * update pinpoint_php module version * add testcase for simplephp * update docs * Feat join cut get caller (#64) * feat(php): pinpoint_get_caller_arg * pinpoint_get_caller_arg and phpt * update pinpoint_php module version 0.5.2 * - remove `fastapi==0.109.1` , it crashes CI * simple_php for curl/redis/memcache/mysql * test pack_php_module * test wordpress * enable logger * test phpmyadmin * fix phpmyadmin * test(php): more popular project (#65) - php wordpress, phpmyadmin - java_call_app * fix simplephp * for wilderness test * change package naming * update docs * fix extends bug in pinpoint-php * support flarum * support cachethq --- .github/workflows/main.yml | 79 +- .gitignore | 5 +- DOC/PHP/Readme-CN.md | 9 +- DOC/PHP/Readme.md | 119 +- collector-agent/go.mod | 27 +- collector-agent/go.sum | 1463 +---------------- common/CHANGES.md | 5 +- common/src/Logging.cpp | 2 +- common/src/NodePool/PoolManager.h | 2 +- common/src/test_common.cc | 8 + common/src/test_util.cc | 6 + install_pinpoint_php.sh | 74 + mm_check.sh | 7 + plugins/PHP/Framework/Yii2/Readme.md | 3 - .../PY/pinpointPy/libs/_psycopg2/test_case.py | 3 +- src/PHP/CHANGES.md | 9 + src/PHP/php_pinpoint_php.h | 39 +- src/PHP/pinpoint_php.cpp | 661 +++++++- src/PHP/pinpoint_php_api.php | 72 - testapps/PHP/composer.json | 2 + testapps/PHP/index.php | 1 - testapps/SimplePHP/composer-real.json | 13 + testapps/SimplePHP/composer.json | 10 +- testapps/SimplePHP/composer.lock | 406 +++++ testapps/{ => SimplePHP}/php.dockerfile | 14 +- testapps/SimplePHP/php.ini | 5 +- testapps/SimplePHP/run.php | 121 +- testapps/cachethq/cachethq.dockerfile | 20 + testapps/cachethq/index.php | 78 + testapps/compose.yaml | 200 ++- testapps/flarum/flarum.dockerfile | 16 + testapps/flarum/flarum.env | 17 + testapps/flarum/site.php | 70 + testapps/java_call_app/conf/pinpoint.config | 1292 +++++++++++++++ .../java_call_app/conf/quickstart.properties | 17 + testapps/java_call_app/javacallapp.xml | 1 + testapps/java_call_app/pom.xml | 205 +++ testapps/java_call_app/readme.md | 3 + testapps/java_call_app/spring.dockerfile | 19 + .../pinpoint/javacallapp/ApisController.java | 60 + .../applicationContext-javacallapp.xml | 19 + .../src/main/resources/log4j.xml | 25 + .../src/main/resources/servlet-context.xml | 28 + .../src/main/webapp/WEB-INF/views/apis.jsp | 19 + .../src/main/webapp/WEB-INF/web.xml | 70 + .../java_call_app/src/main/webapp/index.jsp | 5 + testapps/java_call_app/start-calltestapp.sh | 10 + testapps/php_compatible.dockerfile | 17 + testapps/php_compatible_older.dockerfile | 40 + testapps/php_phpmyadmin/index.php | 61 + testapps/php_phpmyadmin/phpmyadmin.dockerfile | 22 + .../php_wordpress/php-wordpress.dockerfile | 21 + testapps/php_wordpress/pinpoint_php.ini | 12 + testapps/php_wordpress/wp-config.php | 117 ++ testapps/python-plugins.dockerfile | 1 + testapps/readme.md | 2 +- testapps/shell.sh | 5 + testapps/simplephp.dockerfile | 12 +- tests/add_root_trace.phpt | 22 +- tests/aop_helper_api.phpt | 4 +- tests/app_info_test.phpt | 4 +- tests/drop_trace_test.phpt | 10 +- tests/mark_as_error.phpt | 12 +- tests/node_test.phpt | 16 +- tests/performance.php | 16 - tests/pinpoint_get_caller_arg.phpt | 50 + tests/pinpoint_get_this.phpt | 61 + tests/pinpoint_join_cut_curl_7.phpt | 230 +++ tests/pinpoint_join_cut_curl_8.phpt | 233 +++ tests/pinpoint_join_cut_extend_pdo.phpt | 153 ++ tests/pinpoint_join_cut_mysqli.phpt | 87 + tests/pinpoint_join_cut_pdo.phpt | 174 ++ tests/pinpoint_join_cut_pdo_8.phpt | 184 +++ tests/pinpoint_join_cut_redis.phpt | 288 ++++ tests/stack_fetal_error.phpt | 18 +- tests/trace_api_context.phpt | 42 +- tests/trace_api_context_tcp.phpt | 46 +- tests/trace_api_test.phpt | 20 +- tests/trace_api_with_id.phpt | 34 +- tests/trace_limit_test-i448.phpt | 26 +- tests/trace_limit_test.phpt | 4 +- tests/unique_api_test.phpt | 6 +- tests5/add_root_trace.phpt | 37 - tests5/aop_helper_api.phpt | 195 --- tests5/app_info_test.phpt | 16 - tests5/drop_trace_test.phpt | 23 - tests5/mark_as_error.phpt | 27 - tests5/node_test.phpt | 35 - tests5/stack_fetal_error.phpt | 67 - tests5/trace_api_context.phpt | 66 - tests5/trace_api_context_tcp.phpt | 64 - tests5/trace_api_test.phpt | 135 -- tests5/trace_api_with_id.phpt | 66 - tests5/trace_limit_test-i448.phpt | 48 - tests5/trace_limit_test.phpt | 23 - tests5/unique_api_test.phpt | 19 - 96 files changed, 5473 insertions(+), 2737 deletions(-) create mode 100644 install_pinpoint_php.sh create mode 100644 mm_check.sh delete mode 100644 src/PHP/pinpoint_php_api.php create mode 100644 testapps/PHP/composer.json create mode 100644 testapps/SimplePHP/composer-real.json create mode 100644 testapps/SimplePHP/composer.lock rename testapps/{ => SimplePHP}/php.dockerfile (89%) create mode 100644 testapps/cachethq/cachethq.dockerfile create mode 100644 testapps/cachethq/index.php create mode 100644 testapps/flarum/flarum.dockerfile create mode 100644 testapps/flarum/flarum.env create mode 100644 testapps/flarum/site.php create mode 100644 testapps/java_call_app/conf/pinpoint.config create mode 100644 testapps/java_call_app/conf/quickstart.properties create mode 100644 testapps/java_call_app/javacallapp.xml create mode 100644 testapps/java_call_app/pom.xml create mode 100644 testapps/java_call_app/readme.md create mode 100644 testapps/java_call_app/spring.dockerfile create mode 100644 testapps/java_call_app/src/main/java/com/navercorp/pinpoint/javacallapp/ApisController.java create mode 100644 testapps/java_call_app/src/main/resources/applicationContext-javacallapp.xml create mode 100644 testapps/java_call_app/src/main/resources/log4j.xml create mode 100644 testapps/java_call_app/src/main/resources/servlet-context.xml create mode 100644 testapps/java_call_app/src/main/webapp/WEB-INF/views/apis.jsp create mode 100644 testapps/java_call_app/src/main/webapp/WEB-INF/web.xml create mode 100644 testapps/java_call_app/src/main/webapp/index.jsp create mode 100644 testapps/java_call_app/start-calltestapp.sh create mode 100644 testapps/php_compatible.dockerfile create mode 100644 testapps/php_compatible_older.dockerfile create mode 100644 testapps/php_phpmyadmin/index.php create mode 100644 testapps/php_phpmyadmin/phpmyadmin.dockerfile create mode 100644 testapps/php_wordpress/php-wordpress.dockerfile create mode 100644 testapps/php_wordpress/pinpoint_php.ini create mode 100644 testapps/php_wordpress/wp-config.php create mode 100644 testapps/shell.sh delete mode 100644 tests/performance.php create mode 100644 tests/pinpoint_get_caller_arg.phpt create mode 100644 tests/pinpoint_get_this.phpt create mode 100644 tests/pinpoint_join_cut_curl_7.phpt create mode 100644 tests/pinpoint_join_cut_curl_8.phpt create mode 100644 tests/pinpoint_join_cut_extend_pdo.phpt create mode 100644 tests/pinpoint_join_cut_mysqli.phpt create mode 100644 tests/pinpoint_join_cut_pdo.phpt create mode 100644 tests/pinpoint_join_cut_pdo_8.phpt create mode 100644 tests/pinpoint_join_cut_redis.phpt delete mode 100644 tests5/add_root_trace.phpt delete mode 100644 tests5/aop_helper_api.phpt delete mode 100644 tests5/app_info_test.phpt delete mode 100644 tests5/drop_trace_test.phpt delete mode 100644 tests5/mark_as_error.phpt delete mode 100644 tests5/node_test.phpt delete mode 100644 tests5/stack_fetal_error.phpt delete mode 100644 tests5/trace_api_context.phpt delete mode 100644 tests5/trace_api_context_tcp.phpt delete mode 100644 tests5/trace_api_test.phpt delete mode 100644 tests5/trace_api_with_id.phpt delete mode 100644 tests5/trace_limit_test-i448.phpt delete mode 100644 tests5/trace_limit_test.phpt delete mode 100644 tests5/unique_api_test.phpt diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 098043016..92edefd71 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,7 +1,10 @@ name: CI -on: [pull_request, workflow_dispatch,push] +on: [pull_request, workflow_dispatch, push] +env: + MODULE_PAK: pinpoint_php@${{ github.head_ref || github.ref_name }} + jobs: cpp: strategy: @@ -29,10 +32,6 @@ jobs: runs-on: [windows-latest] steps: - uses: actions/checkout@v2 - # - name: actions-setup-cmake - # uses: jwlawson/actions-setup-cmake@v1.14 - # with: - # cmake-version: 'latest' - name: powershell allow... shell: cmd @@ -46,6 +45,7 @@ jobs: ./build/bin/Debug/TestCommon.exe memory-leak: + needs: [cpp, cpp-windows] runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -73,48 +73,48 @@ jobs: with: name: valgrind-out path: common/build/valgrind-out.txt - # PHP5: - # runs-on: ubuntu-latest - # strategy: - # matrix: - # php-versions: ["5.6", "5.4", "5.5"] - # steps: - # - uses: actions/checkout@v2 - # - uses: shivammathur/setup-php@v2 - # with: - # php-version: ${{ matrix.php-versions }} - # - run: | - # phpize - # ./configure - # make - # make test TESTS=tests5/ - PHP7: + PHP: runs-on: ubuntu-latest + needs: cpp strategy: matrix: - # php-versions: ["7.0", "7.1", "7.2", "7.3", "7.4", "8.0"] - php-versions: ["7.4", "8.0"] + php-version: ["7.2", "7.3", "7.4", "8.0", "8.1", "8.2", "8.3"] steps: - uses: actions/checkout@v2 - - uses: shivammathur/setup-php@v2 with: - php-version: ${{ matrix.php-versions }} - extensions: redis-phpredis/phpredis@5.3.4 - - name: testapp + submodules: "true" + - name: update docker compose run: | - phpize - ./configure - make - make test - # sudo make install - # sudo echo "extension=pinpoint_php.so" >> /etc/php/${{ matrix.php-versions }}/cli/php.ini - # sudo echo "error_log = /home/runner/work/pinpoint-c-agent/pinpoint-c-agent/testapps/PHP/tests/php_error.log" >> /etc/php/${{ matrix.php-versions }}/cli/php.ini - # sudo echo "pinpoint_php.DebugReport=true" >> /etc/php/${{ matrix.php-versions }}/cli/php.ini - # cd testapps/PHP - # composer install - # cp tests/think . - # php think unit -v + wget "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64" + chmod +x docker-compose-linux-x86_64 + ./docker-compose-linux-x86_64 version + - name: start test environment + run: | + ./docker-compose-linux-x86_64 -f "testapps/compose.yaml" build php-compatible --build-arg PHP_VERSION=${{ matrix.php-version }} + ./docker-compose-linux-x86_64 -f "testapps/compose.yaml" up php-compatible + - name: Stop containers + # if: always() + run: ./docker-compose-linux-x86_64 -f "testapps/compose.yaml" down php-compatible + + pack_php_module: + runs-on: ubuntu-latest + needs: PHP + steps: + - uses: actions/checkout@v2 + - name: Package pinpoint_php + id: pack + run: | + tar -czf ${{ env.MODULE_PAK }} common/ src/PHP config.m4 tests LICENSE + md5=($(md5sum ${{ env.MODULE_PAK }} )) + PACK_NAME=${{ env.MODULE_PAK }}-${md5}-$(date '+%Y-%m-%d').tar.gz + mv ${{ env.MODULE_PAK }} $PACK_NAME + echo "PACK=$PACK_NAME" >> $GITHUB_OUTPUT + + - uses: actions/upload-artifact@v3 + with: + name: ${{ env.MODULE_PAK }} + path: ${{ steps.pack.outputs.PACK }} Python: strategy: @@ -122,6 +122,7 @@ jobs: os: [ubuntu-latest, macos-13] python-version: ["3.8", "3.9", "3.10", "3.11"] runs-on: ${{ matrix.os }} + needs: [cpp, cpp-windows] steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 diff --git a/.gitignore b/.gitignore index c13d05777..6d9675c10 100644 --- a/.gitignore +++ b/.gitignore @@ -75,4 +75,7 @@ testapps/PHP/composer.phar wheelhouse/ *.so .clangd -.vs \ No newline at end of file +.vs +*.dep +downloads +testapps/java_call_app/target \ No newline at end of file diff --git a/DOC/PHP/Readme-CN.md b/DOC/PHP/Readme-CN.md index 561cc9345..3e50edb43 100644 --- a/DOC/PHP/Readme-CN.md +++ b/DOC/PHP/Readme-CN.md @@ -60,20 +60,13 @@ collector-agent| [installed ?](../collector-agent/readme.md) ################################################# define('APPLICATION_NAME','APP-2'); define('APPLICATION_ID','app-2'); - define('AOP_CACHE_DIR',__DIR__.'./Cache/'); - define('PLUGINS_DIR',__DIR__.'./Plugins/'); - define('PINPOINT_USE_CACHE','YES'); define('PP_REQ_PLUGINS', '\Plugins\PerRequestPlugins'); - #define('USER_DEFINED_CLASS_MAP_IMPLEMENT',"\Plugins\Framework\app\ClassMapInFile"); require_once __DIR__. path to 'vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php'; ################################################# ``` 1. ```APPLICATION_NAME```: 应用名称. 2. ```APPLICATION_ID```: Agent ID. - 3. ```AOP_CACHE_DIR```: 保存```Cache```文件夹的位置. - 4. ```PLUGINS_DIR```: ```Plugins```文件夹的路径. - 5. ```PINPOINT_USE_CACHE```: 'YES'-有请求时不会自动更新 ```Cache```; 'No'-有请求时将会自动更新 ```Cache```(您也可以手动更新```Cache```,直接删除```Cache```就可以)。考虑到性能,建议设置为'YES'.如果您修改了Plugins,需要更新```Cache```后才能生效。 - 6. ```PP_REQ_PLUGINS```: ```PerRequestPlugins```的路径(```PerRequestPlugins```是基本的请求拦截器, 不同的PHP框架的拦截器不同,我们已经为您准备了一些框架的```PerRequestPlugins```,[请到这里获取](../../plugins/PHP/Plugins/Framework),(例如:[swoole's PerRequestPlugins](../../plugins/PHP/Plugins/Framework/Swoole/Http/PerReqPlugin.php))。欢迎PR其他框架哟~ + 3. ```PP_REQ_PLUGINS```: ```PerRequestPlugins```的路径(```PerRequestPlugins```是基本的请求拦截器, 不同的PHP框架的拦截器不同,我们已经为您准备了一些框架的```PerRequestPlugins```,[请到这里获取](../../plugins/PHP/Plugins/Framework),(例如:[swoole's PerRequestPlugins](../../plugins/PHP/Plugins/Framework/Swoole/Http/PerReqPlugin.php))。欢迎PR其他框架哟~ 7. ```require_once __DIR__. path to 'vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php';```: 导入pinpoint的auto_pinpointed.php。**请在```require_once __DIR__."/../vendor/autoload.php";```之后添加,这很重要** 3. 拷贝[Plugins](../../plugins/PHP/Plugins)到您的项目根路径下,并在```composer.josn```中自动加载```Plugins```. diff --git a/DOC/PHP/Readme.md b/DOC/PHP/Readme.md index 0947edd16..4cd24f2b9 100644 --- a/DOC/PHP/Readme.md +++ b/DOC/PHP/Readme.md @@ -17,74 +17,51 @@ collector-agent| [installed ?](../collector-agent/readme.md) ### Installation #### Steps -1. git clone https://github.com/pinpoint-apm/pinpoint-c-agent.git - -2. Build pinpoint_php module, goto the root directory of pinpoint-c-agent installation package, and do following steps: - 1. phpize - 2. ./configure - 3. make - 4. make test - ps: We recommend you to test whether the module is RIGHT. For PHP5: ```make test TESTS=tests5/``` - 5. make install - 6. Activate pinpoint-php-module, please add the following configuration into your ```php.ini``` - - > php.ini - ```ini - extension=pinpoint_php.so - ; Collector-agent's TCP address, ip,port:Collector-Agent's ip,port, please ensure it consistent with the `PP_ADDRESS` of `Collector-Agent` in step2(Build Collector-Agent). - pinpoint_php.CollectorHost=Tcp:ip:port - pinpoint_php.SendSpanTimeOutMs=0 # 0 is recommanded - ; request should be captured duing 1 second. < 0 means no limited - pinpoint_php.TraceLimit=-1 - ; DEBUG the agent, PHP's log_error should turn on too. - ;pinpoint_php.DebugReport=true - ;error_reporting = E_ALL - ;log_errors = On - ;error_log = /tmp/php_fpm_error.log - ``` - -3. Use Pinpoint PHP-Agent in your project, and follow the steps below: - - We assume that you have installed composer and known how to use it. [How to Use Composer?](https://getcomposer.org/doc/00-intro.md) - - 1. Use `composer require` - ``` - composer require pinpoint-apm/pinpoint-php-aop:v2.1.0 - ``` - 2. Add the following constants in the index file of your project: - - ``` - define('APPLICATION_NAME','APP-2'); - define('APPLICATION_ID','app-2'); - define('AOP_CACHE_DIR',__DIR__.'./Cache/'); - ## if yii2 - define('PP_REQ_PLUGINS',\Pinpoint\Plugins\Yii2PerRequestPlugins::class); - require_once __DIR__. path to 'vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php'; - # require_once __DIR__. '/vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php'; - ``` - 1. ```APPLICATION_NAME```: Application name. - 2. ```APPLICATION_ID```: Agent ID. - 3. ```AOP_CACHE_DIR```: Where to generate ```Cache```. - 4. ```require_once __DIR__. path to 'vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php';```: Require pinpoint's ```auto_pinpointed.php```.**Please add after ```require_once __DIR__."/../vendor/autoload.php";```, this is very important!** - ->We have prepared some examples for you, try [playground](https://github.com/pinpoint-apm/pinpoint-c-agent/tree/dev/testapps#playground). - +1. Install pinpoint_php + + curl -sL https://github.com/***pinpoint-apm***/pinpoint-c-agent/releases/download/**v0.1.11**/install_pinpoint_php.sh | sh + +2. Check your pinpoint_php.ini is right + + ```ini + extension=pinpoint_php.so + ; Collector-agent's TCP address, ip,port:Collector-Agent's ip,port, please ensure it consistent with the `PP_ADDRESS` of `Collector-Agent` in step2(Build Collector-Agent). + pinpoint_php.CollectorHost=Tcp:ip:port + pinpoint_php.SendSpanTimeOutMs=0 # 0 is recommanded + ; request should be captured duing 1 second. < 0 means no limited + pinpoint_php.TraceLimit=-1 + ; DEBUG the agent, PHP's log_error should turn on too. + ;pinpoint_php.DebugReport=true + ;error_reporting = E_ALL + ;log_errors = On + ;error_log = /tmp/php_fpm_error.log + ``` + +3. Install pinpoint-php-aop by composer + + composer require -w pinpoint-apm/pinpoint-php-aop + +4. Add entry into your `index.php` + +```php +// enable `vendor/autoload.php` if need +// require_once __DIR__ . '/vendor/autoload.php'; +define('APPLICATION_NAME', 'cd.dev.test.php'); // your application name +define('APPLICATION_ID', 'cd.dev.test.run'); // your application id +define('PP_REQ_PLUGINS', Pinpoint\Plugins\DefaultRequestPlugin::class); +require_once __DIR__ . '/vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php'; +``` -## Changes +>We have prepared some examples for you, try [playground](https://github.com/pinpoint-apm/pinpoint-c-agent/tree/dev/testapps#playground). -- Fully support ZTS -- More stability -- Higher performance -- Easily use and maintain -- Support GRPC -## F & Q +## Feedback & Question ### 1. How to regenerate all AOP files? - Delete *__class_index_table* in Cache/ + Delete /tmp/.cache/.__class_index.php -### 2. Why not support automatically update AOP files? +### 2. Why does not support automatically update AOP files? We can DO but prefer not to DO! Because we have not yet found an efficient way to implement this and monitoring these files status every time is a bad idea. @@ -94,9 +71,7 @@ After full test, the AOP code could spend at least 1ms in our env(E5-2660 v4 @ 2 #### Performance Test Result -##### 3.1 [Test Result ☚](./detail_versions.md#performance-loss-under-stress-test) - -##### 3.2 [Flarum Test Result ☚](./User%20Manual.md#1.1-performance-result) + On the way ### For the developer @@ -108,21 +83,9 @@ After full test, the AOP code could spend at least 1ms in our env(E5-2660 v4 @ 2 #### 1. Exception or error message with a wrong file path. -https://github.com/pinpoint-apm/pinpoint-c-agent/issues/99 + https://github.com/pinpoint-apm/pinpoint-c-agent/issues/99 #### 2. If I do not use composer/autoloader, can I use this version? -Sorry, `pinpoint-php-aop` does not support to wrap the user class (or internal class) without composer/autoloader. By the way, [Composer](https://getcomposer.org/) is GOOD. O(∩_∩)O - -https://github.com/pinpoint-apm/pinpoint-c-agent/issues/103 - -#### 3. ~Why not support PHP5.x.~ Already done! - -https://www.php.net/supported-versions.php - -#### 4. ~Generator function is not supported.~ Already done! - -https://github.com/pinpoint-apm/pinpoint-c-agent/issues/100 + we supported none framework(yii,tp,...) project,even a simple php script, try example in testapps/php_wordpress,SimplePHP -#### 5. ~Some built-in functions can't AOP~ Already done! -https://github.com/pinpoint-apm/pinpoint-c-agent/issues/102 diff --git a/collector-agent/go.mod b/collector-agent/go.mod index 63ed36476..ffaf3e479 100644 --- a/collector-agent/go.mod +++ b/collector-agent/go.mod @@ -4,9 +4,6 @@ go 1.18 require ( github.com/golang/protobuf v1.5.3 - github.com/mattn/go-colorable v0.1.8 // indirect - github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect - github.com/onsi/gomega v1.14.0 // indirect github.com/shirou/gopsutil v3.21.2+incompatible github.com/shirou/gopsutil/v3 v3.21.2 github.com/sirupsen/logrus v1.8.1 @@ -14,6 +11,28 @@ require ( github.com/stretchr/testify v1.8.3 github.com/x-cray/logrus-prefixed-formatter v0.5.2 google.golang.org/grpc v1.56.3 - google.golang.org/protobuf v1.31.0 + google.golang.org/protobuf v1.34.1 gopkg.in/natefinch/lumberjack.v2 v2.0.0 ) + +require ( + github.com/BurntSushi/toml v1.4.0 // indirect + github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-ole/go-ole v1.2.4 // indirect + github.com/mattn/go-colorable v0.1.8 // indirect + github.com/mattn/go-isatty v0.0.12 // indirect + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect + github.com/onsi/ginkgo v1.16.4 // indirect + github.com/onsi/gomega v1.14.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/tklauser/go-sysconf v0.3.4 // indirect + github.com/tklauser/numcpus v0.2.1 // indirect + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect + golang.org/x/net v0.9.0 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/collector-agent/go.sum b/collector-agent/go.sum index 815ce37b7..2f69a9587 100644 --- a/collector-agent/go.sum +++ b/collector-agent/go.sum @@ -1,821 +1,39 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= -cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= -cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= -cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= -cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= -cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= -cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= -cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= -cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= -cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= -cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= -cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= -cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= -cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= -cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= -cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= -cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= -cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= -cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= -cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= -cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= -cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= -cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= -cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= -cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= -cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= -cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= -cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= -cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= -cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= -cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= -cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= -cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= -cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= -cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= -cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= -cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= -cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= -cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= -cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= -cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= -cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= -cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= -cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= -cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= -cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= -cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= -cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= -cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= -cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= -cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= -cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= -cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= -cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= -cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= -cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= -cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= -cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= -cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= -cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= -cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= -cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= -cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= -cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= -cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= -cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= -cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= -cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= -cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= -cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= -cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= -cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= -cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= -cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= -cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= -cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= -cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= -cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= -cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= -cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= -cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= -cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= -cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= -cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= -cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= -cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= -cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= -cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= -cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= -cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= -cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= -cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= -cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= -github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= -github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -827,51 +45,20 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.14.0 h1:ep6kpPVwmr/nTbklSx2nrLNSIO62DoYAhnPNIMhK8gI= github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/shirou/gopsutil v3.21.2+incompatible h1:U+YvJfjCh6MslYlIAXvPtzhW3YZEtc9uncueUNpD/0A= github.com/shirou/gopsutil v3.21.2+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.21.2 h1:fIOk3hyqV1oGKogfGNjUZa0lUbtlkx3+ZT0IoJth2uM= github.com/shirou/gopsutil/v3 v3.21.2/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tklauser/go-sysconf v0.3.4 h1:HT8SVixZd3IzLdfs/xlpq0jeSfTX57g1v6wB1EuzV7M= @@ -880,665 +67,75 @@ github.com/tklauser/numcpus v0.2.1 h1:ct88eFm+Q7m2ZfXJdan1xYoXKlmwsfP+k88q05KvlZ github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa h1:idItI2DDfCokpg0N51B2VtiLdJ4vAuXC9fnCb2gACo4= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1546,49 +143,3 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= -modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= -modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= -modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= -modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= -modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/common/CHANGES.md b/common/CHANGES.md index 25ac4ee6c..1f9ef3fd7 100644 --- a/common/CHANGES.md +++ b/common/CHANGES.md @@ -1,5 +1,6 @@ -## v0.5.1 2024-04-30 -- add EXP_V2 protocol +## v0.5.1 2024-05-07 +- fix logging bug +- add EXP_V2 protocol 2024-04-30 ## v0.5.0 2024-03-06 - refactor common library diff --git a/common/src/Logging.cpp b/common/src/Logging.cpp index aaeef584a..32150d5c9 100644 --- a/common/src/Logging.cpp +++ b/common/src/Logging.cpp @@ -43,7 +43,7 @@ inline long get_tid() { return GetCurrentThreadId(); } #endif static log_msg_cb log_call_back_; -static bool enable_trace_ = 0; +static bool enable_trace_ = false; #define LOG_SIZE 40960 thread_local char buf[LOG_SIZE] = {0}; diff --git a/common/src/NodePool/PoolManager.h b/common/src/NodePool/PoolManager.h index eef4a43b0..35ab1827f 100644 --- a/common/src/NodePool/PoolManager.h +++ b/common/src/NodePool/PoolManager.h @@ -124,7 +124,7 @@ class PoolManager { Json::Value status; status["pool_total_node"] = totalNodesCount(); status["pool_free_node"] = freeNodesCount(); - status["common_libary_version"] = pinpoint_agent_version(); + status["common_library_version"] = pinpoint_agent_version(); auto add_alive_node_fun = [&status](TraceNode& node) { status["pool_alive_nodes"].append(node.id_); diff --git a/common/src/test_common.cc b/common/src/test_common.cc index b6bf9b660..34b6ab6cc 100644 --- a/common/src/test_common.cc +++ b/common/src/test_common.cc @@ -4,6 +4,7 @@ #include #include #include "common.h" +#include "json/value.h" using namespace testing; std::string ouputMsg; @@ -179,4 +180,11 @@ TEST(common, pp_trace) { pp_trace("한국어 인코딩 테스트 \n"); pp_trace("日本語エンコーディングをテストする \n"); pp_trace("%s %s \n", "日本語エンコーディングをテストする ", "combine"); +} + +TEST(common, none_utf8) { + // using Json = PP::AliasJson; + AliasJson::Value value; + value["a"] = "ä\xA9ü"; + pp_trace("%s ", value.toStyledString().c_str()); } \ No newline at end of file diff --git a/common/src/test_util.cc b/common/src/test_util.cc index 00ee55407..88ab51caa 100644 --- a/common/src/test_util.cc +++ b/common/src/test_util.cc @@ -20,6 +20,7 @@ * Author: eeliu */ +#include #include #include "NodePool/PoolManager.h" using std::chrono::seconds; @@ -115,4 +116,9 @@ TEST(util, mergeTraceNodeTree_1) { EXPECT_TRUE(span.find("id2") != span.npos); EXPECT_TRUE(span.find("id3") != span.npos); EXPECT_TRUE(span.find("calls") != span.npos); +} + +TEST(util, logger) { + pp_trace("abc:%d", 2); + pp_trace("abc:%s", nullptr); } \ No newline at end of file diff --git a/install_pinpoint_php.sh b/install_pinpoint_php.sh new file mode 100644 index 000000000..9a87550f5 --- /dev/null +++ b/install_pinpoint_php.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +PINPOINT_PHP_VERSION=v0.1.11 +PINPOINT_PHP_VERSION_MD5SUM= +func_check_command(){ + command -v $1 >/dev/null 2>&1 || { echo >&2 " require $1 command. Aborting . "; exit 1; } +} + + +func_output_w(){ + RED='\033[0;31m' + NC='\033[0m' + echo "${RED} $1 ${NC}" +} + +func_output_n(){ + GREEN='\033[0;32m' + NC='\033[0m' + echo "${RED} $1 ${NC}" +} + +func_download_extension(){ + mkdir -p /tmp/pinpoint_php && cd /tmp/pinpoint_php && curl -L -o pinpoint_php.tar.gz https://github.com/eeliu/pinpoint-c-agent/releases/download/v0.1.11/pinpoint_php@feat-join-cut.tar.gz && tar xvf pinpoint_php.tar.gz && phpize && ./configure && make install + + # mkdir -p /tmp/pinpoint_php && cd /tmp/pinpoint_php && curl -L -o pinpoint_php.tar.gz https://github.com/eeliu/pinpoint-c-agent/releases/download/$PINPOINT_PHP_VERSION/pinpoint_php@$PINPOINT_PHP_VERSION.tar.gz && tar xvf pinpoint_php.tar.gz && phpize && ./configure && make install + # && rm /tmp/pinpoint_php* -rf +} + +func_install_pinpoint_config(){ + echo "enable pinpoint_php into php(php.ini);" + cat << EOF >>/tmp/pinpoint_php.ini +[pinpoint_php] +extension=pinpoint_php.so +# Collector-agent's TCP address, ip,port:Collector-Agent's ip,port +pinpoint_php.CollectorHost=tcp:dev-collector:10000 +# 0 is recommanded +pinpoint_php.SendSpanTimeOutMs=0 +# request should be captured duing 1 second. < 0 means no limited +pinpoint_php.TraceLimit=-1 +# DEBUG the agent +# error_reporting = E_ALL +# log_errors = On +# should be set false if in production env +pinpoint_php.DebugReport=true +EOF + INI_DIR=`php-config --ini-dir` + if [ -d "$INI_DIR" ]; then + cp /tmp/pinpoint_php.ini $INI_DIR + echo "install pinpoint_php into $INI_DIR"; + echo "<<< $INI_DIR/pinpoint_php.ini >>>"; + else + func_output_w "Your php does not set --ini-dir, enable pinpoint_php into php.ini !!!" + func_output_w ">> php.ini" + cat /tmp/pinpoint_php.ini + func_output_w ">> EOF" + fi + rm /tmp/pinpoint_php.ini +} + +func_show_pinpoint_php(){ + php -r "echo 'TEST: installed pinpoint_php:'. phpversion('pinpoint_php');" + func_output_n " \n everything looks done !"; +} + +main(){ + for cmd in php phpize gcc make php-config curl; do + func_check_command $cmd + done + func_download_extension + func_install_pinpoint_config + func_show_pinpoint_php +} + +main diff --git a/mm_check.sh b/mm_check.sh new file mode 100644 index 000000000..c36e570e9 --- /dev/null +++ b/mm_check.sh @@ -0,0 +1,7 @@ +#!bin/bash +valgrind --leak-check=full \ + --show-leak-kinds=all \ + --track-origins=yes \ + --verbose \ + --log-file=valgrind-out.txt \ + php tests/pinpoint_join_cut_redis.php \ No newline at end of file diff --git a/plugins/PHP/Framework/Yii2/Readme.md b/plugins/PHP/Framework/Yii2/Readme.md index 3f002ee6f..7a845b4b9 100644 --- a/plugins/PHP/Framework/Yii2/Readme.md +++ b/plugins/PHP/Framework/Yii2/Readme.md @@ -27,11 +27,8 @@ require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php'; ################################################################### -define('AOP_CACHE_DIR', __DIR__ . '/../Cache/'); -define('PLUGINS_DIR', __DIR__ . '/../Plugins/'); define('APPLICATION_NAME','app-yii2'); // your application name define('APPLICATION_ID','app-yii2'); // your application id -define('PINPOINT_USE_CACHE','YES'); define('PP_REQ_PLUGINS','\Pinpoint\Plugins\Yii2PerRequestPlugins'); require_once __DIR__ . '/../vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php'; ################################################################### diff --git a/plugins/PY/pinpointPy/libs/_psycopg2/test_case.py b/plugins/PY/pinpointPy/libs/_psycopg2/test_case.py index cd7ad2aef..b0d43a52b 100644 --- a/plugins/PY/pinpointPy/libs/_psycopg2/test_case.py +++ b/plugins/PY/pinpointPy/libs/_psycopg2/test_case.py @@ -20,12 +20,13 @@ def test_case(self): conn = psycopg2.connect( dbname="test", user="test", password="pinpoint", host="postgres", port=5432) cur = conn.cursor() + cur.execute("DROP TABLE IF EXISTS test") cur.execute( "CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);") cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (100, "abc'def")) cur.execute("SELECT * FROM test;") - resp = cur.fetchone() + cur.fetchone() conn.commit() cur.close() conn.close() diff --git a/src/PHP/CHANGES.md b/src/PHP/CHANGES.md index 43cae79cd..3e6fb8e06 100644 --- a/src/PHP/CHANGES.md +++ b/src/PHP/CHANGES.md @@ -1,2 +1,11 @@ +## 0.5.2 2024-05-30 +- add pinpoint_get_caller_arg + +## 0.5.1 2024-05-29 +- add _pinpoint_join_cut and test case +- rename api naming +- add pinpoint_get_this api and test case +- remove php5 support + ## 0.5.0 - support common library v0.5.0 \ No newline at end of file diff --git a/src/PHP/php_pinpoint_php.h b/src/PHP/php_pinpoint_php.h index 5182b5440..1330b19f5 100644 --- a/src/PHP/php_pinpoint_php.h +++ b/src/PHP/php_pinpoint_php.h @@ -16,13 +16,12 @@ #ifndef PHP_PINPOINT_PHP_H #define PHP_PINPOINT_PHP_H -#include "common.h" #include "config.h" - +#include "zend_types.h" extern zend_module_entry pinpoint_php_module_entry; #define phpext_pinpoint_php_ptr &pinpoint_php_module_entry -#define PHP_PINPOINT_PHP_VERSION "0.5.0" +#define PHP_PINPOINT_PHP_VERSION "0.5.2" #ifdef PHP_WIN32 #define PHP_PINPOINT_PHP_API __declspec(dllexport) @@ -37,10 +36,8 @@ extern zend_module_entry pinpoint_php_module_entry; #endif ZEND_BEGIN_MODULE_GLOBALS(pinpoint_php) - char *co_host; // tcp:ip:port should support dns zend_bool utest_flag; -// zend_bool limit; zend_bool debug_report; #if PHP_VERSION_ID >= 70000 zend_long tracelimit; @@ -49,10 +46,24 @@ zend_long w_timeout_ms; int tracelimit; int w_timeout_ms; #endif +HashTable *interceptors; ZEND_END_MODULE_GLOBALS(pinpoint_php) extern ZEND_DECLARE_MODULE_GLOBALS(pinpoint_php); +#if PHP_VERSION_ID < 70200 +typedef void (*zif_handler)(INTERNAL_FUNCTION_PARAMETERS); +#endif + +typedef struct { + zval before; + zval end; + zval exception; + zif_handler origin; + zend_function *origin_func; + zend_string *name; +} pp_interceptor_v_t; + #ifdef ZTS #define PPG(v) TSRMG(pinpoint_php_globals_id, zend_pinpoint_php_globals *, v) #else @@ -65,6 +76,24 @@ ZEND_TSRMLS_CACHE_EXTERN() #endif #endif +PHP_FUNCTION(_pinpoint_start_trace); +PHP_FUNCTION(_pinpoint_end_trace); +PHP_FUNCTION(_pinpoint_add_clue); +PHP_FUNCTION(_pinpoint_add_clues); +PHP_FUNCTION(_pinpoint_unique_id); +PHP_FUNCTION(pinpoint_get_this); +PHP_FUNCTION(pinpoint_get_caller_arg); +PHP_FUNCTION(_pinpoint_trace_limit); +PHP_FUNCTION(_pinpoint_drop_trace); +PHP_FUNCTION(_pinpoint_start_time); +PHP_FUNCTION(_pinpoint_set_context); +PHP_FUNCTION(_pinpoint_get_context); +PHP_FUNCTION(_pinpoint_mark_as_error); +// DEPRECATED("pinpoint_get_func_ref_args only used for compatiblity") +// PHP_FUNCTION(pinpoint_get_func_ref_args); +PHP_FUNCTION(pinpoint_status); +PHP_FUNCTION(_pinpoint_join_cut); + PHP_MINIT_FUNCTION(pinpoint_php); PHP_MSHUTDOWN_FUNCTION(pinpoint_php); PHP_RINIT_FUNCTION(pinpoint_php); diff --git a/src/PHP/pinpoint_php.cpp b/src/PHP/pinpoint_php.cpp index 22ef01724..6730e8024 100644 --- a/src/PHP/pinpoint_php.cpp +++ b/src/PHP/pinpoint_php.cpp @@ -33,19 +33,27 @@ /* $Id$ */ +#include "zend_API.h" +#include "zend_string.h" +#include "zend_types.h" +#include +#include +#include +#include +#include #ifdef HAVE_CONFIG_H #include "config.h" #endif +// clang-format off #include "php.h" #include "php_ini.h" -// #include "php_var.h" #include "ext/standard/info.h" #include "common.h" #include "php_pinpoint_php.h" -#include - +#include +// clang-format on #ifdef COMPILE_DL_PINPOINT_PHP #ifdef ZTS #if PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 80000 @@ -57,24 +65,10 @@ ZEND_TSRMLS_CACHE_DEFINE() ZEND_GET_MODULE(pinpoint_php) #endif -PHP_FUNCTION(pinpoint_start_trace); -PHP_FUNCTION(pinpoint_end_trace); -PHP_FUNCTION(pinpoint_add_clue); -PHP_FUNCTION(pinpoint_add_clues); -PHP_FUNCTION(pinpoint_unique_id); -PHP_FUNCTION(pinpoint_get_this); -PHP_FUNCTION(pinpoint_tracelimit); -PHP_FUNCTION(pinpoint_drop_trace); -PHP_FUNCTION(pinpoint_start_time); -PHP_FUNCTION(pinpoint_set_context); -PHP_FUNCTION(pinpoint_get_context); -PHP_FUNCTION(pinpoint_mark_as_error); -PHP_FUNCTION(pinpoint_get_func_ref_args); -PHP_FUNCTION(pinpoint_status); -ZEND_DECLARE_MODULE_GLOBALS(pinpoint_php) - +ZEND_DECLARE_MODULE_GLOBALS(pinpoint_php); static void pinpoint_log(char *msg); +// clang-format off /* {{{ PHP_INI */ @@ -96,7 +90,6 @@ STD_PHP_INI_ENTRY("pinpoint_php.TraceLimit", "-1", PHP_INI_ALL, OnUpdateLong, STD_PHP_INI_ENTRY("pinpoint_php.DebugReport", "no", PHP_INI_ALL, OnUpdateBool, debug_report, zend_pinpoint_php_globals, pinpoint_php_globals) - PHP_INI_END() /* }}} */ @@ -114,6 +107,13 @@ ZEND_ARG_INFO(0, nodeid) ZEND_ARG_INFO(0, flag) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_add_join_cb_cb_cb, 0, 0, 4) +ZEND_ARG_INFO(0, joinable) +ZEND_ARG_INFO(0, onBefore) +ZEND_ARG_INFO(0, onEnd) +ZEND_ARG_INFO(0, onException) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_add_msg_filename_lineno_id, 0, 0, 2) ZEND_ARG_INFO(0, msg) ZEND_ARG_INFO(0, filename) @@ -125,6 +125,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_add_timestamp, 0, 0, 0) ZEND_ARG_INFO(0, timestamp) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_add_arg_index, 0, 0, 0) +ZEND_ARG_INFO(0, index) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_add_id, 0, 0, 0) ZEND_ARG_INFO(0, nodeid) ZEND_END_ARG_INFO() @@ -137,26 +141,27 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_none, 0, 0, 0) ZEND_END_ARG_INFO() -// clang-format off /* {{{ pinpioint_php_functions[] * * Every user visible function must have an entry in pinpioint_php_functions[]. */ const zend_function_entry pinpoint_php_functions[] = { - PHP_FE(pinpoint_start_trace, arginfo_add_id) - PHP_FE(pinpoint_end_trace, arginfo_add_id) - PHP_FE(pinpoint_unique_id, arginfo_none) + PHP_FE(_pinpoint_start_trace, arginfo_add_id) + PHP_FE(_pinpoint_end_trace, arginfo_add_id) + PHP_FE(_pinpoint_unique_id, arginfo_none) PHP_FE(pinpoint_get_this, arginfo_none) + PHP_FE(pinpoint_get_caller_arg,arginfo_add_arg_index) PHP_FE(pinpoint_status, arginfo_none) - PHP_FE(pinpoint_get_func_ref_args, arginfo_none) - PHP_FE(pinpoint_drop_trace, arginfo_add_id) - PHP_FE(pinpoint_start_time, arginfo_none) - PHP_FE(pinpoint_set_context, arginfo_add_id_key_value) - PHP_FE(pinpoint_get_context, arginfo_add_id_value) - PHP_FE(pinpoint_tracelimit, arginfo_add_timestamp) - PHP_FE(pinpoint_mark_as_error, arginfo_add_msg_filename_lineno_id) - PHP_FE(pinpoint_add_clue, arginfo_add_id_key_value_flag) - PHP_FE(pinpoint_add_clues, arginfo_add_id_key_value_flag) + // PHP__FE(pinpoint_get_func_ref_args, arginfo_none) + PHP_FE(_pinpoint_drop_trace, arginfo_add_id) + PHP_FE(_pinpoint_start_time, arginfo_none) + PHP_FE(_pinpoint_set_context, arginfo_add_id_key_value) + PHP_FE(_pinpoint_get_context, arginfo_add_id_value) + PHP_FE(_pinpoint_trace_limit, arginfo_add_timestamp) + PHP_FE(_pinpoint_mark_as_error, arginfo_add_msg_filename_lineno_id) + PHP_FE(_pinpoint_add_clue, arginfo_add_id_key_value_flag) + PHP_FE(_pinpoint_add_clues, arginfo_add_id_key_value_flag) + PHP_FE(_pinpoint_join_cut,arginfo_add_join_cb_cb_cb) PHP_FE_END /* Must be the last line in pinpioint_php_functions[] */ }; /* }}} */ @@ -198,7 +203,7 @@ void (*old_error_cb)(int type, const char *error_filename, (x) = NULL; \ } -PHP_FUNCTION(pinpoint_drop_trace) { +PHP_FUNCTION(_pinpoint_drop_trace) { long _id = -1; NodeID id = E_ROOT_NODE, cur_id = E_ROOT_NODE; #if PHP_VERSION_ID < 70000 @@ -217,17 +222,17 @@ PHP_FUNCTION(pinpoint_drop_trace) { } PHP_FUNCTION(pinpoint_get_this) { - - // zend_execute_data *ex = EX(prev_execute_data); - // ex = ex->prev_execute_data; - // return_value = &ex->This; - // zend_weakref_get(execute_data->prev_execute_data->This, ); - // zend_weakref_get(execute_data->prev_execute_data->This, return_value); - // RETURN_OBJ(&execute_data->prev_execute_data->This); - RETURN_ZVAL(&execute_data->prev_execute_data->This, 0, 0); + if (EX(prev_execute_data) && EX(prev_execute_data)->prev_execute_data) { + zval *self = &EX(prev_execute_data)->prev_execute_data->This; + if (zval_get_type(self) != IS_UNDEF) { + RETURN_ZVAL(self, 1, 0); + } + } + pp_trace("pinpoint_get_this: not support, no this"); + RETURN_FALSE; } -PHP_FUNCTION(pinpoint_set_context) { +PHP_FUNCTION(_pinpoint_set_context) { long _id = -1; std::string key; zval *zvalue; @@ -271,7 +276,73 @@ PHP_FUNCTION(pinpoint_set_context) { RETURN_TRUE; } -PHP_FUNCTION(pinpoint_get_context) { +// ref from ZEND_FUNCTION(func_get_arg) +PHP_FUNCTION(pinpoint_get_caller_arg) { + uint32_t arg_count, first_extra_arg; + zval *arg; + zend_long requested_offset; + zend_execute_data *ex; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &requested_offset) == + FAILURE) { + return; + } + + if (requested_offset < 0) { + zend_error( + E_WARNING, + "pinpoint_get_caller_arg(): The argument number should be >= 0"); + RETURN_FALSE; + } + + // changes + // ex = EX(prev_execute_data) + ex = EX(prev_execute_data)->prev_execute_data; + if (ZEND_CALL_INFO(ex) & ZEND_CALL_CODE) { + zend_error(E_WARNING, "pinpoint_get_caller_arg(): Called from the global " + "scope - no function context"); + RETURN_FALSE; + } +#if PHP_MAJOR_VERSION == 8 && PHP_MINOR_VERSION >= 2 + if (zend_forbid_dynamic_call() == FAILURE) { + RETURN_THROWS(); + } +#else + if (zend_forbid_dynamic_call("pinpoint_get_caller_arg()") == FAILURE) { + RETURN_FALSE; + } +#endif + arg_count = ZEND_CALL_NUM_ARGS(ex); + + if ((zend_ulong)requested_offset >= arg_count) { + zend_error(E_WARNING, + "pinpoint_get_caller_arg(): Argument " ZEND_LONG_FMT + " not passed to function", + requested_offset); + RETURN_FALSE; + } + + first_extra_arg = ex->func->op_array.num_args; + if ((zend_ulong)requested_offset >= first_extra_arg && + (ZEND_CALL_NUM_ARGS(ex) > first_extra_arg)) { + arg = ZEND_CALL_VAR_NUM(ex, ex->func->op_array.last_var + + ex->func->op_array.T) + + (requested_offset - first_extra_arg); + } else { + arg = ZEND_CALL_ARG(ex, requested_offset + 1); + } + if (EXPECTED(!Z_ISUNDEF_P(arg))) { + +#if PHP_MAJOR_VERSION == 7 && PHP_MINOR_VERSION <= 2 + ZVAL_DEREF(arg); + ZVAL_COPY(return_value, arg); +#else + ZVAL_COPY_DEREF(return_value, arg); +#endif + } +} + +PHP_FUNCTION(_pinpoint_get_context) { long _id = -1; std::string key; #if PHP_VERSION_ID < 70000 @@ -310,9 +381,9 @@ PHP_FUNCTION(pinpoint_get_context) { } } -PHP_FUNCTION(pinpoint_start_time) { RETURN_LONG(pinpoint_start_time()); } +PHP_FUNCTION(_pinpoint_start_time) { RETURN_LONG(pinpoint_start_time()); } -PHP_FUNCTION(pinpoint_start_trace) { +PHP_FUNCTION(_pinpoint_start_trace) { long _id = -1; NodeID id = E_ROOT_NODE, cur_id = E_ROOT_NODE; #if PHP_VERSION_ID < 70000 @@ -380,7 +451,7 @@ void apm_error_cb(int type, const char *error_filename, const uint error_lineno, #endif } -PHP_FUNCTION(pinpoint_end_trace) { +PHP_FUNCTION(_pinpoint_end_trace) { long _id = -1; NodeID id = E_ROOT_NODE, cur_id = E_ROOT_NODE; @@ -404,7 +475,7 @@ PHP_FUNCTION(pinpoint_end_trace) { PHP_FUNCTION(pinpoint_status) { show_status(); } -PHP_FUNCTION(pinpoint_add_clue) { +PHP_FUNCTION(_pinpoint_add_clue) { std::string key; std::string value; long _id = -1; @@ -437,9 +508,9 @@ PHP_FUNCTION(pinpoint_add_clue) { pinpoint_add_clue(Id, key.c_str(), value.c_str(), (E_NODE_LOC)_flag); } -PHP_FUNCTION(pinpoint_unique_id) { RETURN_LONG(generate_unique_id()); } +PHP_FUNCTION(_pinpoint_unique_id) { RETURN_LONG(generate_unique_id()); } -PHP_FUNCTION(pinpoint_mark_as_error) { +PHP_FUNCTION(_pinpoint_mark_as_error) { std::string msg; std::string fileName; long _lineno = 0; @@ -473,7 +544,7 @@ PHP_FUNCTION(pinpoint_mark_as_error) { catch_error(id, msg.c_str(), fileName.c_str(), _lineno); } -PHP_FUNCTION(pinpoint_add_clues) { +PHP_FUNCTION(_pinpoint_add_clues) { std::string key; std::string value; long _id = -1; @@ -505,6 +576,460 @@ PHP_FUNCTION(pinpoint_add_clues) { pinpoint_add_clues(id, key.c_str(), value.c_str(), (E_NODE_LOC)_flag); } +static inline zend_string *merge_pp_style_name(zend_string *scope, + zend_string *func) { +#define MAX_CLASS_METHOD_SIZE 128 + char buf[MAX_CLASS_METHOD_SIZE] = {0}; + if (scope) { + int size = snprintf(buf, MAX_CLASS_METHOD_SIZE, "%s::%s", ZSTR_VAL(scope), + ZSTR_VAL(func)); + zend_string *name = zend_string_init(buf, size, 0); + zend_string *lower_name = zend_string_tolower(name); + zend_string_release(name); + return lower_name; + } else { + return zend_string_tolower(func); + } +} +#if PHP_MAJOR_VERSION == 8 and PHP_MINOR_VERSION >= 2 +// ref from php-8.2.19/ext/standard/var.c:137 +static zval *zend_array_index(zval *ar, int index) { + HashTable *__ht = Z_ARRVAL_P(ar); + uint32_t _idx = 0; + uint32_t _count = __ht->nNumUsed - _idx; + size_t _size = ZEND_HASH_ELEMENT_SIZE(__ht); + zval *__z = ZEND_HASH_ELEMENT_EX(__ht, _idx, _size); + zval *ret_zval = nullptr; + for (; _count > 0 && _idx < index; _count--) { + ret_zval = __z; + if (HT_IS_PACKED(__ht)) { + __z++; + } else { + Bucket *_p = (Bucket *)__z; + __z = &(_p + 1)->val; + } + _idx++; + } + return ret_zval; +} +#else +// ref from php-8.1.25/ext/standard/var.c:137 +static zval *zend_array_index(zval *ar, int index) { + HashTable *__ht = Z_ARRVAL_P(ar); + Bucket *_p = __ht->arData; + Bucket *_end = _p + __ht->nNumUsed; + zval *val; + for (int i = 0; i < index && _p != _end; _p++, i++) { + val = &_p->val; + } + return val; +} +#endif + +static inline pp_interceptor_v_t *find_interceptor(zend_string *func_name) { + return (pp_interceptor_v_t *)zend_hash_str_find_ptr( + PPG(interceptors), ZSTR_VAL(func_name), ZSTR_LEN(func_name)); +} + +static zend_string * +get_pp_style_function_name(zend_execute_data *execute_data) { + zend_function *func = execute_data->func; + zend_object *object = (Z_TYPE(execute_data->This) == IS_OBJECT) + ? Z_OBJ(execute_data->This) + : NULL; + +#if PHP_MAJOR_VERSION == 8 + zend_string *function_name = NULL; + if (func) { + function_name = func->common.function_name; + } +#else + zend_string *function_name = + (func->common.scope && func->common.scope->trait_aliases) + ? zend_resolve_method_name((object ? object->ce : func->common.scope), + func) + : func->common.function_name; +#endif + if (object) { + zend_string *scope_name; + if (func->common.scope) { + scope_name = func->common.scope->name; +#if PHP_MAJOR_VERSION == 7 and PHP_MINOR_VERSION <= 2 + } else if (object->handlers->get_class_name == + std_object_handlers.get_class_name) { +#else + } else if (object->handlers->get_class_name == zend_std_get_class_name) { +#endif + scope_name = object->ce->name; + } else { + scope_name = object->handlers->get_class_name(object); + } + return merge_pp_style_name(scope_name, function_name); + } else if (func->common.scope) { + zend_string *scope = func->common.scope->name; + return merge_pp_style_name(scope, function_name); + } else { + return merge_pp_style_name(nullptr, function_name); + } +} + +static void call_callback_function(zval *callback, zval *params, + uint32_t params_count, int free_params, + zval *needs_retval = nullptr) { + // ref SAPI.c:139 + int error; + zend_fcall_info fcall_info; + char *callback_error = NULL; + zval default_retval; + zval *retval = &default_retval; + if (needs_retval) { + retval = needs_retval; + } + zend_fcall_info_cache fcall_cache; + if (zend_fcall_info_init(callback, 0, &fcall_info, &fcall_cache, NULL, + &callback_error) == SUCCESS) { + fcall_info.retval = retval; + fcall_info.param_count = params_count; + fcall_info.params = params; + fcall_info.object = NULL; + +#if PHP_MAJOR_VERSION == 7 + fcall_info.no_separation = 0; +#endif + + // fcall_cache.initialized = 1; + // fcall_cache.function_handler = EG(autoload_func); + + fcall_cache.called_scope = NULL; + fcall_cache.object = NULL; + + error = zend_call_function(&fcall_info, &fcall_cache); + if (error == FAILURE) { + goto callback_failed; + } else { + if (!needs_retval) { + zval_ptr_dtor(retval); + } + } + } else { + callback_failed: + php_error_docref(NULL, E_WARNING, + "Could not call the pinpoint_join_cut callback"); + } + + if (callback_error) { + efree(callback_error); + } + + if (free_params) { + zend_fcall_info_args_clear(&fcall_info, 1); + } +} + +static void get_shadow_copy_current_parameters(int param_count, + zval *argument_array) { + // ref zend_API.c:46 + // _zend_get_parameters_array_ex + zval *param_ptr; + + param_ptr = ZEND_CALL_ARG(EG(current_execute_data), 1); + + while (param_count-- > 0) { + ZVAL_COPY(argument_array, param_ptr); + argument_array++; + param_ptr++; + } +} + +static void replace_ex_caller_parameters(zval *argv) { + if (zval_get_type(argv) != IS_ARRAY) { + pp_trace("replace_ex_caller_parameters return value must be `an array`"); + return; + } + + int size = zend_array_count(Z_ARRVAL_P(argv)); + pp_trace("argv size:%d", size); + uint32_t param_count = ZEND_CALL_NUM_ARGS(EG(current_execute_data)); + if (size != param_count) { + pp_trace( + "error: replace_ex_caller_parameters return `size` does not matched"); + return; + } + + int i = 0; + zval *ex_param_ptr = ZEND_CALL_ARG(EG(current_execute_data), 1); + + // check old and new + while (i < size) { + zval *val = zend_array_index(argv, i + 1); + if (Z_TYPE_P(ex_param_ptr) != Z_TYPE_P(val)) { + pp_trace("error: replace_ex_caller_parameters return `type` does not " + "matched " + "expected:%d give:%d", + Z_TYPE_P(ex_param_ptr), Z_TYPE_P(val)); + return; + } + i++; + ex_param_ptr++; + } + + i = 0; + ex_param_ptr = ZEND_CALL_ARG(EG(current_execute_data), 1); + while (i < size) { + zval *val = zend_array_index(argv, i + 1); + + if (Z_TYPE_P(val) == IS_ARRAY) { + pp_trace("args[%d] type:%d in:%u va:%u", i, zval_get_type(val), + Z_REFCOUNT_P(val), Z_REFCOUNT_P(ex_param_ptr)); + } + + zval_ptr_dtor(ex_param_ptr); + ZVAL_COPY(ex_param_ptr, val); + + i++; + ex_param_ptr++; + } +} + +static void call_interceptor_before(pp_interceptor_v_t *interceptor) { + + uint32_t param_count = ZEND_CALL_NUM_ARGS(EG(current_execute_data)); + zval *params = (zval *)safe_emalloc(param_count, sizeof(zval), 0); + + get_shadow_copy_current_parameters(param_count, params); + zval retval; + call_callback_function(&interceptor->before, params, param_count, 1, &retval); + pp_trace(" call_interceptor_before:%s return type(%d) zval", + ZSTR_VAL(interceptor->name), zval_get_type(&retval)); + + replace_ex_caller_parameters(&retval); + + zval_ptr_dtor(&retval); +} + +static void call_interceptor_end(pp_interceptor_v_t *interceptor, + zval *return_value) { + uint32_t param_count = 1; + zval *params = (zval *)safe_emalloc(param_count, sizeof(zval), 0); + ZVAL_COPY(params, return_value); + call_callback_function(&interceptor->end, params, param_count, 1); + pp_trace("call_interceptor_end: %s ", ZSTR_VAL(interceptor->name)); +} +static void call_interceptor_exception(pp_interceptor_v_t *interceptor) { + zend_object *exception = EG(exception); + pp_trace(" exception: %p ", exception); +} + +ZEND_NAMED_FUNCTION(pinpoint_interceptor_handler_entry) { + // 1. get function/method name + // ref zend_builtin_functions.c:2278 + zend_string *function_name = get_pp_style_function_name(execute_data); + pp_trace("pinpoint_interceptor_handler_entry: handle func/method:%s", + ZSTR_VAL(function_name)); + pp_interceptor_v_t *interceptor = find_interceptor(function_name); + zend_string_release(function_name); + if (interceptor == nullptr) { + pp_trace(" MUST be a bug 🐞🐞🐞 !!! please send us " + "email@dl_cd_pinpoint@navercorp.com"); + return; + } + + // 2. call before + // 3. call origin + // 4. call end + // 5. call exception if catch + + zend_try { + call_interceptor_before(interceptor); + interceptor->origin(INTERNAL_FUNCTION_PARAM_PASSTHRU); + call_interceptor_end(interceptor, return_value); + } + zend_catch { + call_interceptor_exception(interceptor); + call_interceptor_end(interceptor, return_value); + } + zend_end_try(); +} + +static pp_interceptor_v_t *make_interceptor(zend_string *name, zval *before, + zval *end, zval *exception, + zend_function *origin_func) { + pp_interceptor_v_t *interceptor = + (pp_interceptor_v_t *)malloc(sizeof(pp_interceptor_v_t)); + bzero(interceptor, sizeof(*interceptor)); + interceptor->name = zend_string_dup(name, 0); + interceptor->origin = origin_func->internal_function.handler; + interceptor->origin_func = origin_func; + ZVAL_DUP(&interceptor->before, before); + ZVAL_DUP(&interceptor->end, end); + ZVAL_DUP(&interceptor->exception, exception); + + return interceptor; +} + +static inline void free_callback(zval *val) { + if (Z_TYPE_P(val) != IS_UNDEF) { + zval_ptr_dtor(val); + } +} + +static void free_interceptor(pp_interceptor_v_t *interceptor) { + pp_trace("start free interceptor: %s", ZSTR_VAL(interceptor->name)); + zend_function *origin_func = interceptor->origin_func; + origin_func->internal_function.handler = interceptor->origin; + zend_string_release(interceptor->name); + free_callback(&interceptor->before); + free_callback(&interceptor->end); + free_callback(&interceptor->exception); + free(interceptor); +} + +static void add_function_interceptor(zend_string *name, zval *before, zval *end, + zval *exception) { + zend_function *func = (zend_function *)zend_hash_str_find_ptr( + CG(function_table), ZSTR_VAL(name), ZSTR_LEN(name)); + if (func != NULL && + func->internal_function.handler == pinpoint_interceptor_handler_entry) { + pp_trace("function `%s` interceptor already added", ZSTR_VAL(name)); + } else if (func != NULL) { + pp_interceptor_v_t *interceptor = + make_interceptor(name, before, end, exception, func); + // insert into hash + if (!zend_hash_add_ptr(PPG(interceptors), name, interceptor)) { + free_interceptor(interceptor); + pp_trace("added interceptor on `function`: %s failed. reason: already " + "exist ", + ZSTR_VAL(name)); + return; + } + func->internal_function.handler = pinpoint_interceptor_handler_entry; + pp_trace("added interceptor on `function`: %s success", ZSTR_VAL(name)); + } else { + pp_trace("not found function: %s", ZSTR_VAL(name)); + } +} + +static void add_class_method_interceptor(zend_string *cls_name, + zend_string *method, zval *before, + zval *end, zval *exception) { + + zend_class_entry *module = (zend_class_entry *)zend_hash_str_find_ptr( + CG(class_table), ZSTR_VAL(cls_name), ZSTR_LEN(cls_name)); + if (module != NULL) { + zend_function *original = (zend_function *)zend_hash_str_find_ptr( + &module->function_table, ZSTR_VAL(method), ZSTR_LEN(method)); + + if (original != NULL) { + // overwrite with plugins eg: pinpoint_pdo_exec +#define MAX_CLASS_METHOD_SIZE 128 + char buf[MAX_CLASS_METHOD_SIZE] = {0}; + int size = snprintf(buf, MAX_CLASS_METHOD_SIZE, "%s::%s", + ZSTR_VAL(cls_name), ZSTR_VAL(method)); + + zend_string *name = zend_string_init(buf, size, 0); + + pp_interceptor_v_t *interceptor = + make_interceptor(name, before, end, exception, original); + + if (!zend_hash_add_ptr(PPG(interceptors), name, interceptor)) { + free_interceptor(interceptor); + pp_trace("added interceptor on `module`: %s failed. reason: already " + "exist ", + ZSTR_VAL(name)); + zend_string_release(name); + return; + } + original->internal_function.handler = pinpoint_interceptor_handler_entry; + pp_trace("added interceptor on `module`: %s success", ZSTR_VAL(name)); + zend_string_release(name); + } else { + pp_trace("add interceptor on `module`: %s::%s failed: no such method", + ZSTR_VAL(cls_name), ZSTR_VAL(method)); + } + } else { + pp_trace("add interceptor on `module`: %s failed: no such module", + ZSTR_VAL(cls_name)); + // debug CG(class_table) + // zend_class_entry *ce; + // void *val; + // ZEND_HASH_FOREACH_PTR(CG(class_table), val) { + // zend_class_entry *ce = (zend_class_entry *)val; + // pp_trace("key:%s name: %s", ZSTR_VAL(_p->key), ZSTR_VAL(ce->name)); + // // if (ce->type == ZEND_INTERNAL_CLASS && + // // ce->default_static_members_count > 0) { + // // class_cleanup_handlers[--class_count] = ce; + // // } + // } + // ZEND_HASH_FOREACH_END(); + } +} + +static void add_interceptor(zval *joinable, zval *before, zval *end, + zval *exception) { + uint32_t join_type = zend_hash_num_elements(Z_ARRVAL_P(joinable)); + + switch (join_type) { + case 2: { + zval *v = zend_array_index(joinable, 1); + zend_string *module = zend_string_tolower(Z_STR_P(v)); + v = zend_array_index(joinable, 2); + zend_string *method = zend_string_tolower(Z_STR_P(v)); + pp_trace("try to interceptor module(class)/function=%s:%s", + ZSTR_VAL(module), ZSTR_VAL(method)); + add_class_method_interceptor(module, method, before, end, exception); + zend_string_release(module); + zend_string_release(method); + break; + } + case 1: { + zval *v = zend_array_index(joinable, 1); + zend_string *function = zend_string_tolower(Z_STR_P(v)); + pp_trace("try to interceptor function=%s", ZSTR_VAL(function)); + add_function_interceptor(function, before, end, exception); + zend_string_release(function); + break; + } + default: + pp_trace("not supported join_type:%d", join_type); + return; + } +} + +PHP_FUNCTION(_pinpoint_join_cut) { + zval *joinable, *before, *end, *exception; + + ZEND_PARSE_PARAMETERS_START(4, 4) + Z_PARAM_ARRAY(joinable) + Z_PARAM_ZVAL(before) + Z_PARAM_ZVAL(end) + Z_PARAM_ZVAL(exception) + ZEND_PARSE_PARAMETERS_END(); + + // check input + if (Z_TYPE_P(joinable) != IS_ARRAY || + zend_hash_num_elements(Z_ARRVAL_P(joinable)) == 0) { + goto PARAMETERS_ERROR; + } + + if (!zend_is_callable(before, 0, NULL) || !zend_is_callable(end, 0, NULL) || + !zend_is_callable(exception, 0, NULL)) { + goto PARAMETERS_ERROR; + } + add_interceptor(joinable, before, end, exception); + + RETURN_TRUE; + +PARAMETERS_ERROR: + php_error_docref( + NULL, E_WARNING, + "Parameters does not meet: joinable: %s size:%d, onBefore:%s," + "onEnd:%s, onException:%s", + zend_zval_type_name(joinable), + zend_hash_num_elements(Z_ARRVAL_P(joinable)), zend_zval_type_name(before), + zend_zval_type_name(end), zend_zval_type_name(exception)); + RETURN_FALSE; +} +#if 0 /** * copy from php source zend_buildin_functions.c * ZEND_FUNCTION(func_get_args) @@ -601,8 +1126,9 @@ PHP_FUNCTION(pinpoint_get_func_ref_args) { } #endif } +#endif -PHP_FUNCTION(pinpoint_tracelimit) { +PHP_FUNCTION(_pinpoint_trace_limit) { long timestamp = -1; #if PHP_VERSION_ID < 70000 @@ -641,12 +1167,14 @@ PHP_MINIT_FUNCTION(pinpoint_php) { old_error_cb = zend_error_cb; zend_error_cb = apm_error_cb; - pinpoint_set_agent(PPG(co_host), PPG(w_timeout_ms), PPG(tracelimit), 1500); + if (PPG(debug_report) == 1) { - register_logging_cb(pinpoint_log, 1); + register_logging_cb(nullptr, 1); + // register_logging_cb(pinpoint_log, 1); } else { - register_logging_cb(pinpoint_log, 0); + // register_logging_cb(pinpoint_log, 0); + register_logging_cb(nullptr, 0); } return SUCCESS; @@ -664,15 +1192,24 @@ PHP_MSHUTDOWN_FUNCTION(pinpoint_php) { } /* }}} */ +static void zend_interceptor_hash_dtor(zval *val) { + // pp_trace("test: zval:%p type:%d ", zv, Z_TYPE_P(zv)); + if (Z_TYPE_P(val) == IS_PTR) { + pp_interceptor_v_t *interceptor = (pp_interceptor_v_t *)Z_PTR_P(val); + free_interceptor(interceptor); + } +} + /* Remove if there's nothing to do at request start */ /* {{{ PHP_RINIT_FUNCTION */ PHP_RINIT_FUNCTION(pinpoint_php) { -#if defined(COMPILE_DL_PINPIOINT_PHP) && defined(ZTS) +#if defined(COMPILE_DL_PINPOINT_PHP) && defined(ZTS) ZEND_TSRMLS_CACHE_UPDATE(); #endif - + PPG(interceptors) = (HashTable *)malloc(sizeof(HashTable)); + zend_hash_init(PPG(interceptors), 0, NULL, zend_interceptor_hash_dtor, 1); return SUCCESS; } /* }}} */ @@ -682,9 +1219,17 @@ PHP_RINIT_FUNCTION(pinpoint_php) { */ PHP_RSHUTDOWN_FUNCTION(pinpoint_php) { NodeID _parent_id = pinpoint_get_per_thread_id(); - while (_parent_id != E_INVALID_NODE && _parent_id != E_ROOT_NODE) { + while (_parent_id > E_ROOT_NODE) { _parent_id = pinpoint_end_trace(_parent_id); } + pinpoint_update_per_thread_id(E_ROOT_NODE); + + if (PPG(interceptors)) { + zend_hash_destroy(PPG(interceptors)); + free(PPG(interceptors)); + PPG(interceptors) = nullptr; + } + return SUCCESS; } /* }}} */ diff --git a/src/PHP/pinpoint_php_api.php b/src/PHP/pinpoint_php_api.php deleted file mode 100644 index 6e6de55b5..000000000 --- a/src/PHP/pinpoint_php_api.php +++ /dev/null @@ -1,72 +0,0 @@ -=7.1" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + }, + "time": "2024-03-17T08:10:35+00:00" + }, + { + "name": "pinpoint-apm/pinpoint-php-aop", + "version": "dev-fix-expose-autoload", + "dist": { + "type": "path", + "url": "/home/pinpoint/pinpoint-php-aop", + "reference": "f786f0818e9538b33e197e66337513780b2f3615" + }, + "require": { + "ext-json": "*", + "ext-pinpoint_php": "^0.5.2", + "nikic/php-parser": "^4.1", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ext-pinpoint_php": "^0.5.2", + "guzzlehttp/guzzle": "8.0.x-dev", + "mongodb/mongodb": "v1.19.x-dev", + "nikic/php-parser": "^4.1", + "phpbench/phpbench": "1.0.0", + "phpunit/phpunit": "^8", + "predis/predis": "^3.0@alpha" + }, + "type": "library", + "autoload": { + "psr-4": { + "Pinpoint\\": "lib/Pinpoint/" + }, + "files": [ + "lib/Pinpoint/Plugins/functions.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "eeliu", + "email": "dl_cd_pinpoint@navercorp.com" + } + ], + "description": "A simple Aop library via php-parse", + "transport-options": { + "relative": false + } + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.30.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T15:07:36+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.30.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-06-19T12:30:46+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "pinpoint-apm/pinpoint-php-aop": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/testapps/php.dockerfile b/testapps/SimplePHP/php.dockerfile similarity index 89% rename from testapps/php.dockerfile rename to testapps/SimplePHP/php.dockerfile index 6b68001e3..d2909e71e 100644 --- a/testapps/php.dockerfile +++ b/testapps/SimplePHP/php.dockerfile @@ -1,12 +1,6 @@ FROM yiisoftware/yii2-php:7.4-fpm-nginx -RUN composer create-project --prefer-dist yiisoft/yii2-app-basic /app -RUN composer require -w pinpoint-apm/pinpoint-php-aop:v2.1.0 -RUN chown -R www-data:www-data /app -# Copy index.php -COPY testapps/PHP/index.php /app/web/index.php -COPY testapps/PHP/php.ini /usr/local/etc/php/conf.d/pinpoint-php-ext.ini # build ext COPY config.m4 /pinpoint-c-agent/config.m4 COPY src/PHP /pinpoint-c-agent/src/PHP @@ -14,4 +8,12 @@ COPY common /pinpoint-c-agent/common COPY tests /pinpoint-c-agent/tests RUN cd /pinpoint-c-agent/ && phpize && ./configure && make && make install +COPY testapps/PHP/php.ini /usr/local/etc/php/conf.d/pinpoint-php-ext.ini + +RUN composer create-project --prefer-dist yiisoft/yii2-app-basic /app +RUN composer require -w pinpoint-apm/pinpoint-php-aop:v3.0.1 +RUN chown -R www-data:www-data /app +# Copy index.php +COPY testapps/PHP/index.php /app/web/index.php + EXPOSE 80 \ No newline at end of file diff --git a/testapps/SimplePHP/php.ini b/testapps/SimplePHP/php.ini index a9096689c..fa2f61b3a 100644 --- a/testapps/SimplePHP/php.ini +++ b/testapps/SimplePHP/php.ini @@ -1,4 +1,6 @@ extension=mongodb.so +extension=redis.so +extension=memcached.so [pinpoint_php] extension=pinpoint_php @@ -8,4 +10,5 @@ pinpoint_php.DebugReport=true [error_log] error_reporting = E_ALL | E_STRICT -log_errors= On \ No newline at end of file +log_errors= On + diff --git a/testapps/SimplePHP/run.php b/testapps/SimplePHP/run.php index d8029c230..a164d6be4 100644 --- a/testapps/SimplePHP/run.php +++ b/testapps/SimplePHP/run.php @@ -2,23 +2,27 @@ /** * 1. if you have questions,please create an issue on https://github.com/pinpoint-apm/pinpoint-c-agent/issues - * 2. if need more examples, please let us known by issue. + * 2. if need more examples, please let us known by creating an issue. * */ require_once __DIR__ . '/vendor/autoload.php'; -define('AOP_CACHE_DIR', __DIR__ . '/Cache'); define('APPLICATION_NAME', 'cd.dev.test.php'); // your application name define('APPLICATION_ID', 'cd.dev.test.run'); // your application id -define('PP_REQ_PLUGINS', SimplePHP\RequestPlugin::class); +define('PP_REQ_PLUGINS', Pinpoint\Plugins\DefaultRequestPlugin::class); require_once __DIR__ . '/vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php'; -use Pinpoint\Plugins\Sys\PDO\PDO; -use Pinpoint\Plugins\Sys\mysqli\Mysqli; - $mysql_host = "dev-mysql"; $mongodb_host = "mongodb"; $mariadb_host = "dev-mariadb"; +$memcached_host = "memcached"; + +// $host = "10.10.10.10"; +// $mysql_host = $host; +// $mongodb_host = $host; +// $mariadb_host = $host; +// $memcached_host = $host; + function call_mysql() { global $mysql_host; @@ -26,11 +30,13 @@ function call_mysql() $password = "password"; $dbname = "employees"; - $conn = new PDO("mysql:host=$mysql_host;port=33060;dbname=$dbname", $username, $password); + $conn = new PDO("mysql:host=$mysql_host;port=3306;dbname=$dbname", $username, $password); $stmt = $conn->prepare("SELECT * FROM `dept_emp_latest_date` LIMIT 1000;"); $stmt->execute(); + $stmt->fetchAll(); + $stmt->fetch(); - $sql = 'SELECT name, dept_no, dept_name FROM departments ORDER BY dept_name LIMIT 10'; + $sql = 'SELECT dept_no, dept_name FROM departments ORDER BY dept_name LIMIT 5'; foreach ($conn->query($sql) as $row) { print $row['dept_no'] . "\t"; print $row['dept_name'] . "\n"; @@ -43,7 +49,9 @@ function call_mysqli() { global $mysql_host; mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); - $mysqli = new mysqli($mysql_host, "root", "password", "employees", 33060); + $mysqli = new mysqli(); + + $mysqli->connect($mysql_host, "root", "password", "employees", 3306); $result = $mysqli->query("SELECT * FROM `dept_emp_latest_date` LIMIT 1000;"); printf("Select returned %d rows.\n", $result->num_rows); @@ -53,6 +61,12 @@ function call_mysqli() $stmt->bind_param("i", $id); $stmt->execute(); $stmt->fetch(); + $stmt->free_result(); + mysqli_query($mysqli, "SELECT * FROM `dept_emp_latest_date` LIMIT 1000;"); + + $s_stmt = mysqli_prepare($mysqli, "SELECT * FROM employees WHERE emp_no=?"); + mysqli_stmt_bind_param($s_stmt, "i", $id); + mysqli_stmt_execute($stmt); } function call_mariadb() @@ -60,7 +74,7 @@ function call_mariadb() global $mariadb_host; mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // 33061 , is the port of mariadb server - $mysqli = new mysqli($mariadb_host, "root", "password", "test", 33061); + $mysqli = new mysqli($mariadb_host, "root", "password", "test", 3307); $result = $mysqli->query("SELECT * FROM `contacts` LIMIT 1000;"); printf("Select returned %d rows.\n", $result->num_rows); @@ -90,12 +104,99 @@ function call_mongodb() var_dump($coll->findOne(['foo' => 'bar'])); } +function check_pinpoint_header($values) +{ + $headers = $values["headers"]; + assert($headers["Pinpoint-Flags"] != ""); + assert($headers["Pinpoint-Host"] != ""); + assert($headers["Pinpoint-Pappname"] != ""); + assert($headers["Pinpoint-Papptype"] != ""); + assert($headers["Pinpoint-Pspanid"] != ""); + assert($headers["Pinpoint-Sampled"] != ""); + assert($headers["Pinpoint-Traceid"] != ""); + assert($headers["Pinpoint-Spanid"] != ""); + assert($headers["User-Abc"] === "xxxx"); + assert($headers["User-Header"] == "2133"); +} + +function call_curl() +{ + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "http://httpbin.org/anything"); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'User-Abc:xxxx', + 'User-Header:2133' + ]); + $response = curl_exec($ch); + $j_res = json_decode($response, true); + check_pinpoint_header($j_res); + $error = curl_error($ch); + echo curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); + // reuse $ch + curl_setopt($ch, CURLOPT_URL, "http://httpbin.org/get"); + $response = curl_exec($ch); + $j_res = json_decode($response, true); + check_pinpoint_header($j_res); + $error = curl_error($ch); + echo curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); + echo "error:$error \n"; + curl_close($ch); +} + +function call_redis() +{ + echo "case: strings \n"; + $redis = new Redis(); + $redis->pconnect('redis', 6379); + $redis->get("a"); + $redis->set("a", "b"); + $redis->setNx("a", "10"); + $redis->append("ar", "aa"); + $redis->setRange("ar", 0, "bb"); + $redis->get("ar"); + $redis->getRange("ar", 0, 2); + $redis->strlen("ar"); + $redis->getBit("ar", 1); + $redis->setBit("ar", 1, 3); + var_dump($redis->get("ar")); + $redis->mSet(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']); + + + $redis->multi() + ->set('key1', 'val1') + ->get('key1') + ->set('key2', 'val2') + ->get('key2') + ->exec(); + + var_dump($redis->exists('foo', 'bar', 'baz', 'not exists')); + $redis->flushdb(); +} + +function call_memcached() +{ + $Memcached = new Memcached(); + global $memcached_host; + $Memcached->addServer($memcached_host, 11211); + $Memcached->set('key', "abc"); + var_dump($Memcached->get('key')); // boolean false + var_dump($Memcached->getResultCode()); // int 0 which is Memcached::RES_SUCCESS + var_dump($Memcached->add("test_add", 234)); // int 0 which is Memcached::RES_SUCCESS + // var_dump($Memcached->appendByKey("xxx", "test_add", 234)); // int 0 which is Memcached::RES_SUCCESS + var_dump($Memcached->delete("test_add")); // int 0 which is Memcached::RES_SUCCESS + var_dump($Memcached->deleteMulti(["test_add", "a", "b", "c"])); // int 0 which is Memcached::RES_SUCCESS +} + function main() { call_mysql(); call_mysqli(); call_mariadb(); call_mongodb(); + call_curl(); + call_redis(); + call_memcached(); } main(); diff --git a/testapps/cachethq/cachethq.dockerfile b/testapps/cachethq/cachethq.dockerfile new file mode 100644 index 000000000..22877b349 --- /dev/null +++ b/testapps/cachethq/cachethq.dockerfile @@ -0,0 +1,20 @@ +FROM cachethq/docker:latest +USER root +RUN apk update && apk add --virtual build-dependencies build-base gcc wget git php7-dev +ENV DB_DRIVER=pgsql +COPY config.m4 /pinpoint-c-agent/config.m4 +COPY src/PHP /pinpoint-c-agent/src/PHP +COPY common /pinpoint-c-agent/common +COPY testapps/php_wordpress/pinpoint_php.ini /pinpoint-c-agent/pinpoint_php.ini + + +RUN cd /pinpoint-c-agent/ && phpize && ./configure && make install +RUN cp /pinpoint-c-agent/pinpoint_php.ini /etc/php7/conf.d/ + +COPY testapps/cachethq/index.php /var/www/html/public/index.php +# CMD [ "bash" ] +# COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer +RUN /bin/composer.phar self-update +USER 1001 +RUN cd /var/www/html/ && php -d memory_limit=-1 /bin/composer.phar require pinpoint-apm/pinpoint-php-aop:v3.0.1 +# USER root \ No newline at end of file diff --git a/testapps/cachethq/index.php b/testapps/cachethq/index.php new file mode 100644 index 000000000..2a38be200 --- /dev/null +++ b/testapps/cachethq/index.php @@ -0,0 +1,78 @@ +make('Illuminate\Contracts\Http\Kernel'); +$request = Illuminate\Http\Request::capture(); +$response = $kernel->handle($request); + +$response->send(); +$kernel->terminate($request, $response); diff --git a/testapps/compose.yaml b/testapps/compose.yaml index e7a13be6a..fb771223f 100644 --- a/testapps/compose.yaml +++ b/testapps/compose.yaml @@ -6,10 +6,13 @@ services: MYSQL_ROOT_PASSWORD: 'password' MYSQL_TCP_PORT: 3306 ports: - - '33060:3306' + - '3306:3306' volumes: - ..:/workspace:cached - + deploy: + resources: + limits: + cpus: "1" healthcheck: test: [ @@ -30,19 +33,26 @@ services: environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: test + MYSQL_TCP_PORT: 3307 # MYSQL_USER: root # MYSQL_PASSWORD: password volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql ports: - - "33061:3306" + - "3307:3307" healthcheck: - test: [ "CMD", "healthcheck.sh", "--su-mysql", "--connect", "--innodb_initialized" ] + test: + [ + "CMD", + "healthcheck.sh", + "--su-mysql", + "--connect", + "--innodb_initialized" + ] start_period: 1m - start_interval: 10s interval: 1m timeout: 5s - retries: 3 + retries: 3 dev-mysql-setup: image: mysql:5.7 @@ -104,7 +114,7 @@ services: condition: service_started restart: always build: - dockerfile: testapps/php.dockerfile + dockerfile: testapps/SimplePHP/php.dockerfile context: ../ ports: - 8185:80 @@ -210,7 +220,7 @@ services: healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet ports: - - 27017:27017 + - 27017:27017 python-plugins: build: @@ -252,21 +262,37 @@ services: dockerfile: testapps/grpc_py_client.dockerfile context: ../ + java-agent: + container_name: spring + build: + dockerfile: testapps/java_call_app/spring.dockerfile + context: ../ + ports: + - 8085:8080 + restart: always + volumes: + - /etc/hosts:/etc/hosts + simple-php: container_name: simple-php depends_on: dev-mysql: condition: service_healthy redis: - condition: service_healthy + condition: service_healthy mongodb: - condition: service_healthy + condition: service_healthy dev-mariadb: - condition: service_healthy + condition: service_healthy + memcached: + condition: service_healthy + dev-collector: + condition: service_started + restart: always build: - dockerfile: testapps/simplephp.dockerfile - context: ../ + dockerfile: testapps/SimplePHP/php.dockerfile + context: ../ postgres: image: postgres:14-alpine @@ -277,7 +303,7 @@ services: - POSTGRES_USER=test - POSTGRES_DB=test volumes: - - ./init.sql:/docker-entrypoint-initdb.d/init.sql + - ./init.sql:/docker-entrypoint-initdb.d/init.sql restart: always healthcheck: test: [ "CMD-SHELL", "pg_isready", "-d", "db_prod" ] @@ -285,3 +311,149 @@ services: timeout: 30s retries: 5 start_period: 80s + + php-compatible: + build: + dockerfile: testapps/php_compatible.dockerfile + context: ../ + args: + - PHP_VERSION=${PHP_VERSION} + depends_on: + dev-mysql: + condition: service_healthy + redis: + condition: service_healthy + mongodb: + condition: service_healthy + dev-mariadb: + condition: service_healthy + + memcached: + image: memcached:alpine3.20 + ports: + - "11211:11211" + restart: always + healthcheck: + test: [ "CMD", "nc", "-z", "127.0.0.1", "11211" ] + interval: 10s + timeout: 30s + retries: 5 + start_period: 80s + deploy: + resources: + limits: + cpus: "0.5" + memory: 50M + + php-wordpress: + build: + dockerfile: testapps/php_wordpress/php-wordpress.dockerfile + context: ../ + ports: + - "8080:80" + cap_add: + - SYS_PTRACE + depends_on: + dev-mysql: + condition: service_healthy + dev-collector: + condition: service_started + healthcheck: + test: curl -f http://localhost:80 + interval: 5s + timeout: 1s + + phpmyadmin: + build: + dockerfile: testapps/php_phpmyadmin/phpmyadmin.dockerfile + context: ../ + environment: + - PMA_ARBITRARY=1 + - PMA_HOST=dev-mysql + - PMA_USER=root + - PMA_PASSWORD=password + ports: + - "8081:80" + cap_add: + - SYS_PTRACE + depends_on: + dev-mysql: + condition: service_healthy + dev-collector: + condition: service_started + deploy: + resources: + limits: + cpus: "2" + healthcheck: + test: curl -f http://localhost:80 + interval: 5s + timeout: 1s + + cg_phpmyadmin: + image: phpmyadmin:apache + environment: + - PMA_ARBITRARY=1 + - PMA_HOST=dev-mysql + - PMA_USER=root + - PMA_PASSWORD=password + ports: + - "8082:80" + cap_add: + - SYS_PTRACE + depends_on: + dev-mysql: + condition: service_healthy + deploy: + resources: + limits: + cpus: "2" + + flarum: + # image: + build: + dockerfile: testapps/flarum/flarum.dockerfile + context: ../ + container_name: flarum + env_file: + - ./flarum/flarum.env + ports: + - 8888:8888 + depends_on: + dev-mysql: + condition: service_healthy + dev-collector: + condition: service_started + + cachet: + build: + dockerfile: testapps/cachethq/cachethq.dockerfile + context: ../ + ports: + - 8000:8000 + environment: + - DB_DRIVER=pgsql + - DB_HOST=postgres + - DB_PORT=5432 + - CACHE_DRIVER=redis + - DB_DATABASE=test + - DB_USERNAME=test + - DB_PASSWORD=pinpoint + - DB_PREFIX=chq_ + - APP_KEY=${APP_KEY:-null} + - APP_LOG=errorlog + - APP_ENV=${APP_ENV:-production} + - APP_DEBUG=true + - REDIS_HOST=redis + - REDIS_DATABASE=0 + - REDIS_PORT=6379 + - DEBUG=true + - APP_KEY=base64:JlA4Fr6ysePTdzUyqGEmPXxknANEIfOF7M2krYh8wgM= + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + dev-collector: + condition: service_started + restart: on-failure \ No newline at end of file diff --git a/testapps/flarum/flarum.dockerfile b/testapps/flarum/flarum.dockerfile new file mode 100644 index 000000000..fd096a449 --- /dev/null +++ b/testapps/flarum/flarum.dockerfile @@ -0,0 +1,16 @@ +FROM mondedie/flarum:latest + +RUN apk update && apk add php8-dev build-base + +COPY config.m4 /pinpoint-c-agent/config.m4 +COPY src/PHP /pinpoint-c-agent/src/PHP +COPY common /pinpoint-c-agent/common +COPY testapps/php_wordpress/pinpoint_php.ini /pinpoint-c-agent/pinpoint_php.ini + +RUN cd /pinpoint-c-agent/ && phpize && ./configure && make install +RUN INI_DIR=`php-config --ini-dir` && cp /pinpoint-c-agent/pinpoint_php.ini $INI_DIR + +# RUN curl -sL https://github.com/eeliu/pinpoint-c-agent/releases/download/v0.1.11/install_pinpoint_php.sh | sh + +COPY testapps/flarum/site.php /flarum/app/site.php +RUN cd /flarum/app/ && composer require -w pinpoint-apm/pinpoint-php-aop:v3.0.1 \ No newline at end of file diff --git a/testapps/flarum/flarum.env b/testapps/flarum/flarum.env new file mode 100644 index 000000000..fb3e73f9a --- /dev/null +++ b/testapps/flarum/flarum.env @@ -0,0 +1,17 @@ +DEBUG=true +FORUM_URL=http://localhost:8888 + +# Database configuration +DB_HOST=dev-mysql +DB_NAME=flarum +DB_USER=root +DB_PASS=password +DB_PREF=flarum_ +DB_PORT=3306 + +# User admin flarum (environment variable for first installation) +# /!\ admin password must contain at least 8 characters /!\ +FLARUM_ADMIN_USER=admin +FLARUM_ADMIN_PASS=eeliu@admin +FLARUM_ADMIN_MAIL=admin@domain.tld +FLARUM_TITLE=Test flarum \ No newline at end of file diff --git a/testapps/flarum/site.php b/testapps/flarum/site.php new file mode 100644 index 000000000..0684839a1 --- /dev/null +++ b/testapps/flarum/site.php @@ -0,0 +1,70 @@ + __DIR__, + 'public' => __DIR__ . '/public', + 'storage' => __DIR__ . '/storage', +]); diff --git a/testapps/java_call_app/conf/pinpoint.config b/testapps/java_call_app/conf/pinpoint.config new file mode 100644 index 000000000..7364a01b1 --- /dev/null +++ b/testapps/java_call_app/conf/pinpoint.config @@ -0,0 +1,1292 @@ +# +# Pinpoint agent configuration +# +# Profiles +# - -Dpinpoint.profiler.profiles.active=release or local +# - Modify `pinpoint.profiler.profiles.active=release` in $PINPOINT_AGENT_DIR/pinpoint-root.config +# Custom Profile +# - 1. Create a custom profile in $PINPOINT_HOME/profiles/MyProfile +#    - Add pinpoint.config & log4j2.xml +# - 2. -Dpinpoint.profiler.profiles.active=MyProfile +# Support external property +# - -Dpinpoint.config=$MY_CONFIG_PATH/pinpoint.config + + +# GRPC or THRIFT +profiler.transport.module=GRPC +########################################################### +# gRPC Configuration # +########################################################### +profiler.transport.grpc.collector.ip=dev-pinpoint + + +########################################################### +# Thrift Configuration # +########################################################### +profiler.collector.ip=dev-pinpoint + + +########################################################### +# Profiler Global Configuration # +########################################################### +profiler.enable=true + +# Application namespace +# Differentiate from external pinpoint agents. (e.g., com.pinpoint) +profiler.application.namespace= + +profiler.interceptorregistry.size=8192 + +# Manually override jvm vendor name (Oracle, IBM, OpenJDK, etc) +# You probably won't ever need to set this value. +profiler.jvm.vendor.name= + +# Manually override agent's OS name (MAC, Window, Linus, AIX, HP_UX, BSD) +# You probably won't ever need to set this value.(to collect file descriptor) +profiler.os.name= + +# Interval (in milliseconds) at which agent stat data is collected. (default : 5000, min : 1000, max : 5000) +profiler.jvm.stat.collect.interval=5000 +# Number of agent stat data sent to the collector in a single batch. (default : 6) +profiler.jvm.stat.batch.send.count=6 + +# Allow to add detailed collector's metrics +profiler.jvm.stat.collect.detailed.metrics=false + +# Allow sampling. +profiler.sampling.enable=true + +# support 2 types, COUNTING(default) and PERCENT. +# If this value set to COUNTING(default), sampling rate is 1/n. +# If this value set to PERCENT, sampling rate is n%. +profiler.sampling.type=PERCENT + +# depend on profiler.samplging.rate.type, + +# if it's COUNTING(the default), then 1 out of n transactions will be sampled where n is the rate. +# eg. 1: 100% 20: 5% 50: 2% 100: 1% +profiler.sampling.counting.sampling-rate=100 +# @Deprecate : Alias for profiler.sampling.counting.sampling-rate +#profiler.sampling.rate=20 + +# if it's PERCENT, then first x transactions out of y transactions will be sampled. +# Support from 100% to 0.01% +# eg. 100: 100% 50: 50% 5: 5% 0.01: 0.01% +profiler.sampling.percent.sampling-rate=100 + + +# Permits per second, if throughput is 0, it is unlimited. +# "New" is a transaction that is newly traced. +profiler.sampling.new.throughput=0 +# "Continue" is a transaction that is already being tracked. +profiler.sampling.continue.throughput=0 + +# Allow buffering when flushing span to IO. +profiler.io.buffering.enable=true + +# How many spans to store if buffering enabled. +profiler.io.buffering.buffersize=20 + +########################################################### +# Base Tcp Sender # +########################################################### +# Allow TCP data command. +profiler.tcpdatasender.command.accept.enable=true +profiler.tcpdatasender.command.activethread.enable=true +profiler.tcpdatasender.command.activethread.count.enable=true +profiler.tcpdatasender.command.activethread.threaddump.enable=true +profiler.tcpdatasender.command.activethread.threadlightdump.enable=true + +profiler.tcpdatasender.client.write.timeout=3000 +profiler.tcpdatasender.client.request.timeout=3000 +profiler.tcpdatasender.client.reconnect.interval=3000 +profiler.tcpdatasender.client.ping.interval=300000 +profiler.tcpdatasender.client.handshake.interval=60000 + +profiler.tcpdatasender.client.write.buffer.highwatermark=32m +profiler.tcpdatasender.client.write.buffer.lowwatermark=16m + +# Interval to retry sending agent info. Unit is milliseconds. +profiler.agentInfo.send.retry.interval=300000 + + +########################################################### +# Stat Data Sender # +########################################################### +# Should keep in mind +# 1. Loadbancing : TCP transport load balancing is per connection.(UDP transport loadbalancing is per packet) +# 2. In unexpected situations, UDP has its own protection feature (like packet loss etc.), but tcp does not have such a feature. (We will add protection later) +profiler.statdatasender.transport.type=UDP + +# These settings are active only when using UDP. +# Capacity of the StatDataSender write queue. +profiler.statdatasender.write.queue.size=5120 +#profiler.statdatasender.socket.sendbuffersize=1048576 +#profiler.statdatasender.socket.timeout=3000 +profiler.statdatasender.chunk.size=16384 +profiler.statdatasender.socket.type=OIO + +# These settings are active only when using TCP. +profiler.statdatasender.write.buffer.highwatermark=16m +profiler.statdatasender.write.buffer.lowwatermark=8m + + +########################################################### +# Span Data Sender # +########################################################### +# Should keep in mind +# 1. Loadbancing : TCP transport load balancing is per connection.(UDP transport loadbalancing is per packet) +# 2. In unexpected situations, UDP has its own protection feature (like packet loss etc.), but tcp does not have such a feature. (We will add protection later) +profiler.spandatasender.transport.type=UDP + +# These settings are active only when using UDP. +# Capacity of the SpanDataSender write queue. +profiler.spandatasender.write.queue.size=5120 +#profiler.spandatasender.socket.sendbuffersize=1048576 +#profiler.spandatasender.socket.timeout=3000 +profiler.spandatasender.chunk.size=16384 +profiler.spandatasender.socket.type=OIO + +# These settings are active only when using TCP. +profiler.spandatasender.write.buffer.highwatermark=16m +profiler.spandatasender.write.buffer.lowwatermark=8m + + +# Trace Agent active thread info. +profiler.pinpoint.activethread=true + +# Trace DataSource +profiler.pinpoint.datasource=true + +# Deadlock Monitor +profiler.monitor.deadlock.enable=true +profiler.monitor.deadlock.interval=60000 + +## Call Stack +# Set max depth, if -1 is unlimited and min is 2. +profiler.callstack.max.depth=64 +profiler.callstack.overflow.log.ration=100 + +# weather or not to propagate exceptions occurred at interceptor +profiler.interceptor.exception.propagate=false + +# Allow bytecode framework (ASM only) +profiler.instrument.engine=ASM + +# bytecode dump option +# java bytecode debug option +bytecode.dump.enable=false +#bytecode.dump.classlist=com.pinpoint.user.UserService,com.pinpoint.debug.TestClass +bytecode.dump.classlist= +bytecode.dump.bytecode=false +bytecode.dump.verify=false +bytecode.dump.asm=false + +# Matcher +profiler.instrument.matcher.enable=true +# Matcher cache. max size is 64. +profiler.instrument.matcher.interface.cache.size=4 +profiler.instrument.matcher.interface.cache.entry.size=16 +profiler.instrument.matcher.annotation.cache.size=4 +profiler.instrument.matcher.annotation.cache.entry.size=4 +profiler.instrument.matcher.super.cache.size=4 +profiler.instrument.matcher.super.cache.entry.size=4 + +# Lambda expressions. +profiler.lambda.expressions.support=true + +# Proxy HTTP headers. +# Please see (https://github.com/naver/pinpoint/blob/master/doc/proxy-http-header.md) for more information. +profiler.proxy.http.header.enable=true +# User-specified HTTP headers +# e.g. profiler.proxy.http.headers=X-Trace, X-Request +profiler.proxy.http.headers= + +# HTTP status code with request failure. +# 1xx, 2xx, 3xx, 4xx, 5xx, 100, 101, 200, 201, ... 501, 502, 503, 504, 505 +# e.g. profiler.http.status.code.errors=5xx, 401, 403 +profiler.http.status.code.errors=5xx + +# record HTTP request headers case-sensitive +# set to HEADERS-ALL to record all of the request headers including cookie. +# e.g. profiler.http.record.request.headers=X-AccessKey,X-Device-UUID +#profiler.http.record.request.headers= + +# record HTTP request cookies(case-sensitive) in Cookie header +# e.g. profiler.http.record.request.cookies=userid,device-id,uuid +#profiler.http.record.request.cookies= + +# record HTTP response headers case-sensitive +# set to HEADERS-ALL to record all of the headers. +# e.g. profiler.http.record.response.headers=Set-Cookie +#profiler.http.record.response.headers= + +########################################################### +# application type # +########################################################### +#profiler.applicationservertype=TOMCAT +#profiler.applicationservertype=BLOC + +# Needs to be a comma separated list of plugin's groupId:artifactId +# Ex: com.navercorp.pinpoint:pinpoint-tomcat-plugin, com.navercorp.pinpoint:pinpoint-jboss-plugin +profiler.plugin.load.order= +profiler.plugin.disable= + +########################################################### +# user defined classes # +########################################################### +# Specify classes and methods you want to profile here. + +# Needs to be a comma separated list of fully qualified class names, or fully qualified package names with wild card class. +profiler.include= +# Ex: foo.bar.MyClass, foo.baz.* + +# Needs to be a comma separated list of fully qualified method names. Wild card not supported. +profiler.entrypoint= +# Ex: foo.bar.MyClass.myMethod, foo.bar.MyClass.anotherMethod + +# Message queue listener invoker methods. +# This is usually for when a separate implementation or a framework provides a separate handler for invoking callbacks +# when consuming messages. +# Comma-separated list of fully qualified method names with a Message argument. +profiler.message.queue.client.handler.methods=org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener,org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener + +########################################################### +# user defined ignore-error-handler # +########################################################### +# Set exception to ignore error +# +# eg) Set `com.myapplication.user.AccessDeniedException("Access is denied")` to error +# +# ${ERROR_HANDLER_ID} PATTERN = [A-Za-z0-9-_]+ +# +# Match the FQCN(Fully qualified Class Name) of the exception. Separated by "," +# profiler.ignore-error-handler.${ERROR_HANDLER_ID}.class-name=com.myapplication.user.AccessDeniedException +# +# Match Exception.getMessage(), This action is performed when FQCN matching is successful. +# The match condition uses String.contains(). Separated by "," +# profiler.ignore-error-handler.${ERROR_HANDLER_ID}.exception-message@contains=Access is denied +# +# Search for chained exceptions(Exception.getCause()). (default : true) +# profiler.ignore-error-handler.${ERROR_HANDLER_ID}.nested=true +# +# Search for parent class. (default : true) +# profiler.ignore-error-handler.${ERROR_HANDLER_ID}.parent=true + +profiler.ignore-error-handler.myErrorHandler.class-name= +profiler.ignore-error-handler.myErrorHandler.exception-message@contains= +# profiler.ignore-error-handler.myErrorHandler.nested=true +# profiler.ignore-error-handler.myErrorHandler.parent=true + +########################################################### +# TOMCAT # +########################################################### +profiler.tomcat.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.tomcat.bootstrap.main=org.apache.catalina.startup.Bootstrap +# Hide pinpoint headers. +profiler.tomcat.hidepinpointheader=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.tomcat.excludeurl= +# HTTP Request methods to exclude from tracing +#profiler.tomcat.excludemethod=POST,PUT +profiler.tomcat.tracerequestparam=true + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.tomcat.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.tomcat.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.tomcat.realipemptyvalue}, Ignore header value. +#profiler.tomcat.realipemptyvalue=unknown + + +########################################################### +# JETTY # +########################################################### +profiler.jetty.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.jetty.bootstrap.main=org.eclipse.jetty.start.Main +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.jetty.excludeurl= +# HTTP Request methods to exclude from tracing +#profiler.jetty.excludemethod= +# Hide pinpoint headers. +profiler.jetty.hidepinpointheader=true +profiler.jetty.tracerequestparam=true + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.jetty.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.jetty.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.jetty.realipemptyvalue}, Ignore header value. +#profiler.jetty.realipemptyvalue=unknown + +########################################################### +# DUBBO # +########################################################### +profiler.dubbo.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.dubbo.bootstrap.main=com.alibaba.dubbo.container.Main + +########################################################### +# APACHE DUBBO # +########################################################### +profiler.apache.dubbo.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.apache.dubbo.bootstrap.main=org.apache.dubbo.container.Main + + +########################################################### +# JBOSS # +########################################################### +profiler.jboss.enable=true +profiler.jboss.traceEjb=false +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.jboss.bootstrap.main=org.jboss.modules.Main +# Hide pinpoint headers. +profiler.jboss.hidepinpointheader=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.jboss.excludeurl= +# HTTP Request methods to exclude from tracing +#profiler.jboss.excludemethod= +profiler.jboss.tracerequestparam=true + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.jboss.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.jboss.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.jboss.realipemptyvalue}, Ignore header value. +#profiler.jboss.realipemptyvalue=unknown + +########################################################### +# Resin # +########################################################### +# default enable resin plugin +profiler.resin.enable=true +# if empty , default value is : com.caucho.server.resin.Resin +profiler.resin.bootstrap.main= +# trace param in request ,default value is true +profiler.resin.tracerequestparam=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.resin.excludeurl= +# Hide pinpoint headers. +profiler.resin.hidepinpointheader=true +# HTTP Request methods to exclude from tracing +#profiler.resin.excludemethod= + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.resin.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.resin.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.resin.realipemptyvalue}, Ignore header value. +#profiler.resin.realipemptyvalue=unknown + +########################################################### +# Weblogic # +########################################################### +profiler.weblogic.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.weblogic.bootstrap.main=weblogic.Server +# trace param in request ,default value is true +profiler.weblogic.tracerequestparam=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.weblogic.excludeurl= +# HTTP Request methods to exclude from tracing +#profiler.weblogic.excludemethod= +# Hide pinpoint headers. +profiler.weblogic.hidepinpointheader=true + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.weblogic.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.weblogic.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.weblogic.realipemptyvalue}, Ignore header value. +#profiler.weblogic.realipemptyvalue=unknown + +########################################################### +# Websphere # +########################################################### +profiler.websphere.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.websphere.bootstrap.main= +# trace param in request ,default value is true +profiler.websphere.tracerequestparam=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.websphere.excludeurl= +# HTTP Request methods to exclude from tracing +profiler.websphere.excludemethod= +# Hide pinpoint headers. +profiler.websphere.hidepinpointheader=true + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.websphere.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.websphere.realipheader=X-Real-IP +#profiler.websphere.realipemptyvalue=unknown + +########################################################### +# Vert.x(Reliability and stability can not be guaranteed) # +########################################################### +profiler.vertx.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.vertx.bootstrap.main=io.vertx.core.Starter +# Track Vertx.runOnContext() & Vertx.executeBlocking(). +# Sets the base packages that implements io.vertx.core.Handler. +# Improvement is in progress. +profiler.vertx.handler.base-packages= +# e.g. com.service.handler, com.server.http.handler + +# HTTP server +profiler.vertx.http.server.enable=true +# Set HttpServerRequestHandler method name. The argument is io.vertx.core.http.HttpServerRequest. +# Vert.x 3.6 ~ 3.7 +profiler.vertx.http.server.request-handler.method.name=io.vertx.ext.web.impl.RouterImpl.handle +# Vert.x 3.5 +# profiler.vertx.http.server.request-handler.method.name=io.vertx.ext.web.impl.RouterImpl.accept +profiler.vertx.http.server.tracerequestparam=true +profiler.vertx.http.server.hidepinpointheader=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.vertx.http.server.excludeurl= +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.vertx.http.server.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.vertx.http.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.vertx.http.server.realipemptyvalue}, Ignore header value. +#profiler.vertx.http.server.realipemptyvalue=unknown +# HTTP Request methods to exclude from tracing +#profiler.vertx.http.server.excludemethod= + +# HTTP client +profiler.vertx.http.client.enable=true +profiler.vertx.http.client.param=true +profiler.vertx.http.client.cookie=false +# When to dump cookies. Either ALWAYS or EXCEPTION. +profiler.vertx.http.client.cookie.dumptype=EXCEPTION +# 1 out of n cookies will be sampled where n is the rate. (1: 100%) +profiler.vertx.http.client.cookie.sampling.rate=1 +profiler.vertx.http.client.cookie.dumpsize=1024 +profiler.vertx.http.client.entity.statuscode=true + +########################################################### +# Undertow +########################################################### +profiler.undertow.enable=true +profiler.undertow.deploy.servlet=true +profiler.undertow.bootstrap.main= +# Set class name that implements io.undertow.server.HttpHandler. +# The HttpHandler class name is an argument of the Undertow.builder().setHandler(httpHandler) method. +# Support ANT style pattern. e.g. foo.handler.*, bar.??.RequestHandler, your.inner-class.name* +## Default is ALL HttpHandler +## io.undertow.servlet.handlers.ServletInitialHandler$1 - Servlet deployment (e.g. Spring Boot Undertow, Wildfly) +## org.springframework.http.server.reactive.UndertowHttpHandlerAdapter - Spring WebFlux +profiler.undertow.http-handler.class.name=io.undertow.servlet.handlers.ServletInitialHandler$1, org.springframework.http.server.reactive.UndertowHttpHandlerAdapter + +# trace param in request ,default value is true +profiler.undertow.tracerequestparam=true +# Hide pinpoint headers. +profiler.undertow.hidepinpointheader=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.undertow.excludeurl= +# HTTP Request methods to exclude from tracing +#profiler.undertow.excludemethod= + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.undertow.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.undertow.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.undertow.realipemptyvalue}, Ignore header value. +#profiler.undertow.realipemptyvalue=unknown + +########################################################### +# SPRING BOOT # +########################################################### +profiler.springboot.enable=true +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.springboot.bootstrap.main=org.springframework.boot.loader.JarLauncher, org.springframework.boot.loader.WarLauncher, org.springframework.boot.loader.PropertiesLauncher + +########################################################### +# Reactor Netty +########################################################### +profiler.reactor-netty.enable=true + +# Classes for detecting application server type. Comma separated list of fully qualified class names. Wildcard not supported. +profiler.reactor-netty.server.bootstrap.main= +# use an asynchronous endpoint. +profiler.reactor-netty.server.end-point.async.enable=true +# trace param in request ,default value is true +profiler.reactor-netty.server.tracerequestparam=true +# URLs to exclude from tracing. +# Support ant style pattern. e.g. /aa/*.html, /??/exclude.html +profiler.reactor-netty.server.excludeurl= +# HTTP Request methods to exclude from tracing +#profiler.reactor-netty.server.excludemethod= + +# original IP address header +# https://en.wikipedia.org/wiki/X-Forwarded-For +#profiler.reactor-netty.server.realipheader=X-Forwarded-For +# nginx real ip header +#profiler.reactor-netty.server.realipheader=X-Real-IP +# optional parameter, If the header value is ${profiler.reactor-netty.realipemptyvalue}, Ignore header value. +#profiler.reactor-netty.server.realipemptyvalue=unknown + +# Client +profiler.reactor-netty.client.enable=true +# Record Parameter. +profiler.reactor-netty.client.param=true +# Unsupported cookie and entity information + +# Set whether to trace the Subscriber.onError(Throwable t) method +profiler.reactor-netty.trace.subscribe.error=true +# Set messages to be excluded from errors. Messages are separated by ',' characters. +profiler.reactor-netty.trace.subscribe.error.exclude.message= + +########################################################### +# JSP # +########################################################### +profiler.jsp.enable=true + +########################################################### +# JDBC # +########################################################### +# Size of cache. Fixed maximum. +profiler.jdbc.sqlcachesize=1024 +# trace bindvalues for PreparedStatements +profiler.jdbc.tracesqlbindvalue=true +# Maximum bindvalue size. +profiler.jdbc.maxsqlbindvaluesize=1024 +# Bytes formatter of PreparedStatement.setBytes(int, byte[]) +# format : hex or raw +profiler.jdbc.preparedstatement.bytes.format=hex +profiler.jdbc.format.maxwidth=64 + +# +# MYSQL +# +# Profile MySQL. +profiler.jdbc.mysql=true +# Allow profiling of setautocommit. +profiler.jdbc.mysql.setautocommit=false +# Allow profiling of commit. +profiler.jdbc.mysql.commit=false +# Allow profiling of rollback. +profiler.jdbc.mysql.rollback=false +# Trace bindvalues for MySQL PreparedStatements (overrides profiler.jdbc.tracesqlbindvalue) +#profiler.jdbc.mysql.tracesqlbindvalue=true + +# +# MARIADB +# +# Profile MariaDB +profiler.jdbc.mariadb=true +# Allow profiling of setautocommit. +profiler.jdbc.mariadb.setautocommit=false +# Allow profiling of commit. +profiler.jdbc.mariadb.commit=false +# Allow profiling of rollback. +profiler.jdbc.mariadb.rollback=false +# Trace bindvalues for MariaDB PreparedStatements (overrides profiler.jdbc.tracesqlbindvalue) +#profiler.jdbc.mariadb.tracesqlbindvalue=true + +# +# MSSQL JDBC +# +# Profile Mssql +profiler.jdbc.mssql=false +profiler.jdbc.mssql.setautocommit=false +profiler.jdbc.mssql.commit=false +profiler.jdbc.mssql.rollback=false +profiler.jdbc.mssql.tracesqlbindvalue=false + +# +# MSSQL Jtds +# +# Profile jTDS. +profiler.jdbc.jtds=true +# Allow profiling of setautocommit. +profiler.jdbc.jtds.setautocommit=false +# Allow profiling of commit. +profiler.jdbc.jtds.commit=false +# Allow profiling of rollback. +profiler.jdbc.jtds.rollback=false +# Trace bindvalues for jTDS PreparedStatements (overrides profiler.jdbc.tracesqlbindvalue) +#profiler.jdbc.jtds.tracesqlbindvalue=true + +# +# Oracle +# +# Profile Oracle DB. +profiler.jdbc.oracle=true +# Allow profiling of setautocommit. +profiler.jdbc.oracle.setautocommit=false +# Allow profiling of commit. +profiler.jdbc.oracle.commit=false +# Allow profiling of rollback. +profiler.jdbc.oracle.rollback=false +# Trace bindvalues for Oracle PreparedStatements (overrides profiler.jdbc.tracesqlbindvalue) +#profiler.jdbc.oracle.tracesqlbindvalue=true + +# +# CUBRID +# +# Profile CUBRID. +profiler.jdbc.cubrid=true +# Allow profiling of setautocommit. +profiler.jdbc.cubrid.setautocommit=false +# Allow profiling of commit. +profiler.jdbc.cubrid.commit=false +# Allow profiling of rollback. +profiler.jdbc.cubrid.rollback=false +# Trace bindvalues for CUBRID PreparedStatements (overrides profiler.jdbc.tracesqlbindvalue) +#profiler.jdbc.cubrid.tracesqlbindvalue=true + +# +# DBCP +# +# Profile DBCP. +profiler.jdbc.dbcp=true +profiler.jdbc.dbcp.connectionclose=false + +# +# DBCP2 +# +# Profile DBCP2. +profiler.jdbc.dbcp2=true +profiler.jdbc.dbcp2.connectionclose=false + +# +# HIKARICP +# +profiler.jdbc.hikaricp=true +profiler.jdbc.hikaricp.connectionclose=false + +# +# INFORMIX +# support 4.10.10.0+ +# +# Profile INFORMIX. +profiler.jdbc.informix=true +# Allow profiling of setautocommit. +profiler.jdbc.informix.setautocommit=false +# Allow profiling of commit. +profiler.jdbc.informix.commit=false +# Allow profiling of rollback. +profiler.jdbc.informix.rollback=false +# Trace bindvalues for INFORMIX PreparedStatements (overrides profiler.jdbc.tracesqlbindvalue) +#profiler.jdbc.informix.tracesqlbindvalue=true + +# +# DRUID +# +profiler.jdbc.druid=true +profiler.jdbc.druid.connectionclose=false + +# +# CASSANDRA +# +# Profile CASSANDRA. +profiler.cassandra=true +# Trace bindvalues for CASSANDRA PreparedStatements (overrides profiler.jdbc.tracesqlbindvalue) +#profiler.cassandra.tracecqlbindvalue=true + +# +# PostgreSQL +# +# Profile PostgreSQL. +profiler.jdbc.postgresql=true +# trace bindvalues for PreparedStatements +profiler.jdbc.postgresql.tracesqlbindvalue=true +# Allow profiling of setautocommit. +profiler.jdbc.postgresql.setautocommit=false +# Allow profiling of commit. +profiler.jdbc.postgresql.commit=false +# Allow profiling of rollback. +profiler.jdbc.postgresql.rollback=false + +########################################################### +# MONGODB +########################################################### +profiler.mongo=true +profiler.mongo.collectjson=true +profiler.mongo.tracebsonbindvalue=true + +########################################################### +# Apache HTTP Client 3.x # +########################################################### +# Record Parameter. +profiler.apache.httpclient3.param=true + +# Record Cookies. +profiler.apache.httpclient3.cookie=false + +# When to dump cookies. Either ALWAYS or EXCEPTION. +profiler.apache.httpclient3.cookie.dumptype=EXCEPTION +# 1 out of n cookies will be sampled where n is the rate. (1: 100%) +profiler.apache.httpclient3.cookie.sampling.rate=1 +profiler.apache.httpclient.cookie.dumpsize=1024 + +# Dump entities of POST and PUT requests. Limited to entities where HttpEntity.isRepeatable() == true. +profiler.apache.httpclient3.entity=false + +# When to dump entities. Either ALWAYS or EXCEPTION. +profiler.apache.httpclient3.entity.dumptype=EXCEPTION +# 1 out of n entities will be sampled where n is the rate. (10: 10%) +profiler.apache.httpclient3.entity.sampling.rate=1 +profiler.apache.httpclient3.entity.dumpsize=1024 + +# Record IO time. +profiler.apache.httpclient3.io=true + +########################################################### +# Apache HTTP Client 4.x # +########################################################### +# Record Parameter. +profiler.apache.httpclient4.param=true + +# Record cookies. +profiler.apache.httpclient4.cookie=false + +# When cookies should be dumped. It could be ALWAYS or EXCEPTION. +profiler.apache.httpclient4.cookie.dumptype=EXCEPTION + +# 1 out of n cookies will be sampled where n is the rate. (1: 100%) +profiler.apache.httpclient4.cookie.sampling.rate=1 + +profiler.apache.httpclient4.cookie.dumpsize=1024 + +# Dump entities of POST and PUT requests. Limited to entities where HttpEntity.isRepeatable() == true. +profiler.apache.httpclient4.entity=false + +# When to dump entities. Either ALWAYS or EXCEPTION. +profiler.apache.httpclient4.entity.dumptype=EXCEPTION + +# 1 out of n entities will be sampled where n is the rate. (10: 10%) +profiler.apache.httpclient4.entity.sampling.rate=1 + +profiler.apache.httpclient4.entity.dumpsize=1024 + +# Allow profiling status code value. +profiler.apache.httpclient4.entity.statuscode=true + +# Record IO time. +profiler.apache.httpclient4.io=true + +# Not supported yet. +#profiler.apache.nio.httpclient4=true + +########################################################### +# JDK HTTPURLConnection # +########################################################### +# Profile parameter. +profiler.jdk.http=true +profiler.jdk.http.param=true + +########################################################### +# Ning Async HTTP Client # +########################################################### +# Profile Ning Async HTTP Client. +profiler.ning.asynchttpclient=true + +# Record parameters. (unsupported in 1.8.x, 1.9.x versions) +profiler.ning.asynchttpclient.param=true + +# Record cookies. +profiler.ning.asynchttpclient.cookie=true +# When to dump cookies. Either ALWAYS or EXCEPTION. +profiler.ning.asynchttpclient.cookie.dumptype=EXCEPTION +# Cookie dump size. +profiler.ning.asynchttpclient.cookie.dumpsize=1024 +# 1 out of n cookies will be sampled where n is the rate. (1: 100%) +profiler.ning.asynchttpclient.cookie.sampling.rate=1 + +# Record Entities. +profiler.ning.asynchttpclient.entity=false +# When to dump entities. Either ALWAYS or EXCEPTION. +profiler.ning.asynchttpclient.entity.dumptype=EXCEPTION +# Entity dump size. +profiler.ning.asynchttpclient.entity.dumpsize=1024 +# 1 out of n cookies will be sampled where n is the rate. (1: 100%) +profiler.ning.asynchttpclient.entity.sampling.rate=1 +# Record parameters. (unsupported in 1.8.x, 1.9.x versions) +profiler.ning.asynchttpclient.param=false +# When to dump parameters. Either ALWAYS or EXCEPTION. +profiler.ning.asynchttpclient.param.dumptype=EXCEPTION +# Parameter dump size. +profiler.ning.asynchttpclient.param.dumpsize=1024 +# 1 out of n parameters will be sampled where n is the rate. (1: 100%) +profiler.ning.asynchttpclient.param.sampling.rate=1 + + +########################################################### +# Arcus # +########################################################### +# Profile Arcus. +profiler.arcus=true +profiler.arcus.async=true +# Record keytrace. +profiler.arcus.keytrace=false + +########################################################### +# Memcached # +########################################################### +# Profile Memecached. +profiler.memcached=true +profiler.memcached.async=true +# Record keytrace +profiler.memcached.keytrace=false + +########################################################### +# Thrift # +########################################################### +# Profile Thrift +profiler.thrift.client=true +profiler.thrift.client.async=true +# Profile processor. +profiler.thrift.processor=true +profiler.thrift.processor.async=true +# Allow recording arguments. +profiler.thrift.service.args=false +# Allow recording result. +profiler.thrift.service.result=false + + +########################################################### +# ibatis # +########################################################### +# Profile ibatis. +profiler.orm.ibatis=true + +########################################################### +# mybatis # +########################################################### +# Profile mybatis +profiler.orm.mybatis=true + +########################################################### +# Spring Beans +########################################################### +# Profile spring-beans +profiler.spring.beans=true + +# Only public methods are tracked. +# filters +# filter +# filter OR filters +# filter +# value +# value AND filter +# value +# token +# token OR token +# token +# profiler.spring.beans.n.scope= [component-scan | post-processor] default is component-scan. +# profiler.spring.beans.n.base-packages= [package name, ...] +# profiler.spring.beans.n.name.pattern= [regex pattern, regex:regex pattern, antstyle:antstyle pattern, ...] +# profiler.spring.beans.n.class.pattern= [regex pattern, regex:regex pattern, antstyle:antstyle pattern, ...] +# profiler.spring.beans.n.annotation= [annotation name, ...] +# +# Scope: +# component-scan: or @ComponentScan +# post-processor: BeanPostProcessor - Slow!!! +# +# ANT Style pattern rules: +# ? - matches on character +# * - matches zero or more characters +# ** - matches zero or more 'directories' in a path + +# Examples +# profiler.spring.beans.1.scope=component-scan +# profiler.spring.beans.1.base-packages=com.foo, com.bar +# profiler.spring.beans.1.name.pattern=.*Foo, regex:.*Bar, antstyle:*Controller +# profiler.spring.beans.1.class.pattern= +# profiler.spring.beans.1.annotation=org.springframework.stereotype.Controller,org.springframework.stereotype.Service,org.springframework.stereotype.Repository +# +# profiler.spring.beans.2.scope=post-processor +# profiler.spring.beans.2.base-packages=com.foo +# profiler.spring.beans.2.name.pattern= +# profiler.spring.beans.2.class.pattern=antstyle:com.foo.repository.*Repository, antstyle:com.foo.Service.Main* +# profiler.spring.beans.2.annotation= + +profiler.spring.beans.1.scope=component-scan +profiler.spring.beans.1.base-packages= +profiler.spring.beans.1.name.pattern= +profiler.spring.beans.1.class.pattern= +profiler.spring.beans.1.annotation=org.springframework.stereotype.Controller,org.springframework.stereotype.Service,org.springframework.stereotype.Repository + +profiler.spring.beans.mark.error=false + +########################################################### +# spring @Async +########################################################### +profiler.spring.async.enable=true +# Add custom AsyncTaskExecutor classes. Comma separated list of fully qualified class names. Wildcard not supported. +# Default values +# org.springframework.scheduling.concurrent.ConcurrentTaskExecutor +# org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler +# org.springframework.core.task.SimpleAsyncTaskExecutor +# org.springframework.scheduling.quartz.SimpleThreadPoolTaskExecutor +# org.springframework.core.task.support.TaskExecutorAdapter +# org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor +# org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler +# org.springframework.jca.work.WorkManagerTaskExecutor +# org.springframework.scheduling.commonj.WorkManagerTaskExecutor +profiler.spring.async.executor.class.names= +# Add custom AsyncTask classes. Comma separated list of fully qualified class names. Wildcard not supported. +# Default values +# org.springframework.aop.interceptor.AsyncExecutionInterceptor$1 +# org.springframework.aop.interceptor.AsyncExecutionInterceptor$$Lambda$ +# ex. add org.springframework.http.client.SimpleBufferingAsyncClientHttpRequest$1 and +# org.springframework.http.client.SimpleBufferingAsyncClientHttpRequest$$Lambda$ +# to trace SimpleBufferingAsyncClientHttpRequest.executeAsync() +profiler.spring.async.task.class.names= + +########################################################### +# Spring WebFlux +########################################################### +profiler.spring.webflux.enable=true + +# Client +# If you are not using Reactor-Netty, set it to true. +profiler.spring.webflux.client.enable=false +# Record Parameter. +profiler.spring.webflux.client.param=true +# Record cookies. +profiler.spring.webflux.client.cookie=true +# When cookies should be dumped. It could be ALWAYS or EXCEPTION. +profiler.spring.webflux.client.cookie.dumptype=ALWAYS +# 1 out of n cookies will be sampled where n is the rate. (1: 100%) +profiler.spring.webflux.client.cookie.sampling.rate=1 +# Cookie dump size. +profiler.spring.webflux.client.cookie.dumpsize=1024 + +########################################################### +# Reactor +########################################################### +profiler.reactor.enable=true +# Set whether to trace the Subscriber.onError(Throwable t) method +profiler.reactor.trace.subscribe.error=true +# Set messages to be excluded from errors. Messages are separated by ',' characters. +profiler.reactor.trace.subscribe.error.exclude.message=404 NOT_FOUND, 100 Continue +# Set whether to trace the Scheduler.schedule(Runnable task), Scheduler.schedule(Runnable task, long delay, TimeUnit unit) +profiler.reactor.trace.schedule=true +# Set whether to trace the Scheduler.schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) +profiler.reactor.trace.schedule.periodically=false + +########################################################### +# log4j (guide url : https://github.com/naver/pinpoint/blob/master/doc/per-request_feature_guide.md) +########################################################### +profiler.log4j.logging.transactioninfo=false + +# replace logger pattern automatically +# %message, $msg or %m would be replace with "TxId:%X{PtxId} %msg" +# in the search config, put the longest/longer variable first. +# variables/aliases: https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html +#profiler.log4j.logging.pattern.replace.enable=false +#profiler.log4j.logging.pattern.replace.search=%m +#profiler.log4j.logging.pattern.replace.with="TxId:%X{PtxId} %m" + +########################################################### +# log4j2 (guide url : https://github.com/naver/pinpoint/blob/master/doc/per-request_feature_guide.md) +########################################################### +profiler.log4j2.logging.transactioninfo=false + +# replace logger pattern automatically +# %message, $msg or %m would be replace with "TxId:%X{PtxId} %msg" +# in the search config, put the longest/longer variable first. +# variables/aliases: https://logging.apache.org/log4j/2.x/manual/layouts.html under section "Patterns" +#profiler.log4j2.logging.pattern.replace.enable=false +#profiler.log4j2.logging.pattern.replace.search=%message,%msg,%m +#profiler.log4j2.logging.pattern.replace.with="TxId:%X{PtxId} %msg" + +########################################################### +# logback (guide url : https://github.com/naver/pinpoint/blob/master/doc/per-request_feature_guide.md) +########################################################### +profiler.logback.logging.transactioninfo=false + +# replace logger pattern automatically +# %message, $msg or %m would be replace with "TxId:%X{PtxId} %msg" +# in the search config, put the longest/longer variable first. +# variables/aliases: https://github.com/qos-ch/logback/blob/master/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java#L54-L149 +#profiler.logback.logging.pattern.replace.enable=false +#profiler.logback.logging.pattern.replace.search=%message,%msg,%m +#profiler.logback.logging.pattern.replace.with="TxId:%X{PtxId} %msg" + +########################################################### +# google httpclient +########################################################### +# Profile async. +profiler.google.httpclient.async=true + +########################################################### +# redis +########################################################### +# Jedis client +profiler.redis.jedis.enable=true +profiler.redis.jedis.pipeline=true +profiler.redis.jedis.io=true + +# Lettuce client +profiler.redis.lettuce.enable=true + +# Redisson client +profiler.redis.redisson.enable=true +profiler.redis.redisson.keytrace=true + +########################################################### +# OkHttp +########################################################### +profiler.okhttp.enable=true +# Record param. +profiler.okhttp.param=true + +# Record Cookies. +profiler.okhttp.cookie=false +# When to dump cookies. Either ALWAYS or EXCEPTION. +profiler.okhttp.cookie.dumptype=EXCEPTION +# 1 out of n cookies will be sampled where n is the rate. (1: 100%) +profiler.okhttp.cookie.sampling.rate=1 +profiler.okhttp.cookie.dumpsize=1024 +# enqueue operation +profiler.okhttp.async=true +profiler.okhttp.entity.statuscode=true + +########################################################### +# Apache CXF +# Version 2.6.2+ is supported. +# Note: logging.enable must use cxf logging +# see http://cxf.apache.org/docs/message-logging.html +########################################################### +profiler.cxf.service.enable=true +profiler.cxf.logging.enable=false + +########################################################### +# fastjson +########################################################### +profiler.json.fastjson=false + +########################################################### +# gson +########################################################### +profiler.json.gson=false + +########################################################### +# jackson +########################################################### +profiler.json.jackson=false + +########################################################### +# json-lib +########################################################### +profiler.json.jsonlib=false + +########################################################### +# ActiveMQ Client +########################################################### +profiler.activemq.client.enable=true +profiler.activemq.client.producer.enable=true +profiler.activemq.client.consumer.enable=true +profiler.activemq.client.trace.message=false + +# ActiveMQ destination path separator (default is ".") +profiler.activemq.client.destination.separator= + +# ActiveMQ destinations to exclude from tracing (comma seprated list of ant-matched destinations) +profiler.activemq.client.destination.exclude= + +########################################################### +# RxJava +########################################################### +profiler.rxjava=false + +########################################################### +# Hystrix +########################################################### +# profiler.rxjava must also be enabled to properly trace hystrix commands +profiler.hystrix=false + +########################################################### +# RestTemplate +########################################################### +profiler.resttemplate=false + +########################################################### +# Netty +########################################################### +# recommend netty plugin disable, when using VERTX. +profiler.netty=false +profiler.netty.http=false + +profiler.netty.http.param=false +# use channel.close() +profiler.netty.channel.close=true + +########################################################### +# RabbitMQ Client +########################################################### +profiler.rabbitmq.client.enable=true +profiler.rabbitmq.client.producer.enable=true +profiler.rabbitmq.client.consumer.enable=true +# Custom consumer classes to be traced (comma separated list of fully qualified class names) +# If a consumer class is an inner class, specify the outer class +profiler.rabbitmq.client.consumer.classes= +# RabbitMQ exchange to exclude from tracing (comma seprated list of ant-matched destinations) +profiler.rabbitmq.client.exchange.exclude= + +########################################################### +# Akka HTTP (Reliability and stability can not be guaranteed) +########################################################### +# HTTP server +profiler.akka.http.enable=false +# original IP address header +profiler.akka.http.realipheader=Remote-Address +# URLs to exclude from tracing +profiler.akka.http.excludeurl= +# HTTP Request methods to exclude from tracing +profiler.akka.http.excludemethod= +# Set transform target +# If you are using another directive, change below config +profiler.akka.http.transform.targetname=akka.http.scaladsl.server.directives.BasicDirectives.$anonfun$mapRequestContext$2 +profiler.akka.http.transform.targetparameter=scala.Function1,scala.Function1,akka.http.scaladsl.server.RequestContext + +########################################################### +# Kafka (Reliability and stability can not be guaranteed) +# Version 0.11+ is supported. +# Please read `readme.md` in Kafka Plugin, before use Kafka Plugin (https://github.com/naver/pinpoint/tree/master/plugins/kafka/README.md) +########################################################### +profiler.kafka.producer.enable=false +profiler.kafka.consumer.enable=false +# Setting when using spring-kafka (In this case, you can leave profiler.kafka.consumer.entryPoint option to empty.) +profiler.springkafka.consumer.enable=false +# you must set target that handles ConsumerRecord or ConsumerRecords(Remote Trace feature is not enabled.) as a argument for remote trace +# ex) profiler.kafka.consumer.entryPoint=clazzName.methodName +profiler.kafka.consumer.entryPoint= +# you should disable kafka header(set the following config to false) if your kafka broker version is 0.11+ but the log.message.format.version is overridden by a lower version than 0.11 (e.g. 0.10) which can not be automatically detected. +#profiler.kafka.header.enable=true +# you should set profiler.kafka.header.record as false below if you don't want to collect kafka header values. +#profiler.kafka.header.record=true + +########################################################### +# Hbase (Reliability and stability can not be guaranteed) +########################################################### +profiler.hbase.client.enable=true +profiler.hbase.client.admin.enable=false +profiler.hbase.client.table.enable=false +profiler.hbase.client.params.enable=false + +########################################################### +# GRPC (Reliability and stability can not be guaranteed) +# Version 1.6.0+ is supported. +########################################################### +profiler.grpc.client.enable=false +profiler.grpc.server.enable=false +# In case of streaming, does not track all of each stream request. +# After the streaming open in client, all of each stream request are tracked in one remote trace. +# Therefore, tracking stream request that you want can be difficult. +# please be sure that this description. +profiler.grpc.server.streaming.enable=false +profiler.grpc.server.streaming.onmessage.enable=false + +########################################################### +# Openwhisk (Reliability and stability can not be guaranteed) +# Note: To use Openwhisk plugin, please enable Akka HTTP Plugin and +# change transform target config as follows +# - profiler.akka.http.transform.targetname=akka.http.scaladsl.server.directives.ExecutionDirectives.$anonfun$handleExceptions$2 +# - profiler.akka.http.transform.targetparameter=akka.http.scaladsl.server.ExceptionHandler,scala.Function1,akka.http.scaladsl.server.RequestContext +########################################################### +profiler.openwhisk.enable=false +profiler.openwhisk.logging.message=false +profiler.openwhisk.transform.targetname=org.apache.openwhisk.http.BasicHttpService.$anonfun$assignId$2 +profiler.openwhisk.transform.targetparameter=org.apache.openwhisk.http.BasicHttpService,boolean,akka.http.scaladsl.server.RequestContext + +########################################################### +# Elasticsearch +########################################################### +profiler.elasticsearch.enabled=true +profiler.elasticsearch.recordDsl=true +profiler.elasticsearch.recordESVersion=false + +########################################################### +# ElasticsearchBBoss +########################################################### +profiler.elasticsearchbboss.enabled=true +profiler.elasticsearchbboss.recordResult=false +profiler.elasticsearchbboss.recordArgs=true +profiler.elasticsearchbboss.recordDsl=true +profiler.elasticsearchbboss.recordESVersion=true +profiler.elasticsearchbboss.recordResponseHandlerClass=false +profiler.elasticsearchbboss.maxDslSize=50000 + +########################################################### +# JDK CompletableFuture +########################################################### +profiler.jdk.concurrent.completable-future=true + +########################################################### +# Thread +########################################################### +# which package of runnable(callable) instance can be thread plugin trace +# Set the package name to track +# eg) profiler.thread.match.package=com.company.shopping.cart, com.company.payment +profiler.thread.match.package= +# Support class : Runnable,Callable,Supplier +# - Runnable : java.lang.Runnable +# - Callable : java.util.concurrent.Callable +# - Supplier : java.util.function.Supplier +profiler.thread.support-class=Runnable,Callable + +########################################################### +# Process Fork Tracing Plugin +########################################################### +profiler.process.tracing.enabled=true + +########################################################### +# Paho MQTT +# Please read `readme.md` in Paho MQTT Plugin, before use Paho MQTT Plugin (https://github.com/naver/pinpoint/tree/master/plugins/paho-mqtt/README.md) +########################################################### +profiler.paho.mqtt.client.enable=true +profiler.paho.mqtt.client.v3.enable=true +profiler.paho.mqtt.client.v5.enable=true +profiler.paho.mqtt.client.publisher.enable=true +profiler.paho.mqtt.client.subscriber.enable=true + +########################################################### +# RocketMQ (Reliability and stability can not be guaranteed) +# Version 4.x is supported. +########################################################### +profiler.rocketmq.producer.enable=false +profiler.rocketmq.consumer.enable=false +# Comma separated list of package names +# eg) profiler.rocketmq.basePackage=com.company +# eg) profiler.rocketmq.basePackage=com.company.shopping.cart, com.company.payment +profiler.rocketmq.basePackage= + +########################################################### +# Kotlin Corutines +# v1.0.1 ~ +########################################################### +profiler.kotlin.coroutines.enable=false + +#Trace the name of the thread. +#This is important information to check whether the developer's intention and the behavior of the coroutine match. +#Recommend that you use it in the development environment and not in the production environment. +profiler.kotlin.coroutines.record.threadName=false + +#Track cancellations and the propagation of cancellations. +#This is important information to check whether the developer's intention and the behavior of the coroutine match. +#Recommend that you use it in the development environment and not in the production environment. +profiler.kotlin.coroutines.record.cancel=false diff --git a/testapps/java_call_app/conf/quickstart.properties b/testapps/java_call_app/conf/quickstart.properties new file mode 100644 index 000000000..2e7388706 --- /dev/null +++ b/testapps/java_call_app/conf/quickstart.properties @@ -0,0 +1,17 @@ + +# quickstart properties +#quickstart.version=1.6.0-SNAPSHOT +quickstart.version=2.0.0-RC2 + +# quickstart-web properties +quickstart.web.context.path=/ +quickstart.web.port=28080 + +# quickstart-javacallapp properties +quickstart.javacallapp.context.path=/ +quickstart.javacallapp.port=28083 + +# quickstart-collector properties +quickstart.collector.context.path=/ +quickstart.collector.port=28082w + diff --git a/testapps/java_call_app/javacallapp.xml b/testapps/java_call_app/javacallapp.xml new file mode 100644 index 000000000..41f3bb168 --- /dev/null +++ b/testapps/java_call_app/javacallapp.xml @@ -0,0 +1 @@ + diff --git a/testapps/java_call_app/pom.xml b/testapps/java_call_app/pom.xml new file mode 100644 index 000000000..601de1790 --- /dev/null +++ b/testapps/java_call_app/pom.xml @@ -0,0 +1,205 @@ + + 4.0.0 + pinpoint_c_agent + javacallapp + war + 1.0-SNAPSHOT + javacallapp Maven Webapp + http://maven.apache.org + + + UTF-8 + 1.6 + 4.1.7.RELEASE + 1.7.5 + 7.0.47 + + + + + + org.springframework + spring-context + ${spring.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${spring.version} + + + + + org.apache.tomcat + tomcat-servlet-api + ${tomcat.version} + provided + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + runtime + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + runtime + + + log4j + log4j + 1.2.17 + runtime + + + + + org.apache.tomcat + tomcat-servlet-api + ${tomcat.version} + provided + + + + + javax.servlet.jsp + jsp-api + 2.1 + provided + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + + + javax.servlet + servlet-api + + + + + org.glassfish.web + jstl-impl + 1.2 + + + javax.servlet + servlet-api + + + + + taglibs + standard + 1.1.2 + + + + + org.apache.httpcomponents + httpclient + 4.3.6 + + + org.apache.httpcomponents + httpcore + 4.3.3 + + + + junit + junit + 3.8.1 + test + + + commons-io + commons-io + 2.4 + + + + javacallapp + + + ${basedir}/src/main/java + + **/*.java + + + + true + ${basedir}/src/main/resources + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.0 + + ${jdk.version} + ${jdk.version} + true + true + ${encoding} + true + + + + org.apache.maven.plugins + maven-war-plugin + 2.4 + + ${basedir}/target/deploy + + + + org.codehaus.mojo + properties-maven-plugin + 1.0-alpha-2 + + + initialize + + read-project-properties + + + + ${basedir}/conf/quickstart.properties + + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + ${quickstart.javacallapp.context.path} + ${quickstart.javacallapp.port} + utf-8 + ${basedir}/target/deploy + + + + + diff --git a/testapps/java_call_app/readme.md b/testapps/java_call_app/readme.md new file mode 100644 index 000000000..b2e3b1aeb --- /dev/null +++ b/testapps/java_call_app/readme.md @@ -0,0 +1,3 @@ +## Usage + +http://localhost:8085/javacallapp \ No newline at end of file diff --git a/testapps/java_call_app/spring.dockerfile b/testapps/java_call_app/spring.dockerfile new file mode 100644 index 000000000..20fc8fb62 --- /dev/null +++ b/testapps/java_call_app/spring.dockerfile @@ -0,0 +1,19 @@ +FROM maven:3.8.6-jdk-8 as build +WORKDIR /workspace +COPY testapps/java_call_app /workspace + +RUN mvn package + +FROM tomcat:9 +COPY --from=build /workspace/target/javacallapp.war /usr/local/tomcat/webapps/ +WORKDIR /workspace +ENV AGENT_VERSION=2.5.4 +RUN wget https://github.com/pinpoint-apm/pinpoint/releases/download/v${AGENT_VERSION}/pinpoint-agent-${AGENT_VERSION}.tar.gz && tar xvf pinpoint-agent-${AGENT_VERSION}.tar.gz +COPY testapps/java_call_app/conf/pinpoint.config /workspace/pinpoint-agent-${AGENT_VERSION}/profiles/release/pinpoint.config +COPY testapps/java_call_app/javacallapp.xml /usr/local/tomcat/conf/Catalina/localhost/ +ENV CATALINA_OPTS="-javaagent:/workspace/pinpoint-agent-${AGENT_VERSION}/pinpoint-bootstrap-${AGENT_VERSION}.jar -Dpinpoint.agentId=test-callapp3 -Dpinpoint.applicationName=cd.dev.java" + +ENV MAVEN_OPTS="${MAVEN_OPTS} ${CATALINA_OPTS}" + + + diff --git a/testapps/java_call_app/src/main/java/com/navercorp/pinpoint/javacallapp/ApisController.java b/testapps/java_call_app/src/main/java/com/navercorp/pinpoint/javacallapp/ApisController.java new file mode 100644 index 000000000..5ebd583db --- /dev/null +++ b/testapps/java_call_app/src/main/java/com/navercorp/pinpoint/javacallapp/ApisController.java @@ -0,0 +1,60 @@ +package com.navercorp.pinpoint.javacallapp; + +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.apache.commons.io.IOUtils; + + +/** + * Created by chenguoxi on 8/24/17. + */ +@Controller +public class ApisController { + @RequestMapping(value = { "/index.html", "/apis" }, method = RequestMethod.GET) + public String apis(Model model) { + return "apis"; + } + + @RequestMapping(value = {"/call" }, method = RequestMethod.GET) + @ResponseBody + public String calls(@RequestParam("address") String address) { + String callString = "call: address=" + address; + + CloseableHttpClient httpclient = HttpClients.createDefault(); + + HttpGet httpGet = new HttpGet(address); + try { + CloseableHttpResponse response1 = httpclient.execute(httpGet); + + try { + return IOUtils.toString(response1.getEntity().getContent()); + } finally { + try { + response1.close(); + } catch (Exception e) { + callString = callString + "; exception=" + e.toString(); + } + } + + } catch (Exception e) { + callString = callString + "; exception=" + e.toString(); + } finally { + try { + httpclient.close(); + } catch (Exception e) { + callString = callString + "; exception=" + e.toString(); + } + } + + return callString; + + } +} diff --git a/testapps/java_call_app/src/main/resources/applicationContext-javacallapp.xml b/testapps/java_call_app/src/main/resources/applicationContext-javacallapp.xml new file mode 100644 index 000000000..d1f603fa9 --- /dev/null +++ b/testapps/java_call_app/src/main/resources/applicationContext-javacallapp.xml @@ -0,0 +1,19 @@ + + + + \ No newline at end of file diff --git a/testapps/java_call_app/src/main/resources/log4j.xml b/testapps/java_call_app/src/main/resources/log4j.xml new file mode 100644 index 000000000..690b1ed39 --- /dev/null +++ b/testapps/java_call_app/src/main/resources/log4j.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testapps/java_call_app/src/main/resources/servlet-context.xml b/testapps/java_call_app/src/main/resources/servlet-context.xml new file mode 100644 index 000000000..48af92f84 --- /dev/null +++ b/testapps/java_call_app/src/main/resources/servlet-context.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + apisController + + + + + + + + + + \ No newline at end of file diff --git a/testapps/java_call_app/src/main/webapp/WEB-INF/views/apis.jsp b/testapps/java_call_app/src/main/webapp/WEB-INF/views/apis.jsp new file mode 100644 index 000000000..0a8222059 --- /dev/null +++ b/testapps/java_call_app/src/main/webapp/WEB-INF/views/apis.jsp @@ -0,0 +1,19 @@ +<%-- + Created by IntelliJ IDEA. + User: chenguoxi + Date: 8/24/17 + Time: 11:21 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + JavaCallApp + + +

Call remote server

+
+ Remote Address: +
+ + diff --git a/testapps/java_call_app/src/main/webapp/WEB-INF/web.xml b/testapps/java_call_app/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..551898ce4 --- /dev/null +++ b/testapps/java_call_app/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,70 @@ + + + + + + contextConfigLocation + classpath:applicationContext-javacallapp.xml + + + + + org.springframework.web.context.ContextLoaderListener + + + + + pinpoint-javacallapp + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + classpath:servlet-context.xml + + 1 + + + + + pinpoint-javacallapp + /index.html + + + pinpoint-javacallapp + *.pinpoint + + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + + + encodingFilter + /* + + + + index.html + + + + default + *.css + *.js + *.gif + *.png + *.ico + *.swf + *.html + + + diff --git a/testapps/java_call_app/src/main/webapp/index.jsp b/testapps/java_call_app/src/main/webapp/index.jsp new file mode 100644 index 000000000..c38169bb9 --- /dev/null +++ b/testapps/java_call_app/src/main/webapp/index.jsp @@ -0,0 +1,5 @@ + + +

Hello World!

+ + diff --git a/testapps/java_call_app/start-calltestapp.sh b/testapps/java_call_app/start-calltestapp.sh new file mode 100644 index 000000000..1095b0b5b --- /dev/null +++ b/testapps/java_call_app/start-calltestapp.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +PINPOINT_DIR="/workspace" +pinpoint_agent="${PINPOINT_DIR}/pinpoint-agent-2.4.2/pinpoint-bootstrap-2.4.2.jar" +pinpoint_opt="-javaagent:$pinpoint_agent -Dpinpoint.agentId=test-callapp3 -Dpinpoint.applicationName=cd.dev.java" +maven_opt=$MAVEN_OPTS +export MAVEN_OPTS="${MAVEN_OPTS} ${pinpoint_opt}" +#mvn -f ./pom.xml clean package tomcat7:run > call.log 2>&1 +MAVEN_OPTS=$maven_opt +mvn -f ./pom.xml clean package tomcat7:run + diff --git a/testapps/php_compatible.dockerfile b/testapps/php_compatible.dockerfile new file mode 100644 index 000000000..75db44e51 --- /dev/null +++ b/testapps/php_compatible.dockerfile @@ -0,0 +1,17 @@ +ARG PHP_VERSION=7.4 +FROM php:${PHP_VERSION} +WORKDIR /pinpoint-c-agent/ +RUN apt update && apt install -y valgrind git +COPY config.m4 /pinpoint-c-agent/config.m4 +COPY src/PHP /pinpoint-c-agent/src/PHP +COPY common /pinpoint-c-agent/common +COPY tests /pinpoint-c-agent/tests +ENV NO_INTERACTION=1 +RUN cd /pinpoint-c-agent/ && phpize && ./configure && make && make install +## install redis +RUN cd /tmp/ && git clone https://github.com/phpredis/phpredis.git && cd phpredis && phpize && ./configure && make install +RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql + +COPY testapps/shell.sh shell.sh +RUN chmod +x shell.sh +CMD ["sh", "shell.sh"] \ No newline at end of file diff --git a/testapps/php_compatible_older.dockerfile b/testapps/php_compatible_older.dockerfile new file mode 100644 index 000000000..c24e70aa1 --- /dev/null +++ b/testapps/php_compatible_older.dockerfile @@ -0,0 +1,40 @@ +ARG PHP_VERSION=7.4 +FROM php:${PHP_VERSION} +WORKDIR /pinpoint-c-agent/ +RUN apt update && apt install -y valgrind git +COPY config.m4 /pinpoint-c-agent/config.m4 +COPY src/PHP /pinpoint-c-agent/src/PHP +COPY common /pinpoint-c-agent/common +COPY tests /pinpoint-c-agent/tests +ENV NO_INTERACTION=1 +RUN cd /pinpoint-c-agent/ && phpize && ./configure && make && make install +## install redis +RUN cd /tmp/ && git clone https://github.com/phpredis/phpredis.git && cd phpredis && phpize && ./configure && make install +RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql + +COPY testapps/shell.sh shell.sh +RUN chmod +x shell.sh +CMD ["sh", "shell.sh"] + + + +ARG PHP_VERSION=7.1.33 +FROM gcc:10 +WORKDIR /pinpoint-c-agent/ +RUN apt update && apt install -y valgrind git +RUN wget https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz && tar xvf php-${PHP_VERSION}.tar.gz +RUN cd php-${PHP_VERSION} && ./configure --build=x86_64-linux-gnu --with-config-file-path=/usr/local/etc/php --with-config-file-scan-dir=/usr/local/etc/php/conf.d --enable-option-checking=fatal --with-mhash --enable-ftp --enable-mbstring --enable-mysqlnd --with-pdo-sqlite=/usr --with-sqlite3=/usr --with-curl --with-openssl --with-zlib --with-libdir=lib/x86_64-linux-gnu build_alias=x86_64-linux-gnu && make -j && make install + +COPY config.m4 /pinpoint-c-agent/config.m4 +COPY src/PHP /pinpoint-c-agent/src/PHP +COPY common /pinpoint-c-agent/common +COPY tests /pinpoint-c-agent/tests +ENV NO_INTERACTION=1 +RUN cd /pinpoint-c-agent/ && phpize && ./configure && make && make install +## install redis +RUN cd /tmp/ && git clone https://github.com/phpredis/phpredis.git && cd phpredis && phpize && ./configure && make install +RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql + +COPY testapps/shell.sh shell.sh +RUN chmod +x shell.sh +CMD ["sh", "shell.sh"] \ No newline at end of file diff --git a/testapps/php_phpmyadmin/index.php b/testapps/php_phpmyadmin/index.php new file mode 100644 index 000000000..4aa43f67d --- /dev/null +++ b/testapps/php_phpmyadmin/index.php @@ -0,0 +1,61 @@ +PHP 7.2.5+ is required.

Currently installed version is: ' . PHP_VERSION . '

'); +} + +// phpcs:disable PSR1.Files.SideEffects +define('PHPMYADMIN', true); +// phpcs:enable + +require_once ROOT_PATH . 'libraries/constants.php'; + +/** + * Activate autoloader + */ +if (!@is_readable(AUTOLOAD_FILE)) { + die('

File ' . AUTOLOAD_FILE . ' missing or not readable.

' + . '

Most likely you did not run Composer to ' + . '' + . 'install library files.

'); +} + +require AUTOLOAD_FILE; + +class MyAdminRequestPlugin extends Pinpoint\Plugins\DefaultRequestPlugin +{ + public function __construct() + { + $blackUri = ['/favicon.ico']; + // if uri in blackUri, skips it + if (!in_array($_SERVER['REQUEST_URI'], $blackUri)) { + parent::__construct(); + } + } + public function __destruct() + { + // do nothing + } +} +define('APPLICATION_NAME', 'cd.dev.test.php'); // your application name +define('APPLICATION_ID', 'cd.dev.phpmyadmin'); // your application id +define('PP_REQ_PLUGINS', MyAdminRequestPlugin::class); +require_once __DIR__ . '/vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php'; + +global $route, $containerBuilder, $request; + +Common::run(); + +$dispatcher = Routing::getDispatcher(); +Routing::callControllerForRoute($request, $route, $dispatcher, $containerBuilder); diff --git a/testapps/php_phpmyadmin/phpmyadmin.dockerfile b/testapps/php_phpmyadmin/phpmyadmin.dockerfile new file mode 100644 index 000000000..ad838f48a --- /dev/null +++ b/testapps/php_phpmyadmin/phpmyadmin.dockerfile @@ -0,0 +1,22 @@ +FROM phpmyadmin:apache + +RUN apt update && apt-get install -y \ + libzip-dev \ + zip \ + git \ + && docker-php-ext-install zip + +# COPY config.m4 /pinpoint-c-agent/config.m4 +# COPY src/PHP /pinpoint-c-agent/src/PHP +# COPY common /pinpoint-c-agent/common +# COPY testapps/php_wordpress/pinpoint_php.ini /pinpoint-c-agent/pinpoint_php.ini + +# RUN cd /pinpoint-c-agent/ && phpize && ./configure && make install +# RUN INI_DIR=`php-config --ini-dir` && cp /pinpoint-c-agent/pinpoint_php.ini $INI_DIR + +RUN curl -sL https://github.com/eeliu/pinpoint-c-agent/releases/download/v0.1.11/install_pinpoint_php.sh | sh + +COPY testapps/php_phpmyadmin/index.php /var/www/html/index.php +## install composer +COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer +RUN cd /var/www/html/ && composer require -w pinpoint-apm/pinpoint-php-aop:v3.0.1 \ No newline at end of file diff --git a/testapps/php_wordpress/php-wordpress.dockerfile b/testapps/php_wordpress/php-wordpress.dockerfile new file mode 100644 index 000000000..b89b8ce86 --- /dev/null +++ b/testapps/php_wordpress/php-wordpress.dockerfile @@ -0,0 +1,21 @@ +FROM wordpress:beta-php8.1-apache + +# COPY config.m4 /pinpoint-c-agent/config.m4 +# COPY src/PHP /pinpoint-c-agent/src/PHP +# COPY common /pinpoint-c-agent/common +# COPY testapps/php_wordpress/pinpoint_php.ini /pinpoint-c-agent/pinpoint_php.ini + +# RUN cd /pinpoint-c-agent/ && phpize && ./configure && make install +# RUN INI_DIR=`php-config --ini-dir` && cp /pinpoint-c-agent/pinpoint_php.ini $INI_DIR + +# COPY install_pinpoint_php.sh /tmp/ +# RUN sh /tmp/install_pinpoint_php.sh + +RUN curl -sL https://github.com/eeliu/pinpoint-c-agent/releases/download/v0.1.11/install_pinpoint_php.sh | sh + +COPY testapps/php_wordpress/wp-config.php /usr/src/wordpress/wp-config.php +# install composer +RUN curl -s https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer +USER www-data +RUN cd /var/www/html/ && composer require -w pinpoint-apm/pinpoint-php-aop:v3.0.1 +USER root \ No newline at end of file diff --git a/testapps/php_wordpress/pinpoint_php.ini b/testapps/php_wordpress/pinpoint_php.ini new file mode 100644 index 000000000..a6cf0bd91 --- /dev/null +++ b/testapps/php_wordpress/pinpoint_php.ini @@ -0,0 +1,12 @@ +[pinpoint_php] +extension=pinpoint_php.so +# Collector-agent's TCP address, ip,port:Collector-Agent's ip,port +pinpoint_php.CollectorHost=tcp:dev-collector:10000 +# 0 is recommanded +pinpoint_php.SendSpanTimeOutMs=0 +# request should be captured duing 1 second. < 0 means no limited +pinpoint_php.TraceLimit=-1 +# DEBUG the agent +#error_reporting = E_ALL +#log_errors = On +pinpoint_php.DebugReport=true \ No newline at end of file diff --git a/testapps/php_wordpress/wp-config.php b/testapps/php_wordpress/wp-config.php new file mode 100644 index 000000000..297d7bb2b --- /dev/null +++ b/testapps/php_wordpress/wp-config.php @@ -0,0 +1,117 @@ +{'); +define('LOGGED_IN_SALT', '`-]j:urqjQ)qhEfVrTsazT2KA}P|648 /etc/timezone -RUN DEBIAN_FRONTEND="noninteractive" apt update && apt-get install -y build-essential git php7.4 php7.4-dev php7.4-curl php7.4-mysql +RUN DEBIAN_FRONTEND="noninteractive" apt update && apt-get install -y build-essential git php7.4 php7.4-dev php7.4-curl php7.4-mysql libmemcached-dev zlib1g-dev libssl-dev pkg-config COPY testapps/SimplePHP/php.ini /etc/php/7.4/cli/php.ini -COPY testapps/SimplePHP /workspace +COPY testapps/SimplePHP/src /workspace/src +COPY testapps/SimplePHP/composer-real.json /workspace/composer.json +COPY testapps/SimplePHP/run.php /workspace/run.php RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN git clone --recurse-submodules --depth 1 --branch 1.18.1 https://github.com/mongodb/mongo-php-driver.git && cd mongo-php-driver && phpize && ./configure && make -j && make install -RUN COMPOSER_ALLOW_SUPERUSER=1 composer update - +RUN cd /tmp/ && git clone https://github.com/phpredis/phpredis.git && cd phpredis && phpize && ./configure && make install +RUN cd /tmp/ && git clone https://github.com/php-memcached-dev/php-memcached.git && cd php-memcached && phpize && ./configure && make install COPY config.m4 /pinpoint-c-agent/config.m4 COPY src/PHP /pinpoint-c-agent/src/PHP COPY common /pinpoint-c-agent/common @@ -17,4 +19,6 @@ COPY tests /pinpoint-c-agent/tests RUN cd /pinpoint-c-agent/ && phpize && ./configure && make && make install +RUN COMPOSER_ALLOW_SUPERUSER=1 composer update + CMD [ "php" ,"/workspace/run.php" ] diff --git a/tests/add_root_trace.phpt b/tests/add_root_trace.phpt index cb9894d37..6dfd26453 100644 --- a/tests/add_root_trace.phpt +++ b/tests/add_root_trace.phpt @@ -9,17 +9,17 @@ pinpoint_php.UnitTest=true pinpoint_php.DebugReport=true --FILE-- + --INI-- - +pinpoint_php.DebugReport=false --FILE-- --INI-- @@ -11,11 +11,11 @@ pinpoint_php._limit=yes pinpoint_php.DebugReport=true --FILE-- +--INI-- +pinpoint_php.DebugReport=true +--FILE-- + +--INI-- +pinpoint_php.DebugReport=true +--FILE-- +abc); + var_dump($f->abc_s); + echo " update foo members \n"; + $f->abc = 1234; + $f->abc_s= "hello pinpoint"; + } + }; + + $onBefore(); + } + public $abc = 123; + public $abc_s = "123"; +} + +$f = new Foo(); +$f->output(); +var_dump($f->abc); +var_dump($f->abc_s); +var_dump(pinpoint_get_this()); + +echo "test static method \n"; +class S_Foo +{ + public static $my_static = 'foo'; + + public static function staticValue() { + $f = pinpoint_get_this(); + var_dump($f); + return self::$my_static; + } +} + +$sf = new S_Foo(); +S_Foo::staticValue(); + +--EXPECTF-- +int(123) +string(3) "123" + update foo members +int(1234) +string(14) "hello pinpoint" +[pinpoint] [%d] [%d]pinpoint_get_this: not support, no this +bool(false) +test static method +[pinpoint] [%d] [%d]pinpoint_get_this: not support, no this +bool(false) \ No newline at end of file diff --git a/tests/pinpoint_join_cut_curl_7.phpt b/tests/pinpoint_join_cut_curl_7.phpt new file mode 100644 index 000000000..d13e7d061 --- /dev/null +++ b/tests/pinpoint_join_cut_curl_7.phpt @@ -0,0 +1,230 @@ +--TEST-- +pinpoint_php pinpoint_join_cut_cut +--SKIPIF-- +=')) +{ print "skip"; + print "only works in php7"; +} +?> +--INI-- +pinpoint_php.DebugReport=true + +--EXTENSIONS-- +json + +--FILE-- + +--INI-- +pinpoint_php.DebugReport=true + +--EXTENSIONS-- +json + +--FILE-- +=')){ + print "skip"; + print phpversion() . ">= 8.2.0"; +} + + +?> +--INI-- +pinpoint_php.DebugReport=true +--EXTENSIONS-- +pdo_mysql +--FILE-- +dsn = $dsn; + echo "attached dsn \n"; + } + }, + function ($ret) { + echo "on_end \n"; + }, + function ($e) { + echo "on_exception \n"; + } +); + +$pdo_exec = "PDO::exec"; +_pinpoint_join_cut( + ["PDO", "exec"], + function ($statement) use ($pdo_exec) { + echo "$pdo_exec: on_before: $statement \n"; + }, + function ($ret) use ($pdo_exec) { + echo "$pdo_exec : on_end \n"; + }, + function ($e) use ($pdo_exec) { + echo "on_exception \n"; + } +); + +class MyPDO extends PDO +{ + +} +$dbname = "employees"; +$pdo = new MyPDO("mysql:host=dev-mysql;dbname=$dbname", 'root', 'password'); +$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); +$pdo->abc = "123"; +$sql = "CREATE table IF NOT EXISTS pdo_test( + ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY, + Name VARCHAR( 250 ) NOT NULL, + AGE tinyint(1) unsigned NOT NULL default '1' );"; +$ret = $pdo->exec($sql); +if ($ret === false) { + echo "create pdo_test failed" . $pdo->errorCode(); +} + +$sql = "INSERT INTO pdo_test (NAME, AGE) +VALUES ('a',1),('b',1),('c',3),('d',1);"; +$ret = $pdo->exec($sql); +var_dump($ret); + +$unbufferedResult = $pdo->query("SELECT * FROM pdo_test"); +foreach ($unbufferedResult as $row) { + var_dump($unbufferedResult); +} + +$sth = $pdo->prepare('SELECT name FROM pdo_test + WHERE AGE = :AGE limit 3'); +/* Names can be prefixed with colons ":" too (optional) */ +$sth->bindValue(':AGE', 1); +$ret = $sth->execute(); +var_dump($ret); +$ret = $sth->fetch(); +var_dump($ret); +$ret = $sth->fetchAll(); +var_dump($ret); +var_dump($pdo->abc); +var_dump($pdo->dsn); +$sql = 'DROP TABLE pdo_test'; +$ret = $pdo->exec($sql); + + +--EXPECTF-- +[pinpoint] [%d] [%d]try to interceptor module(class)/function=pdo:__construct +[pinpoint] [%d] [%d]added interceptor on `module`: pdo::__construct success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=pdo:exec +[pinpoint] [%d] [%d]added interceptor on `module`: pdo::exec success +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::__construct +on_before: mysql:host=dev-mysql;dbname=employees +attached dsn +[pinpoint] [%d] [%d] call_interceptor_before:pdo::__construct return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::__construct +int(4) +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +bool(true) +array(2) { + ["name"]=> + string(1) "a" + [0]=> + string(1) "a" +} +array(2) { + [0]=> + array(2) { + ["name"]=> + string(1) "b" + [0]=> + string(1) "b" + } + [1]=> + array(2) { + ["name"]=> + string(1) "d" + [0]=> + string(1) "d" + } +} +string(3) "123" +string(37) "mysql:host=dev-mysql;dbname=employees" +[pinpoint] [%d] [%d]start free interceptor: pdo::__construct +[pinpoint] [%d] [%d]start free interceptor: pdo::exec \ No newline at end of file diff --git a/tests/pinpoint_join_cut_mysqli.phpt b/tests/pinpoint_join_cut_mysqli.phpt new file mode 100644 index 000000000..46338e284 --- /dev/null +++ b/tests/pinpoint_join_cut_mysqli.phpt @@ -0,0 +1,87 @@ +--TEST-- +pinpoint_php pinpoint_join_cut_redis +--SKIPIF-- + +--INI-- +pinpoint_php.DebugReport=true +--EXTENSIONS-- +mysqli +--FILE-- + +host_info; + } + echo "$db_host \n"; +}; + +$on_before_func = function (...$args) { + $mysqli = $args[0]; + $db_host = "localhost"; + if ($mysqli instanceof mysqli) { + $db_host = $mysqli->host_info; + } + echo "$db_host \n"; +}; + +$on_end = function ($ret) { + +}; + +$on_exception = function ($exp) { +}; + + +_pinpoint_join_cut(['mysqli_query'], $on_before_func, $on_end, $on_exception); +_pinpoint_join_cut(['mysqli', 'query'], $on_before, $on_end, $on_exception); + + + +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); +$mysqli = new mysqli(); + +$mysqli->connect('dev-mysql', "root", "password", "employees", 3306); + +$result = $mysqli->query("SELECT * FROM `dept_emp_latest_date` LIMIT 1000;"); +printf("Select returned %d rows.\n", $result->num_rows); + +$stmt = $mysqli->prepare("SELECT * FROM employees WHERE emp_no=?"); +$id = 10005; +$stmt->bind_param("i", $id); +$stmt->execute(); +$stmt->fetch(); +$stmt->free_result(); +mysqli_query($mysqli, "SELECT * FROM `dept_emp_latest_date` LIMIT 1000;"); + +$s_stmt = mysqli_prepare($mysqli, "SELECT * FROM employees WHERE emp_no=?"); +mysqli_stmt_bind_param($s_stmt, "i", $id); +mysqli_stmt_execute($stmt); + + + + +--EXPECTF-- +[pinpoint] [%d] [%d]try to interceptor function=mysqli_query +[pinpoint] [%d] [%d]added interceptor on `function`: mysqli_query success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=mysqli:query +[pinpoint] [%d] [%d]added interceptor on `module`: mysqli::query success +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:mysqli::query +dev-mysql via TCP/IP +[pinpoint] [%d] [%d] call_interceptor_before:mysqli::query return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +[pinpoint] [%d] [%d]call_interceptor_end: mysqli::query +Select returned 1000 rows. +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:mysqli_query +dev-mysql via TCP/IP +[pinpoint] [%d] [%d] call_interceptor_before:mysqli_query return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +[pinpoint] [%d] [%d]call_interceptor_end: mysqli_query +[pinpoint] [%d] [%d]start free interceptor: mysqli_query +[pinpoint] [%d] [%d]start free interceptor: mysqli::query \ No newline at end of file diff --git a/tests/pinpoint_join_cut_pdo.phpt b/tests/pinpoint_join_cut_pdo.phpt new file mode 100644 index 000000000..b6eb49f42 --- /dev/null +++ b/tests/pinpoint_join_cut_pdo.phpt @@ -0,0 +1,174 @@ +--TEST-- +pinpoint_php pinpoint_join_cut_pdo +--SKIPIF-- +=')){ + print "skip"; + print phpversion() . ">= 8.2.0"; +} + + +?> +--INI-- +pinpoint_php.DebugReport=true +--EXTENSIONS-- +pdo_mysql +--FILE-- +dsn = $dsn; + echo "attached dsn \n"; + } + }, + function ($ret) { + echo "on_end \n"; + }, + function ($e) { + echo "on_exception \n"; + } +); +$pdo_exec = "PDO::exec"; +_pinpoint_join_cut( + ["PDO", "exec"], + function ($statement) use ($pdo_exec) { + echo "$pdo_exec: on_before: $statement \n"; + }, + function ($ret) use ($pdo_exec) { + echo "$pdo_exec : on_end \n"; + }, + function ($e) use ($pdo_exec) { + echo "on_exception \n"; + } +); + + +echo "case: pdo() \n"; + +$dbname = "employees"; +$pdo = new PDO("mysql:host=dev-mysql;dbname=$dbname", 'root', 'password'); +$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); +$pdo->abc = "123"; +$sql = "CREATE table IF NOT EXISTS pdo_test( + ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY, + Name VARCHAR( 250 ) NOT NULL, + AGE tinyint(1) unsigned NOT NULL default '1' );"; +$ret = $pdo->exec($sql); +if ($ret === false) { + echo "create pdo_test failed" . $pdo->errorCode(); +} + +$sql = "INSERT INTO pdo_test (NAME, AGE) +VALUES ('a',1),('b',1),('c',3),('d',1);"; +$ret = $pdo->exec($sql); +var_dump($ret); + +$unbufferedResult = $pdo->query("SELECT * FROM pdo_test"); +foreach ($unbufferedResult as $row) { + var_dump($unbufferedResult); +} + +$sth = $pdo->prepare('SELECT name FROM pdo_test + WHERE AGE = :AGE limit 3'); +/* Names can be prefixed with colons ":" too (optional) */ +$sth->bindValue(':AGE', 1); +$ret = $sth->execute(); +var_dump($ret); +$ret = $sth->fetch(); +var_dump($ret); +$ret = $sth->fetchAll(); +var_dump($ret); +var_dump($pdo->abc); +var_dump($pdo->dsn); +$sql = 'DROP TABLE pdo_test'; +$ret = $pdo->exec($sql); + + +--EXPECTF-- +[pinpoint] [%d] [%d]try to interceptor module(class)/function=pdo:__construct +[pinpoint] [%d] [%d]added interceptor on `module`: pdo::__construct success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=pdo:exec +[pinpoint] [%d] [%d]added interceptor on `module`: pdo::exec success +case: pdo() +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::__construct +on_before: mysql:host=dev-mysql;dbname=employees +attached dsn +[pinpoint] [%d] [%d] call_interceptor_before:pdo::__construct return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::__construct +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::exec +PDO::exec: on_before: CREATE table IF NOT EXISTS pdo_test( + ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY, + Name VARCHAR( 250 ) NOT NULL, + AGE tinyint(1) unsigned NOT NULL default '1' ); +[pinpoint] [%d] [%d] call_interceptor_before:pdo::exec return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +PDO::exec : on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::exec +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::exec +PDO::exec: on_before: INSERT INTO pdo_test (NAME, AGE) +VALUES ('a',1),('b',1),('c',3),('d',1); +[pinpoint] [%d] [%d] call_interceptor_before:pdo::exec return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +PDO::exec : on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::exec +int(4) +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#8 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +bool(true) +array(2) { + ["name"]=> + string(1) "a" + [0]=> + string(1) "a" +} +array(2) { + [0]=> + array(2) { + ["name"]=> + string(1) "b" + [0]=> + string(1) "b" + } + [1]=> + array(2) { + ["name"]=> + string(1) "d" + [0]=> + string(1) "d" + } +} +string(3) "123" +string(37) "mysql:host=dev-mysql;dbname=employees" +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::exec +PDO::exec: on_before: DROP TABLE pdo_test +[pinpoint] [%d] [%d] call_interceptor_before:pdo::exec return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +PDO::exec : on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::exec +[pinpoint] [%d] [%d]start free interceptor: pdo::__construct +[pinpoint] [%d] [%d]start free interceptor: pdo::exec \ No newline at end of file diff --git a/tests/pinpoint_join_cut_pdo_8.phpt b/tests/pinpoint_join_cut_pdo_8.phpt new file mode 100644 index 000000000..810c01d34 --- /dev/null +++ b/tests/pinpoint_join_cut_pdo_8.phpt @@ -0,0 +1,184 @@ +--TEST-- +pinpoint_php pinpoint_join_cut_pdo_8 +--SKIPIF-- + +--INI-- +pinpoint_php.DebugReport=true +--EXTENSIONS-- +pdo_mysql + +--FILE-- +setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); +$sql = "CREATE table IF NOT EXISTS pdo_test( + ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY, + Name VARCHAR( 250 ) NOT NULL, + AGE tinyint(1) unsigned NOT NULL default '1' );"; +$ret = $pdo->exec($sql); +if ($ret === false) { + echo "create pdo_test failed" . $pdo->errorCode(); +} + +$sql = "INSERT INTO pdo_test (NAME, AGE) +VALUES ('a',1),('b',1),('c',3),('d',1);"; +$ret = $pdo->exec($sql); +var_dump($ret); + +$unbufferedResult = $pdo->query("SELECT * FROM pdo_test"); +foreach ($unbufferedResult as $row) { + var_dump($unbufferedResult); +} + +$sth = $pdo->prepare('SELECT name FROM pdo_test + WHERE AGE = :AGE limit 3'); +/* Names can be prefixed with colons ":" too (optional) */ +$sth->bindValue(':AGE', 1); +$ret = $sth->execute(); +var_dump($ret); +$ret = $sth->fetch(); +var_dump($ret); +$ret = $sth->fetchAll(); +var_dump($ret); +var_dump($weakMap[$pdo]); +$sql = 'DROP TABLE pdo_test'; +$ret = $pdo->exec($sql); + + + +--EXPECTF-- +[pinpoint] [%d] [%d]try to interceptor module(class)/function=pdo:__construct +[pinpoint] [%d] [%d]added interceptor on `module`: pdo::__construct success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=pdo:exec +[pinpoint] [%d] [%d]added interceptor on `module`: pdo::exec success +case: pdo() +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::__construct +on_before: mysql:host=dev-mysql;dbname=employees +attached dsn +[pinpoint] [%d] [%d] call_interceptor_before:pdo::__construct return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::__construct +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::exec +PDO::exec: on_before: CREATE table IF NOT EXISTS pdo_test( + ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY, + Name VARCHAR( 250 ) NOT NULL, + AGE tinyint(1) unsigned NOT NULL default '1' ); +mysql:host=dev-mysql;dbname=employees +[pinpoint] [%d] [%d] call_interceptor_before:pdo::exec return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +PDO::exec : on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::exec +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::exec +PDO::exec: on_before: INSERT INTO pdo_test (NAME, AGE) +VALUES ('a',1),('b',1),('c',3),('d',1); +mysql:host=dev-mysql;dbname=employees +[pinpoint] [%d] [%d] call_interceptor_before:pdo::exec return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +PDO::exec : on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::exec +int(4) +object(PDOStatement)#9 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#9 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#9 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +object(PDOStatement)#9 (1) { + ["queryString"]=> + string(22) "SELECT * FROM pdo_test" +} +bool(true) +array(2) { + ["name"]=> + string(1) "a" + [0]=> + string(1) "a" +} +array(2) { + [0]=> + array(2) { + ["name"]=> + string(1) "b" + [0]=> + string(1) "b" + } + [1]=> + array(2) { + ["name"]=> + string(1) "d" + [0]=> + string(1) "d" + } +} +string(37) "mysql:host=dev-mysql;dbname=employees" +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:pdo::exec +PDO::exec: on_before: DROP TABLE pdo_test +mysql:host=dev-mysql;dbname=employees +[pinpoint] [%d] [%d] call_interceptor_before:pdo::exec return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +PDO::exec : on_end +[pinpoint] [%d] [%d]call_interceptor_end: pdo::exec +[pinpoint] [%d] [%d]start free interceptor: pdo::__construct +[pinpoint] [%d] [%d]start free interceptor: pdo::exec \ No newline at end of file diff --git a/tests/pinpoint_join_cut_redis.phpt b/tests/pinpoint_join_cut_redis.phpt new file mode 100644 index 000000000..c1b6da409 --- /dev/null +++ b/tests/pinpoint_join_cut_redis.phpt @@ -0,0 +1,288 @@ +--TEST-- +pinpoint_php pinpoint_join_cut_redis +--SKIPIF-- + +--INI-- +pinpoint_php.DebugReport=true +--EXTENSIONS-- +redis +json +--FILE-- + 'redis', + 'port' => 6379, + 'connectTimeout' => 2.5 +]); +assert($redis->info() !== false); + +echo "case: redis() \n"; +$redis = new Redis(); +$redis->connect('redis', 6379); +assert($redis->info() !== false); + +echo "case: redis() \n"; +$redis = new Redis(); +$redis->pconnect('redis', 6379); +assert($redis->info() !== false); + +echo "case: strings \n"; +$redis = new Redis(); +$redis->pconnect('redis', 6379); +$redis->get("a"); +$redis->set("a", "b"); +$redis->setNx("a", "10"); +$redis->append("ar", "aa"); +$redis->setRange("ar", 0, "bb"); +$redis->get("ar"); +$redis->getRange("ar", 0, 2); +$redis->strlen("ar"); +$redis->getBit("ar", 1); +$redis->setBit("ar", 1, 3); +var_dump($redis->get("ar")); +$redis->mSet(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']); +var_dump($redis->exists('foo', 'bar', 'baz', 'not exists')); +$redis->flushdb(); +--EXPECTF-- +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:info +[pinpoint] [%d] [%d]added interceptor on `module`: redis::info success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:get +[pinpoint] [%d] [%d]added interceptor on `module`: redis::get success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:set +[pinpoint] [%d] [%d]added interceptor on `module`: redis::set success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:setnx +[pinpoint] [%d] [%d]added interceptor on `module`: redis::setnx success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:append +[pinpoint] [%d] [%d]added interceptor on `module`: redis::append success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:getrange +[pinpoint] [%d] [%d]added interceptor on `module`: redis::getrange success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:setrange +[pinpoint] [%d] [%d]added interceptor on `module`: redis::setrange success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:strlen +[pinpoint] [%d] [%d]added interceptor on `module`: redis::strlen success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:getbit +[pinpoint] [%d] [%d]added interceptor on `module`: redis::getbit success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:setbit +[pinpoint] [%d] [%d]added interceptor on `module`: redis::setbit success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:mset +[pinpoint] [%d] [%d]added interceptor on `module`: redis::mset success +[pinpoint] [%d] [%d]try to interceptor module(class)/function=redis:msetnx +[pinpoint] [%d] [%d]added interceptor on `module`: redis::msetnx success +case: redis(xxx) +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::info +Redis::info before: +[pinpoint] [%d] [%d] call_interceptor_before:redis::info return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::info end +[pinpoint] [%d] [%d]call_interceptor_end: redis::info +case: redis() +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::info +Redis::info before: +[pinpoint] [%d] [%d] call_interceptor_before:redis::info return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::info end +[pinpoint] [%d] [%d]call_interceptor_end: redis::info +case: redis() +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::info +Redis::info before: +[pinpoint] [%d] [%d] call_interceptor_before:redis::info return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::info end +[pinpoint] [%d] [%d]call_interceptor_end: redis::info +case: strings +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::get +Redis::get before: a +[pinpoint] [%d] [%d] call_interceptor_before:redis::get return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::get end +[pinpoint] [%d] [%d]call_interceptor_end: redis::get +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::set +Redis::set before: a : b +[pinpoint] [%d] [%d] call_interceptor_before:redis::set return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::set end +[pinpoint] [%d] [%d]call_interceptor_end: redis::set +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::setnx +Redis::setNx before: a : 10 +[pinpoint] [%d] [%d] call_interceptor_before:redis::setnx return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::setNx end +[pinpoint] [%d] [%d]call_interceptor_end: redis::setnx +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::append +Redis::append before: ar : aa +[pinpoint] [%d] [%d] call_interceptor_before:redis::append return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::append end +[pinpoint] [%d] [%d]call_interceptor_end: redis::append +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::setrange +Redis::setRange before: ar +[pinpoint] [%d] [%d] call_interceptor_before:redis::setrange return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::setRange end +[pinpoint] [%d] [%d]call_interceptor_end: redis::setrange +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::get +Redis::get before: ar +[pinpoint] [%d] [%d] call_interceptor_before:redis::get return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::get end +[pinpoint] [%d] [%d]call_interceptor_end: redis::get +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::getrange +Redis::getRange before: ar +[pinpoint] [%d] [%d] call_interceptor_before:redis::getrange return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::getRange end +[pinpoint] [%d] [%d]call_interceptor_end: redis::getrange +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::strlen +Redis::strlen before: ar +[pinpoint] [%d] [%d] call_interceptor_before:redis::strlen return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::strlen end +[pinpoint] [%d] [%d]call_interceptor_end: redis::strlen +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::getbit +Redis::getBit before: ar : 1 +[pinpoint] [%d] [%d] call_interceptor_before:redis::getbit return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::getBit end +[pinpoint] [%d] [%d]call_interceptor_end: redis::getbit +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::setbit +Redis::setBit before: ar +[pinpoint] [%d] [%d] call_interceptor_before:redis::setbit return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::setBit end +[pinpoint] [%d] [%d]call_interceptor_end: redis::setbit +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::get +Redis::get before: ar +[pinpoint] [%d] [%d] call_interceptor_before:redis::get return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::get end +[pinpoint] [%d] [%d]call_interceptor_end: redis::get +string(2) "bb" +[pinpoint] [%d] [%d]pinpoint_interceptor_handler_entry: handle func/method:redis::mset +Redis::mSet before: +[pinpoint] [%d] [%d] call_interceptor_before:redis::mset return type(1) zval +[pinpoint] [%d] [%d]replace_ex_caller_parameters return value must be `an array` +Redis::mSet end +[pinpoint] [%d] [%d]call_interceptor_end: redis::mset +int(3) +[pinpoint] [%d] [%d]start free interceptor: redis::info +[pinpoint] [%d] [%d]start free interceptor: redis::get +[pinpoint] [%d] [%d]start free interceptor: redis::set +[pinpoint] [%d] [%d]start free interceptor: redis::setnx +[pinpoint] [%d] [%d]start free interceptor: redis::append +[pinpoint] [%d] [%d]start free interceptor: redis::getrange +[pinpoint] [%d] [%d]start free interceptor: redis::setrange +[pinpoint] [%d] [%d]start free interceptor: redis::strlen +[pinpoint] [%d] [%d]start free interceptor: redis::getbit +[pinpoint] [%d] [%d]start free interceptor: redis::setbit +[pinpoint] [%d] [%d]start free interceptor: redis::mset +[pinpoint] [%d] [%d]start free interceptor: redis::msetnx \ No newline at end of file diff --git a/tests/stack_fetal_error.phpt b/tests/stack_fetal_error.phpt index 9e2e3a448..dbbc0d221 100644 --- a/tests/stack_fetal_error.phpt +++ b/tests/stack_fetal_error.phpt @@ -1,5 +1,5 @@ --TEST-- -pinpioint_php internal test case [pinpoint_test_main] +pinpoint_php internal test case [pinpoint_test_main] --SKIPIF-- --INI-- @@ -13,25 +13,25 @@ pinpoint_php.DebugReport=true 0); +// while(_pinpoint_end_trace()>0); //} //register_shutdown_function('shutdown'); class Foo{ public function __construct() { - pinpoint_start_trace(); - pinpoint_add_clue("name","Foo"); + _pinpoint_start_trace(); + _pinpoint_add_clue("name","Foo"); } public function __destruct() { - pinpoint_end_trace(); + _pinpoint_end_trace(); } public function ouput($a,$b) { - pinpoint_add_clues("1","$a,$b"); - pinpoint_add_clues("2","234"); + _pinpoint_add_clues("1","$a,$b"); + _pinpoint_add_clues("2","234"); } } @@ -39,7 +39,7 @@ function Test(){ throw new \Exception("I am testting"); } -pinpoint_start_trace(); +_pinpoint_start_trace(); try{ $f = new Foo(); @@ -48,7 +48,7 @@ try{ throw $e; } -pinpoint_start_trace(); +_pinpoint_start_trace(); --EXPECTF-- [pinpoint] [%d] [%d] [0] pinpoint_start child [128] [pinpoint] [%d] [%d] [128] pinpoint_start child [127] diff --git a/tests/trace_api_context.phpt b/tests/trace_api_context.phpt index 01291c0dd..7926469c4 100644 --- a/tests/trace_api_context.phpt +++ b/tests/trace_api_context.phpt @@ -13,33 +13,33 @@ pinpoint_php.DebugReport=true --EXPECTF-- @@ -64,7 +64,7 @@ bool(false) [pinpoint] [%d] [%d]this span:({":E":%d,":FT":1500,":S":%d,"calls":[{":E":%d,":S":%d}]}) [pinpoint] [%d] [%d] [128] pinpoint_end_trace Done! { - "common_libary_version" : "0.5.0", + "common_library_version" : "0.5.0", "pool_free_node" : 128, "pool_total_node" : 128 } \ No newline at end of file diff --git a/tests/trace_api_context_tcp.phpt b/tests/trace_api_context_tcp.phpt index 3dbe1fad9..cb46e434a 100644 --- a/tests/trace_api_context_tcp.phpt +++ b/tests/trace_api_context_tcp.phpt @@ -13,33 +13,33 @@ pinpoint_php.DebugReport=true --EXPECTF-- @@ -52,8 +52,8 @@ bool(false) [pinpoint] [%d] [%d]this span:({":E":%d,":FT":1500,":S":%d}) [pinpoint] [%d] [%d]agent try to connect:(127.0.0.1:9999) [pinpoint] [%d] [%d]write event -[pinpoint] [%d] [%d]_do_write_data@%d send data error:(%d) fd:(3) -[pinpoint] [%d] [%d]reset peer:3 +[pinpoint] [%d] [%d]_do_write_data@%d send data error:(%d) fd:(%d) +[pinpoint] [%d] [%d]reset peer:%d [pinpoint] [%d] [%d] [128] pinpoint_end_trace Done! [pinpoint] [%d] [%d] [0] pinpoint_start child [128] [pinpoint] [%d] [%d] [128] pinpoint_start child [127] @@ -66,7 +66,7 @@ bool(false) [pinpoint] [%d] [%d]this span:({":E":%d,":FT":1500,":S":%d,"calls":[{":E":%d,":S":%d}]}) [pinpoint] [%d] [%d] [128] pinpoint_end_trace Done! { - "common_libary_version" : "0.5.0", + "common_library_version" : "0.5.0", "pool_free_node" : 128, "pool_total_node" : 128 } \ No newline at end of file diff --git a/tests/trace_api_test.phpt b/tests/trace_api_test.phpt index 0cbdfd6d1..8ab82c655 100644 --- a/tests/trace_api_test.phpt +++ b/tests/trace_api_test.phpt @@ -15,19 +15,19 @@ pinpoint_php.DebugReport=true class Foo{ public function __construct() { - echo pinpoint_start_trace()."\n"; - pinpoint_add_clue("name","Foo"); + echo _pinpoint_start_trace()."\n"; + _pinpoint_add_clue("name","Foo"); } public function __destruct() { - echo pinpoint_end_trace()."\n"; + echo _pinpoint_end_trace()."\n"; } public function ouput($a,$b) { - pinpoint_add_clues("1","$a,$b"); - pinpoint_add_clues("2","234"); + _pinpoint_add_clues("1","$a,$b"); + _pinpoint_add_clues("2","234"); } } @@ -39,16 +39,16 @@ function ouput_234($a,$b) } -echo pinpoint_start_trace()."\n"; +echo _pinpoint_start_trace()."\n"; -pinpoint_add_clue("name","ouput_234"); +_pinpoint_add_clue("name","ouput_234"); for($x = 0;$x <10;$x++){ ouput_234(1,3); } -pinpoint_add_clue("args",'a,$b'); -pinpoint_add_clue("ret",'a,$b'); +_pinpoint_add_clue("args",'a,$b'); +_pinpoint_add_clue("ret",'a,$b'); -echo pinpoint_end_trace()."\n"; +echo _pinpoint_end_trace()."\n"; ?> diff --git a/tests/trace_api_with_id.phpt b/tests/trace_api_with_id.phpt index 631a851ed..51457e7f9 100644 --- a/tests/trace_api_with_id.phpt +++ b/tests/trace_api_with_id.phpt @@ -15,34 +15,34 @@ function exception_handler($exception) { global $id; $lastId = $id; - pinpoint_add_clue("EXP",$exception->getMessage(),$id); + _pinpoint_add_clue("EXP",$exception->getMessage(),$id); do { - $lastId = pinpoint_end_trace($lastId); + $lastId = _pinpoint_end_trace($lastId); }while($lastId != 0); echo "Uncaught exception: " , $exception->getMessage(), "\n"; } set_exception_handler('exception_handler'); -$id = pinpoint_start_trace($id); -pinpoint_add_clue("name","Foo",$id); -$id = pinpoint_start_trace($id); -pinpoint_add_clues("name","Foo1",$id); -$id = pinpoint_start_trace($id); -pinpoint_add_clue("name","Foo2",$id); -$id = pinpoint_end_trace($id); -$id = pinpoint_start_trace($id); -pinpoint_add_clues("name","Foo3",$id); -pinpoint_add_clue("name","Foo4",$id); -$id = pinpoint_end_trace($id); -pinpoint_add_clues("name","Foo5",$id); +$id = _pinpoint_start_trace($id); +_pinpoint_add_clue("name","Foo",$id); +$id = _pinpoint_start_trace($id); +_pinpoint_add_clues("name","Foo1",$id); +$id = _pinpoint_start_trace($id); +_pinpoint_add_clue("name","Foo2",$id); +$id = _pinpoint_end_trace($id); +$id = _pinpoint_start_trace($id); +_pinpoint_add_clues("name","Foo3",$id); +_pinpoint_add_clue("name","Foo4",$id); +$id = _pinpoint_end_trace($id); +_pinpoint_add_clues("name","Foo5",$id); throw new Exception("too heavy, throw it"); -$id = pinpoint_end_trace($id); -pinpoint_add_clue("name","Foo",$id); +$id = _pinpoint_end_trace($id); +_pinpoint_add_clue("name","Foo",$id); -$id = pinpoint_end_trace($id); +$id = _pinpoint_end_trace($id); --EXPECTF-- [pinpoint] [%d] [%d] [0] pinpoint_start child [128] diff --git a/tests/trace_limit_test-i448.phpt b/tests/trace_limit_test-i448.phpt index 8a727e867..5067f09b4 100644 --- a/tests/trace_limit_test-i448.phpt +++ b/tests/trace_limit_test-i448.phpt @@ -13,25 +13,25 @@ pinpoint_php.DebugReport=true --FILE-- ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -pinpoint_php.DebugReport=true ---FILE-- - ---INI-- - ---FILE-- -foo('hello pinpoint',1,array('1'=>2,'c'=>3,'e'=>5)); -Foo::static_foo('hello pinpoint',1,array('1'=>2,'c'=>3,'e'=>5)); -$foo->test_none(); -var_dump($foo->return_all("23",1,null)); - -echo "test anonymous \n"; -$name = 'eeliu'; -$nobody = function ($arg) use (&$name) { - var_dump(\pinpoint_get_func_ref_args()); - $name = 'eeliu-01'; - $arg = $arg.$name; - return \pinpoint_get_func_ref_args(); -}; -var_dump($nobody("hello ")); -echo "\n"; - -echo "test pinpoint_get_func_ref_args call in call_user_func_array \n"; - -function foo_ref($a,&$b,&$c) -{ - var_dump(func_get_args()); - $b = 10; - $c = 11; - return array($b,$c); -} - -function aop_foo_ref($a,&$b,&$c) -{ - $args = \pinpoint_get_func_ref_args(); - return call_user_func_array('foo_ref',$args); -} -$b =2; -$c = 12; -var_dump(aop_foo_ref("adf",$b,$c)); -echo "b = $b \n"; -echo "c = $c \n"; - ---EXPECTF-- -array(4) { - [0]=> - &int(100) - [1]=> - int(1) - [2]=> - int(3) - [3]=> - int(4) -} -string(12) "hello php!!!" -[pinpoint] [%d] [%d]apm_error_cb called - -Warning: pinpoint_get_func_ref_args(): Called from the global scope - no function context in %s on line 18 -bool(false) -call __construct -array(2) { - [0]=> - int(1) - [1]=> - int(2) -} -array(3) { - [0]=> - string(14) "hello pinpoint" - [1]=> - int(1) - [2]=> - array(3) { - [1]=> - int(2) - ["c"]=> - int(3) - ["e"]=> - int(5) - } -} -array(3) { - [0]=> - string(14) "hello pinpoint" - [1]=> - int(1) - [2]=> - array(3) { - [1]=> - int(2) - ["c"]=> - int(3) - ["e"]=> - int(5) - } -} -array(0) { -} -array(3) { - [0]=> - string(2) "23" - [1]=> - int(1) - [2]=> - NULL -} -test anonymous -array(1) { - [0]=> - string(6) "hello " -} -array(1) { - [0]=> - string(6) "hello " -} - -test pinpoint_get_func_ref_args call in call_user_func_array -array(3) { - [0]=> - string(3) "adf" - [1]=> - int(2) - [2]=> - int(12) -} -array(2) { - [0]=> - int(10) - [1]=> - int(11) -} -b = 10 -c = 11 -call __destruct -array(0) { -} \ No newline at end of file diff --git a/tests5/app_info_test.phpt b/tests5/app_info_test.phpt deleted file mode 100644 index a2c077621..000000000 --- a/tests5/app_info_test.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -app info ---SKIPIF-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -pinpoint_php.DebugReport=true ---FILE-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -pinpoint_php.DebugReport=true ---FILE-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -;pinpoint_php._limit for internal use. User do not use it -pinpoint_php._limit=yes -pinpoint_php.DebugReport=true ---FILE-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -pinpoint_php.DebugReport=true ---FILE-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -;pinpoint_php._limit for internal use. User do not use it -pinpoint_php._limit=yes -pinpoint_php.DebugReport=true ---FILE-- -0); -//} -//register_shutdown_function('shutdown'); -class Foo{ - public function __construct() - { - pinpoint_start_trace(); - pinpoint_add_clue("name","Foo"); - } - - public function __destruct() - { - pinpoint_end_trace(); - } - - public function ouput($a,$b) - { - pinpoint_add_clues("1","$a,$b"); - pinpoint_add_clues("2","234"); - } -} - -function Test(){ - throw new \Exception("I am testting"); -} - -pinpoint_start_trace(); - -try{ - $f = new Foo(); - Test(); -}catch(\Exception $e){ - throw $e; -} - -pinpoint_start_trace(); ---EXPECTF-- -[pinpoint] [%d] [%d]#0 pinpoint_start child #128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #127 -[pinpoint] [%d] [%d]#127 add clue key:name value:Foo -[pinpoint] [%d] [%d]apm_error_cb called - -Fatal error: Uncaught exception 'Exception' with message 'I am testting' in %s:27 -Stack trace: -#0 %s(34): Test() -#1 {main} - thrown in %s on line 27 -[pinpoint] [%d] [%d]#127 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]this span:({"E":0,"ERR":{"file":"%s","line":27,"msg":"Uncaught exception 'Exception' with message 'I am testting' in %s:27\nStack trace:\n#0 %s(34): Test()\n#1 {main}\n thrown"},"FT":1500,"S":%d,"calls":[{"E":0,"S":0,"name":"Foo"}]}) -[pinpoint] [%d] [%d]agent try to connect:(unix:/unexist_file.sock) -[pinpoint] [%d] [%d]connect:(/unexist_file.sock) failed as (No such file or directory) -[pinpoint] [%d] [%d]#128 pinpoint_end_trace Done! \ No newline at end of file diff --git a/tests5/trace_api_context.phpt b/tests5/trace_api_context.phpt deleted file mode 100644 index efd1aed35..000000000 --- a/tests5/trace_api_context.phpt +++ /dev/null @@ -1,66 +0,0 @@ ---TEST-- -Check call statck ---SKIPIF-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=200 -pinpoint_php.UnitTest=true -;pinpoint_php._limit for internal use. User do not use it -pinpoint_php._limit=yes -pinpoint_php.DebugReport=true ---FILE-- - ---EXPECTF-- -[pinpoint] [%d] [%d]#0 pinpoint_start child #128 -string(1) "a" -string(1) "b" -string(1) "c" -[pinpoint] [%d] [%d] pinpoint_get_context_key#128 failed with map::at, parameters:not exist -bool(false) -[pinpoint] [%d] [%d]this span:({"E":%d,"FT":1500,"S":%d}) -[pinpoint] [%d] [%d]agent try to connect:(unix:/unexist_file.sock) -[pinpoint] [%d] [%d]connect:(/unexist_file.sock) failed as (No such file or directory) -[pinpoint] [%d] [%d]#128 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]#0 pinpoint_start child #128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #127 -string(1) "c" -string(1) "b" -string(1) "a" -[pinpoint] [%d] [%d] pinpoint_get_context_key#127 failed with map::at, parameters:not exist -bool(false) -[pinpoint] [%d] [%d]#127 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]this span:({"E":%d,"FT":1500,"S":%d,"calls":[{"E":%d,"S":%d}]}) -[pinpoint] [%d] [%d]agent try to connect:(unix:/unexist_file.sock) -[pinpoint] [%d] [%d]#128 pinpoint_end_trace Done! \ No newline at end of file diff --git a/tests5/trace_api_context_tcp.phpt b/tests5/trace_api_context_tcp.phpt deleted file mode 100644 index abb3c4e15..000000000 --- a/tests5/trace_api_context_tcp.phpt +++ /dev/null @@ -1,64 +0,0 @@ ---TEST-- -Check call statck ---SKIPIF-- - ---INI-- -pinpoint_php.CollectorHost=tcp:127.0.0.1:9999 -pinpoint_php.SendSpanTimeOutMs=200 -pinpoint_php.UnitTest=true -;pinpoint_php._limit for internal use. User do not use it -pinpoint_php._limit=yes -pinpoint_php.DebugReport=true ---FILE-- - ---EXPECTF-- -[pinpoint] [%d] [%d]#0 pinpoint_start child #128 -string(1) "a" -string(1) "b" -string(1) "c" -[pinpoint] [%d] [%d] pinpoint_get_context_key#128 failed with map::at, parameters:not exist -bool(false) -[pinpoint] [%d] [%d]this span:({"E":%d,"FT":1500,"S":%d}) -[pinpoint] [%d] [%d]agent try to connect:(tcp:127.0.0.1:9999) -[pinpoint] [%d] [%d]#128 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]#0 pinpoint_start child #128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #127 -string(1) "c" -string(1) "b" -string(1) "a" -[pinpoint] [%d] [%d] pinpoint_get_context_key#127 failed with map::at, parameters:not exist -bool(false) -[pinpoint] [%d] [%d]#127 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]this span:({"E":%d,"FT":1500,"S":%d,"calls":[{"E":%d,"S":%d}]}) -[pinpoint] [%d] [%d]#128 pinpoint_end_trace Done! \ No newline at end of file diff --git a/tests5/trace_api_test.phpt b/tests5/trace_api_test.phpt deleted file mode 100644 index 273837000..000000000 --- a/tests5/trace_api_test.phpt +++ /dev/null @@ -1,135 +0,0 @@ ---TEST-- -Check call statck ---SKIPIF-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=200 -pinpoint_php.UnitTest=true -;pinpoint_php._limit for internal use. User do not use it -pinpoint_php._limit=yes -pinpoint_php.DebugReport=true ---FILE-- -ouput("234",3432); - usleep(2000); -} - - -echo pinpoint_start_trace()."\n"; - -pinpoint_add_clue("name","ouput_234"); -for($x = 0;$x <10;$x++){ - ouput_234(1,3); -} -pinpoint_add_clue("args",'a,$b'); -pinpoint_add_clue("ret",'a,$b'); - -echo pinpoint_end_trace()."\n"; - - -?> ---EXPECTF-- -[pinpoint] [%d] [%d]#0 pinpoint_start child #128 -128 -[pinpoint] [%d] [%d]#128 add clue key:name value:ouput_234 -[pinpoint] [%d] [%d]#128 pinpoint_start child #127 -127 -[pinpoint] [%d] [%d]#127 add clue key:name value:Foo -[pinpoint] [%d] [%d]#127 add clues:1:234,3432 -[pinpoint] [%d] [%d]#127 add clues:2:234 -[pinpoint] [%d] [%d]#127 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #126 -126 -[pinpoint] [%d] [%d]#126 add clue key:name value:Foo -[pinpoint] [%d] [%d]#126 add clues:1:234,3432 -[pinpoint] [%d] [%d]#126 add clues:2:234 -[pinpoint] [%d] [%d]#126 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #125 -125 -[pinpoint] [%d] [%d]#125 add clue key:name value:Foo -[pinpoint] [%d] [%d]#125 add clues:1:234,3432 -[pinpoint] [%d] [%d]#125 add clues:2:234 -[pinpoint] [%d] [%d]#125 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #124 -124 -[pinpoint] [%d] [%d]#124 add clue key:name value:Foo -[pinpoint] [%d] [%d]#124 add clues:1:234,3432 -[pinpoint] [%d] [%d]#124 add clues:2:234 -[pinpoint] [%d] [%d]#124 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #123 -123 -[pinpoint] [%d] [%d]#123 add clue key:name value:Foo -[pinpoint] [%d] [%d]#123 add clues:1:234,3432 -[pinpoint] [%d] [%d]#123 add clues:2:234 -[pinpoint] [%d] [%d]#123 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #122 -122 -[pinpoint] [%d] [%d]#122 add clue key:name value:Foo -[pinpoint] [%d] [%d]#122 add clues:1:234,3432 -[pinpoint] [%d] [%d]#122 add clues:2:234 -[pinpoint] [%d] [%d]#122 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #121 -121 -[pinpoint] [%d] [%d]#121 add clue key:name value:Foo -[pinpoint] [%d] [%d]#121 add clues:1:234,3432 -[pinpoint] [%d] [%d]#121 add clues:2:234 -[pinpoint] [%d] [%d]#121 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #120 -120 -[pinpoint] [%d] [%d]#120 add clue key:name value:Foo -[pinpoint] [%d] [%d]#120 add clues:1:234,3432 -[pinpoint] [%d] [%d]#120 add clues:2:234 -[pinpoint] [%d] [%d]#120 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #119 -119 -[pinpoint] [%d] [%d]#119 add clue key:name value:Foo -[pinpoint] [%d] [%d]#119 add clues:1:234,3432 -[pinpoint] [%d] [%d]#119 add clues:2:234 -[pinpoint] [%d] [%d]#119 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 pinpoint_start child #118 -118 -[pinpoint] [%d] [%d]#118 add clue key:name value:Foo -[pinpoint] [%d] [%d]#118 add clues:1:234,3432 -[pinpoint] [%d] [%d]#118 add clues:2:234 -[pinpoint] [%d] [%d]#118 pinpoint_end_trace Done! -128 -[pinpoint] [%d] [%d]#128 add clue key:args value:a,$b -[pinpoint] [%d] [%d]#128 add clue key:ret value:a,$b -[pinpoint] [%d] [%d]this span:({"E":%d,"FT":1500,"S":%d,"args":"a,$b","calls":[{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"},{"E":%d,"S":%d,"clues":["1:234,3432","2:234"],"name":"Foo"}],"name":"ouput_234","ret":"a,$b"}) -[pinpoint] [%d] [%d]agent try to connect:(unix:/unexist_file.sock) -[pinpoint] [%d] [%d]connect:(/unexist_file.sock) failed as (No such file or directory) -[pinpoint] [%d] [%d]#128 pinpoint_end_trace Done! -0 \ No newline at end of file diff --git a/tests5/trace_api_with_id.phpt b/tests5/trace_api_with_id.phpt deleted file mode 100644 index 627cb74f2..000000000 --- a/tests5/trace_api_with_id.phpt +++ /dev/null @@ -1,66 +0,0 @@ ---TEST-- -Test pinpoint_unique_id ---SKIPIF-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -pinpoint_php.DebugReport=true ---FILE-- -getMessage(),$id); - - do - { - $lastId = pinpoint_end_trace($lastId); - }while($lastId != 0); - echo "Uncaught exception: " , $exception->getMessage(), "\n"; -} - -set_exception_handler('exception_handler'); - -$id = pinpoint_start_trace($id); -pinpoint_add_clue("name","Foo",$id); -$id = pinpoint_start_trace($id); -pinpoint_add_clues("name","Foo1",$id); -$id = pinpoint_start_trace($id); -pinpoint_add_clue("name","Foo2",$id); -$id = pinpoint_end_trace($id); -$id = pinpoint_start_trace($id); -pinpoint_add_clues("name","Foo3",$id); -pinpoint_add_clue("name","Foo4",$id); -$id = pinpoint_end_trace($id); -pinpoint_add_clues("name","Foo5",$id); -throw new Exception("too heavy, throw it"); -$id = pinpoint_end_trace($id); -pinpoint_add_clue("name","Foo",$id); - -$id = pinpoint_end_trace($id); - ---EXPECTF-- -[pinpoint] [%d] [%d]#0 pinpoint_start child #128 -[pinpoint] [%d] [%d]#128 add clue key:name value:Foo -[pinpoint] [%d] [%d]#128 pinpoint_start child #127 -[pinpoint] [%d] [%d]#127 add clues:name:Foo1 -[pinpoint] [%d] [%d]#127 pinpoint_start child #126 -[pinpoint] [%d] [%d]#126 add clue key:name value:Foo2 -[pinpoint] [%d] [%d]#126 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]#127 pinpoint_start child #125 -[pinpoint] [%d] [%d]#125 add clues:name:Foo3 -[pinpoint] [%d] [%d]#125 add clue key:name value:Foo4 -[pinpoint] [%d] [%d]#125 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]#127 add clues:name:Foo5 -[pinpoint] [%d] [%d]#127 add clue key:EXP value:too heavy, throw it -[pinpoint] [%d] [%d]#127 pinpoint_end_trace Done! -[pinpoint] [%d] [%d]this span:({"E":%d,"FT":1500,"S":%d,"calls":[{"E":%d,"EXP":"too heavy, throw it","S":%d,"calls":[{"E":%d,"S":%d,"name":"Foo2"},{"E":%d,"S":%d,"clues":["name:Foo3"],"name":"Foo4"}],"clues":["name:Foo1","name:Foo5"]}],"name":"Foo"}) -[pinpoint] [%d] [%d]agent try to connect:(unix:/unexist_file.sock) -[pinpoint] [%d] [%d]connect:(/unexist_file.sock) failed as (No such file or directory) -[pinpoint] [%d] [%d]#128 pinpoint_end_trace Done! -Uncaught exception: too heavy, throw it \ No newline at end of file diff --git a/tests5/trace_limit_test-i448.phpt b/tests5/trace_limit_test-i448.phpt deleted file mode 100644 index 60b5d334a..000000000 --- a/tests5/trace_limit_test-i448.phpt +++ /dev/null @@ -1,48 +0,0 @@ ---TEST-- -Check tracelimit ---SKIPIF-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=200 -pinpoint_php.UnitTest=true -pinpoint_php.TraceLimit=0 -;pinpoint_php._limit for internal use. User do not use it -pinpoint_php._limit=yes -pinpoint_php.DebugReport=true ---FILE-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=200 -pinpoint_php.UnitTest=true -pinpoint_php.TraceLimit=2 -;pinpoint_php._limit for internal use. User do not use it -pinpoint_php._limit=yes -pinpoint_php.DebugReport=true ---FILE-- - ---INI-- -pinpoint_php.CollectorHost=unix:/unexist_file.sock -pinpoint_php.SendSpanTimeOutMs=0 -pinpoint_php.UnitTest=true -pinpoint_php.DebugReport=true ---FILE-- -