exp: jaeger tracing
This commit is contained in:
parent
a37eab2610
commit
8f3646a9c9
33
backend.php
33
backend.php
|
@ -30,11 +30,16 @@
|
|||
$op = (string)clean($op);
|
||||
$method = (string)clean($method);
|
||||
|
||||
$scope = Tracer::start(__FILE__, ['tags' => $_REQUEST]);
|
||||
|
||||
startup_gettext();
|
||||
|
||||
$script_started = microtime(true);
|
||||
|
||||
if (!init_plugins()) return;
|
||||
if (!init_plugins()) {
|
||||
$scope->close();
|
||||
return;
|
||||
}
|
||||
|
||||
header("Content-Type: text/json; charset=utf-8");
|
||||
|
||||
|
@ -46,6 +51,8 @@
|
|||
if (!\Sessions\validate_session()) {
|
||||
header("Content-Type: text/json");
|
||||
print Errors::to_json(Errors::E_UNAUTHORIZED);
|
||||
|
||||
$scope->close();
|
||||
return;
|
||||
}
|
||||
UserHelper::load_user_plugins($_SESSION["uid"]);
|
||||
|
@ -53,6 +60,7 @@
|
|||
|
||||
if (Config::is_migration_needed()) {
|
||||
print Errors::to_json(Errors::E_SCHEMA_MISMATCH);
|
||||
$scope->close();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -114,6 +122,7 @@
|
|||
user_error("Refusing to invoke method $method of handler $op which starts with underscore.", E_USER_WARNING);
|
||||
header("Content-Type: text/json");
|
||||
print Errors::to_json(Errors::E_UNAUTHORIZED);
|
||||
$scope->close();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -125,11 +134,19 @@
|
|||
}
|
||||
|
||||
if (implements_interface($handler, 'IHandler')) {
|
||||
$h_scope = Tracer::start("construct/$op");
|
||||
$handler->__construct($_REQUEST);
|
||||
$h_scope->close();
|
||||
|
||||
if (validate_csrf($csrf_token) || $handler->csrf_ignore($method)) {
|
||||
if ($handler->before($method)) {
|
||||
|
||||
$b_scope = Tracer::start("before/$method");
|
||||
$before = $handler->before($method);
|
||||
$b_scope->close();
|
||||
|
||||
if ($before) {
|
||||
if ($method && method_exists($handler, $method)) {
|
||||
$m_scope = Tracer::start("method/$method");
|
||||
$reflection = new ReflectionMethod($handler, $method);
|
||||
|
||||
if ($reflection->getNumberOfRequiredParameters() == 0) {
|
||||
|
@ -139,6 +156,7 @@
|
|||
header("Content-Type: text/json");
|
||||
print Errors::to_json(Errors::E_UNAUTHORIZED);
|
||||
}
|
||||
$m_scope->close();
|
||||
} else {
|
||||
if (method_exists($handler, "catchall")) {
|
||||
$handler->catchall($method);
|
||||
|
@ -147,17 +165,26 @@
|
|||
print Errors::to_json(Errors::E_UNKNOWN_METHOD, ["info" => get_class($handler) . "->$method"]);
|
||||
}
|
||||
}
|
||||
|
||||
$a_scope = Tracer::start("after/$method");
|
||||
$handler->after();
|
||||
$a_scope->close();
|
||||
|
||||
$scope->close();
|
||||
return;
|
||||
} else {
|
||||
header("Content-Type: text/json");
|
||||
print Errors::to_json(Errors::E_UNAUTHORIZED);
|
||||
|
||||
$scope->close();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
user_error("Refusing to invoke method $method of handler $op with invalid CSRF token.", E_USER_WARNING);
|
||||
header("Content-Type: text/json");
|
||||
print Errors::to_json(Errors::E_UNAUTHORIZED);
|
||||
|
||||
$scope->close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -166,4 +193,4 @@
|
|||
header("Content-Type: text/json");
|
||||
print Errors::to_json(Errors::E_UNKNOWN_METHOD, [ "info" => (isset($handler) ? get_class($handler) : "UNKNOWN:".$op) . "->$method"]);
|
||||
|
||||
?>
|
||||
$scope->close();
|
||||
|
|
|
@ -145,6 +145,7 @@ class Counters {
|
|||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
private static function get_feeds(array $feed_ids = null): array {
|
||||
$scope = Tracer::start(__FUNCTION__);
|
||||
|
||||
$ret = [];
|
||||
|
||||
|
@ -211,6 +212,8 @@ class Counters {
|
|||
|
||||
}
|
||||
|
||||
$scope->close();
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
@ -218,6 +221,8 @@ class Counters {
|
|||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
private static function get_global(): array {
|
||||
$scope = Tracer::start(__FUNCTION__);
|
||||
|
||||
$ret = [
|
||||
[
|
||||
"id" => "global-unread",
|
||||
|
@ -234,6 +239,8 @@ class Counters {
|
|||
"counter" => $subcribed_feeds
|
||||
]);
|
||||
|
||||
$scope->close();
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
@ -241,6 +248,7 @@ class Counters {
|
|||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
private static function get_virt(): array {
|
||||
$scope = Tracer::start(__FUNCTION__);
|
||||
|
||||
$ret = [];
|
||||
|
||||
|
@ -287,6 +295,7 @@ class Counters {
|
|||
}
|
||||
}
|
||||
|
||||
$scope->close();
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
@ -295,6 +304,7 @@ class Counters {
|
|||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
static function get_labels(array $label_ids = null): array {
|
||||
$scope = Tracer::start(__FUNCTION__);
|
||||
|
||||
$ret = [];
|
||||
|
||||
|
@ -346,6 +356,7 @@ class Counters {
|
|||
array_push($ret, $cv);
|
||||
}
|
||||
|
||||
$scope->close();
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -987,6 +987,7 @@ class Feeds extends Handler_Protected {
|
|||
* @throws PDOException
|
||||
*/
|
||||
static function _get_counters($feed, bool $is_cat = false, bool $unread_only = false, ?int $owner_uid = null): int {
|
||||
$scope = Tracer::start(__FUNCTION__, ['tags' => ['args' => json_encode(func_get_args())]]);
|
||||
|
||||
$n_feed = (int) $feed;
|
||||
$need_entries = false;
|
||||
|
@ -1010,11 +1011,14 @@ class Feeds extends Handler_Protected {
|
|||
$handler = PluginHost::getInstance()->get_feed_handler($feed_id);
|
||||
if (implements_interface($handler, 'IVirtualFeed')) {
|
||||
/** @var IVirtualFeed $handler */
|
||||
$scope->close();
|
||||
return $handler->get_unread($feed_id);
|
||||
} else {
|
||||
$scope->close();
|
||||
return 0;
|
||||
}
|
||||
} else if ($n_feed == Feeds::FEED_RECENTLY_READ) {
|
||||
$scope->close();
|
||||
return 0;
|
||||
// tags
|
||||
} else if ($feed != "0" && $n_feed == 0) {
|
||||
|
@ -1028,6 +1032,7 @@ class Feeds extends Handler_Protected {
|
|||
$row = $sth->fetch();
|
||||
|
||||
// Handle 'SUM()' returning null if there are no results
|
||||
$scope->close();
|
||||
return $row["count"] ?? 0;
|
||||
|
||||
} else if ($n_feed == Feeds::FEED_STARRED) {
|
||||
|
@ -1061,6 +1066,7 @@ class Feeds extends Handler_Protected {
|
|||
|
||||
$label_id = Labels::feed_to_label_id($feed);
|
||||
|
||||
$scope->close();
|
||||
return self::_get_label_unread($label_id, $owner_uid);
|
||||
}
|
||||
|
||||
|
@ -1080,6 +1086,7 @@ class Feeds extends Handler_Protected {
|
|||
$sth->execute([$owner_uid]);
|
||||
$row = $sth->fetch();
|
||||
|
||||
$scope->close();
|
||||
return $row["unread"];
|
||||
|
||||
} else {
|
||||
|
@ -1092,6 +1099,7 @@ class Feeds extends Handler_Protected {
|
|||
$sth->execute([$feed, $owner_uid]);
|
||||
$row = $sth->fetch();
|
||||
|
||||
$scope->close();
|
||||
return $row["unread"];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1104,12 +1104,16 @@ class Pref_Feeds extends Handler_Protected {
|
|||
* @return array<string, mixed>
|
||||
*/
|
||||
private function feedlist_init_feed(int $feed_id, ?string $title = null, bool $unread = false, string $error = '', string $updated = ''): array {
|
||||
$scope = Tracer::start(__FUNCTION__, ['tags' => ['args' => json_encode(func_get_args())]]);
|
||||
|
||||
if (!$title)
|
||||
$title = Feeds::_get_title($feed_id, false);
|
||||
|
||||
if ($unread === false)
|
||||
$unread = Feeds::_get_counters($feed_id, false, true);
|
||||
|
||||
$scope->close();
|
||||
|
||||
return [
|
||||
'id' => 'FEED:' . $feed_id,
|
||||
'name' => $title,
|
||||
|
|
|
@ -106,6 +106,8 @@ class RPC extends Handler_Protected {
|
|||
}
|
||||
|
||||
function getAllCounters(): void {
|
||||
$scope = Tracer::start(__FUNCTION__);
|
||||
|
||||
@$seq = (int) $_REQUEST['seq'];
|
||||
|
||||
$feed_id_count = (int) ($_REQUEST["feed_id_count"] ?? -1);
|
||||
|
@ -132,6 +134,7 @@ class RPC extends Handler_Protected {
|
|||
'seq' => $seq
|
||||
];
|
||||
|
||||
$scope->close();
|
||||
print json_encode($reply);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
use OpenTracing\GlobalTracer;
|
||||
use OpenTracing\Scope;
|
||||
|
||||
class Tracer {
|
||||
private static $instance;
|
||||
|
||||
public function __construct() {
|
||||
$config = new \Jaeger\Config(
|
||||
[
|
||||
'sampler' => [
|
||||
'type' => \Jaeger\SAMPLER_TYPE_CONST,
|
||||
'param' => true,
|
||||
],
|
||||
'logging' => true,
|
||||
"local_agent" => [
|
||||
"reporting_host" => "172.17.172.39",
|
||||
"reporting_port" => 6832
|
||||
],
|
||||
'dispatch_mode' => \Jaeger\Config::JAEGER_OVER_BINARY_UDP,
|
||||
],
|
||||
'tt-rss'
|
||||
);
|
||||
|
||||
$config->initializeTracer();
|
||||
|
||||
register_shutdown_function(function() {
|
||||
$tracer = GlobalTracer::get();
|
||||
$tracer->flush();
|
||||
});
|
||||
}
|
||||
|
||||
private function _start(string $name, array $options = []) {
|
||||
$tracer = GlobalTracer::get();
|
||||
return $tracer->startActiveSpan($name, $options);
|
||||
}
|
||||
|
||||
public static function start(string $name, array $options = []) : Scope {
|
||||
return self::get_instance()->_start($name, $options);
|
||||
}
|
||||
|
||||
public static function get_instance() : Tracer {
|
||||
if (self::$instance == null)
|
||||
self::$instance = new self();
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
}
|
|
@ -13,7 +13,8 @@
|
|||
"spomky-labs/otphp": "^10.0",
|
||||
"chillerlan/php-qrcode": "^4.3.3",
|
||||
"mervick/material-design-icons": "^2.2",
|
||||
"j4mie/idiorm": "dev-master"
|
||||
"j4mie/idiorm": "dev-master",
|
||||
"jonahgeorge/jaeger-client-php": "^1.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "1.10.3",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "d2be3e2749aff1bebf6257ecbfd6dcb3",
|
||||
"content-hash": "de4af0d5d452fc73fe4f5d584163af9a",
|
||||
"packages": [
|
||||
{
|
||||
"name": "beberlei/assert",
|
||||
|
@ -280,6 +280,74 @@
|
|||
},
|
||||
"time": "2022-03-26T15:19:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "jonahgeorge/jaeger-client-php",
|
||||
"version": "v1.4.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jonahgeorge/jaeger-client-php.git",
|
||||
"reference": "3173d9c68ad8cea16058f25337982b00cc3d1c2b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jonahgeorge/jaeger-client-php/zipball/3173d9c68ad8cea16058f25337982b00cc3d1c2b",
|
||||
"reference": "3173d9c68ad8cea16058f25337982b00cc3d1c2b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-sockets": "*",
|
||||
"opentracing/opentracing": "^1.0",
|
||||
"packaged/thrift": "^0.13",
|
||||
"php": "^7.1 || ^8.0 || ^8.1",
|
||||
"psr/cache": "^1.0 || ^2.0 || ^3.0",
|
||||
"psr/log": "^1.0 || ^2.0 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"cache/array-adapter": "^1.0",
|
||||
"phpunit/phpunit": "^7 || ^8 || ^9",
|
||||
"squizlabs/php_codesniffer": "3.*",
|
||||
"symfony/polyfill-php73": "^1.10"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"./src/Jaeger/Constants.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Jaeger\\": "src/Jaeger/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jonah George",
|
||||
"homepage": "http://twitter.com/jonahgeorge"
|
||||
},
|
||||
{
|
||||
"name": "José Carlos Chávez",
|
||||
"email": "jcchavezs@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Contributors",
|
||||
"homepage": "https://github.com/jonahgeorge/jaeger-client-php/graphs/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Jaeger Bindings for PHP OpenTracing API",
|
||||
"keywords": [
|
||||
"jaeger",
|
||||
"opentracing",
|
||||
"trace",
|
||||
"tracing"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/jonahgeorge/jaeger-client-php/issues",
|
||||
"source": "https://github.com/jonahgeorge/jaeger-client-php/tree/v1.4.4"
|
||||
},
|
||||
"time": "2023-01-31T13:40:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mervick/material-design-icons",
|
||||
"version": "2.2.0",
|
||||
|
@ -323,6 +391,94 @@
|
|||
},
|
||||
"time": "2016-02-22T01:05:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "opentracing/opentracing",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/opentracing/opentracing-php.git",
|
||||
"reference": "cd60bd1fb2a25280600bc74c7f9e0c13881a9116"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/opentracing/opentracing-php/zipball/cd60bd1fb2a25280600bc74c7f9e0c13881a9116",
|
||||
"reference": "cd60bd1fb2a25280600bc74c7f9e0c13881a9116",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "~0.12",
|
||||
"phpunit/phpunit": "^7.0 || ^9.0",
|
||||
"squizlabs/php_codesniffer": "3.*"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/OpenTracing/Tags.php",
|
||||
"src/OpenTracing/Formats.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"OpenTracing\\": "src/OpenTracing/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "José Carlos Chávez",
|
||||
"email": "jcchavezs@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "OpenTracing API for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/opentracing/opentracing-php/issues",
|
||||
"source": "https://github.com/opentracing/opentracing-php/tree/1.0.2"
|
||||
},
|
||||
"time": "2022-01-27T19:59:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "packaged/thrift",
|
||||
"version": "0.13.01",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/packaged/thrift.git",
|
||||
"reference": "e3dbcfb79e319971d64264ffe9c340590cc8a228"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/packaged/thrift/zipball/e3dbcfb79e319971d64264ffe9c340590cc8a228",
|
||||
"reference": "e3dbcfb79e319971d64264ffe9c340590cc8a228",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.5 || ^7.0 || ^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Thrift\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"description": "Apache Thrift",
|
||||
"homepage": "http://thrift.apache.org/",
|
||||
"keywords": [
|
||||
"apache",
|
||||
"thrift"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/packaged/thrift/issues",
|
||||
"source": "https://github.com/packaged/thrift/tree/0.13.01"
|
||||
},
|
||||
"time": "2021-01-25T13:32:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/constant_time_encoding",
|
||||
"version": "v2.6.3",
|
||||
|
@ -390,6 +546,105 @@
|
|||
},
|
||||
"time": "2022-06-14T06:56:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
"version": "3.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/cache.git",
|
||||
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
|
||||
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.0.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Cache\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for caching libraries",
|
||||
"keywords": [
|
||||
"cache",
|
||||
"psr",
|
||||
"psr-6"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/cache/tree/3.0.0"
|
||||
},
|
||||
"time": "2021-02-03T23:26:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "3.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.0.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Log\\": "src"
|
||||
}
|
||||
},
|
||||
"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/3.0.0"
|
||||
},
|
||||
"time": "2021-07-14T16:46:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spomky-labs/otphp",
|
||||
"version": "v10.0.3",
|
||||
|
@ -2690,5 +2945,5 @@
|
|||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
"plugin-api-version": "2.0.0"
|
||||
}
|
||||
|
|
|
@ -2,24 +2,6 @@
|
|||
|
||||
// autoload.php @generated by Composer
|
||||
|
||||
if (PHP_VERSION_ID < 50600) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
||||
if (!ini_get('display_errors')) {
|
||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||
fwrite(STDERR, $err);
|
||||
} elseif (!headers_sent()) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056::getLoader();
|
||||
|
|
|
@ -42,79 +42,30 @@ namespace Composer\Autoload;
|
|||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
/** @var \Closure(string):void */
|
||||
private static $includeFile;
|
||||
|
||||
/** @var ?string */
|
||||
private $vendorDir;
|
||||
|
||||
// PSR-4
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array<string, int>>
|
||||
*/
|
||||
private $prefixLengthsPsr4 = array();
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array<int, string>>
|
||||
*/
|
||||
private $prefixDirsPsr4 = array();
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, string>
|
||||
*/
|
||||
private $fallbackDirsPsr4 = array();
|
||||
|
||||
// PSR-0
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array<string, string[]>>
|
||||
*/
|
||||
private $prefixesPsr0 = array();
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, string>
|
||||
*/
|
||||
private $fallbackDirsPsr0 = array();
|
||||
|
||||
/** @var bool */
|
||||
private $useIncludePath = false;
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
* @psalm-var array<string, string>
|
||||
*/
|
||||
private $classMap = array();
|
||||
|
||||
/** @var bool */
|
||||
private $classMapAuthoritative = false;
|
||||
|
||||
/**
|
||||
* @var bool[]
|
||||
* @psalm-var array<string, bool>
|
||||
*/
|
||||
private $missingClasses = array();
|
||||
|
||||
/** @var ?string */
|
||||
private $apcuPrefix;
|
||||
|
||||
/**
|
||||
* @var self[]
|
||||
*/
|
||||
private static $registeredLoaders = array();
|
||||
|
||||
/**
|
||||
* @param ?string $vendorDir
|
||||
*/
|
||||
public function __construct($vendorDir = null)
|
||||
{
|
||||
$this->vendorDir = $vendorDir;
|
||||
self::initializeIncludeClosure();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getPrefixes()
|
||||
{
|
||||
if (!empty($this->prefixesPsr0)) {
|
||||
|
@ -124,47 +75,28 @@ class ClassLoader
|
|||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return array<string, array<int, string>>
|
||||
*/
|
||||
public function getPrefixesPsr4()
|
||||
{
|
||||
return $this->prefixDirsPsr4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return array<string, string>
|
||||
*/
|
||||
public function getFallbackDirs()
|
||||
{
|
||||
return $this->fallbackDirsPsr0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return array<string, string>
|
||||
*/
|
||||
public function getFallbackDirsPsr4()
|
||||
{
|
||||
return $this->fallbackDirsPsr4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[] Array of classname => path
|
||||
* @psalm-return array<string, string>
|
||||
*/
|
||||
public function getClassMap()
|
||||
{
|
||||
return $this->classMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $classMap Class to filename map
|
||||
* @psalm-param array<string, string> $classMap
|
||||
*
|
||||
* @return void
|
||||
* @param array $classMap Class to filename map
|
||||
*/
|
||||
public function addClassMap(array $classMap)
|
||||
{
|
||||
|
@ -180,10 +112,8 @@ class ClassLoader
|
|||
* appending or prepending to the ones previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param string[]|string $paths The PSR-0 root directories
|
||||
* @param array|string $paths The PSR-0 root directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function add($prefix, $paths, $prepend = false)
|
||||
{
|
||||
|
@ -227,12 +157,10 @@ class ClassLoader
|
|||
* appending or prepending to the ones previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param string[]|string $paths The PSR-4 base directories
|
||||
* @param array|string $paths The PSR-4 base directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addPsr4($prefix, $paths, $prepend = false)
|
||||
{
|
||||
|
@ -277,9 +205,7 @@ class ClassLoader
|
|||
* replacing any others previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param string[]|string $paths The PSR-0 base directories
|
||||
*
|
||||
* @return void
|
||||
* @param array|string $paths The PSR-0 base directories
|
||||
*/
|
||||
public function set($prefix, $paths)
|
||||
{
|
||||
|
@ -295,11 +221,9 @@ class ClassLoader
|
|||
* replacing any others previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param string[]|string $paths The PSR-4 base directories
|
||||
* @param array|string $paths The PSR-4 base directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setPsr4($prefix, $paths)
|
||||
{
|
||||
|
@ -319,8 +243,6 @@ class ClassLoader
|
|||
* Turns on searching the include path for class files.
|
||||
*
|
||||
* @param bool $useIncludePath
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUseIncludePath($useIncludePath)
|
||||
{
|
||||
|
@ -343,8 +265,6 @@ class ClassLoader
|
|||
* that have not been registered with the class map.
|
||||
*
|
||||
* @param bool $classMapAuthoritative
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||
{
|
||||
|
@ -365,8 +285,6 @@ class ClassLoader
|
|||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||
*
|
||||
* @param string|null $apcuPrefix
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setApcuPrefix($apcuPrefix)
|
||||
{
|
||||
|
@ -387,18 +305,14 @@ class ClassLoader
|
|||
* Registers this instance as an autoloader.
|
||||
*
|
||||
* @param bool $prepend Whether to prepend the autoloader or not
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register($prepend = false)
|
||||
{
|
||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||
|
||||
if (null === $this->vendorDir) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($prepend) {
|
||||
//no-op
|
||||
} elseif ($prepend) {
|
||||
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
||||
} else {
|
||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||
|
@ -408,8 +322,6 @@ class ClassLoader
|
|||
|
||||
/**
|
||||
* Unregisters this instance as an autoloader.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function unregister()
|
||||
{
|
||||
|
@ -424,18 +336,15 @@ class ClassLoader
|
|||
* Loads the given class or interface.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
* @return true|null True if loaded, null otherwise
|
||||
* @return bool|null True if loaded, null otherwise
|
||||
*/
|
||||
public function loadClass($class)
|
||||
{
|
||||
if ($file = $this->findFile($class)) {
|
||||
$includeFile = self::$includeFile;
|
||||
$includeFile($file);
|
||||
includeFile($file);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -490,11 +399,6 @@ class ClassLoader
|
|||
return self::$registeredLoaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $class
|
||||
* @param string $ext
|
||||
* @return string|false
|
||||
*/
|
||||
private function findFileWithExtension($class, $ext)
|
||||
{
|
||||
// PSR-4 lookup
|
||||
|
@ -560,26 +464,14 @@ class ClassLoader
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
private static function initializeIncludeClosure()
|
||||
{
|
||||
if (self::$includeFile !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope isolated include.
|
||||
*
|
||||
* Prevents access to $this/self from included files.
|
||||
*
|
||||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
self::$includeFile = \Closure::bind(static function($file) {
|
||||
function includeFile($file)
|
||||
{
|
||||
include $file;
|
||||
}, null, null);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,29 +18,459 @@ use Composer\Semver\VersionParser;
|
|||
/**
|
||||
* This class is copied in every Composer installed project and available to all
|
||||
*
|
||||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
||||
*
|
||||
* To require its presence, you can require `composer-runtime-api ^2.0`
|
||||
*
|
||||
* @final
|
||||
* To require it's presence, you can require `composer-runtime-api ^2.0`
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
private static $installed = array (
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'a37eab2610a0a2bcb655258781c1c7e925dc94c0',
|
||||
'name' => '__root__',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'__root__' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'a37eab2610a0a2bcb655258781c1c7e925dc94c0',
|
||||
),
|
||||
'beberlei/assert' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.3.2',
|
||||
'version' => '3.3.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cb70015c04be1baee6f5f5c953703347c0ac1655',
|
||||
),
|
||||
'chillerlan/php-qrcode' =>
|
||||
array (
|
||||
'pretty_version' => '4.3.4',
|
||||
'version' => '4.3.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d',
|
||||
),
|
||||
'chillerlan/php-settings-container' =>
|
||||
array (
|
||||
'pretty_version' => '2.1.4',
|
||||
'version' => '2.1.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
|
||||
),
|
||||
'doctrine/instantiator' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.1',
|
||||
'version' => '1.4.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc',
|
||||
),
|
||||
'j4mie/idiorm' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
0 => '9999999-dev',
|
||||
),
|
||||
'reference' => 'efc8ea06698f53e2c479c7696f2b154c47c3a3cb',
|
||||
),
|
||||
'jonahgeorge/jaeger-client-php' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.4.4',
|
||||
'version' => '1.4.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3173d9c68ad8cea16058f25337982b00cc3d1c2b',
|
||||
),
|
||||
'mervick/material-design-icons' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '635435c8d3df3a6da3241648caf8a65d1c07cc1a',
|
||||
),
|
||||
'myclabs/deep-copy' =>
|
||||
array (
|
||||
'pretty_version' => '1.11.0',
|
||||
'version' => '1.11.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614',
|
||||
),
|
||||
'nikic/php-parser' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.14.0',
|
||||
'version' => '4.14.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '34bea19b6e03d8153165d8f30bba4c3be86184c1',
|
||||
),
|
||||
'opentracing/opentracing' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cd60bd1fb2a25280600bc74c7f9e0c13881a9116',
|
||||
),
|
||||
'packaged/thrift' =>
|
||||
array (
|
||||
'pretty_version' => '0.13.01',
|
||||
'version' => '0.13.01.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e3dbcfb79e319971d64264ffe9c340590cc8a228',
|
||||
),
|
||||
'paragonie/constant_time_encoding' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.6.3',
|
||||
'version' => '2.6.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
|
||||
),
|
||||
'phar-io/manifest' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.3',
|
||||
'version' => '2.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '97803eca37d319dfa7826cc2437fc020857acb53',
|
||||
),
|
||||
'phar-io/version' =>
|
||||
array (
|
||||
'pretty_version' => '3.2.1',
|
||||
'version' => '3.2.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
|
||||
),
|
||||
'phpdocumentor/reflection-common' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
|
||||
),
|
||||
'phpdocumentor/reflection-docblock' =>
|
||||
array (
|
||||
'pretty_version' => '5.3.0',
|
||||
'version' => '5.3.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170',
|
||||
),
|
||||
'phpdocumentor/type-resolver' =>
|
||||
array (
|
||||
'pretty_version' => '1.6.1',
|
||||
'version' => '1.6.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '77a32518733312af16a44300404e945338981de3',
|
||||
),
|
||||
'phpspec/prophecy' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.15.0',
|
||||
'version' => '1.15.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'bbcd7380b0ebf3961ee21409db7b38bc31d69a13',
|
||||
),
|
||||
'phpstan/phpstan' =>
|
||||
array (
|
||||
'pretty_version' => '1.10.3',
|
||||
'version' => '1.10.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5419375b5891add97dc74be71e6c1c34baaddf64',
|
||||
),
|
||||
'phpunit/php-code-coverage' =>
|
||||
array (
|
||||
'pretty_version' => '9.2.15',
|
||||
'version' => '9.2.15.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '2e9da11878c4202f97915c1cb4bb1ca318a63f5f',
|
||||
),
|
||||
'phpunit/php-file-iterator' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.6',
|
||||
'version' => '3.0.6.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf',
|
||||
),
|
||||
'phpunit/php-invoker' =>
|
||||
array (
|
||||
'pretty_version' => '3.1.1',
|
||||
'version' => '3.1.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
|
||||
),
|
||||
'phpunit/php-text-template' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.4',
|
||||
'version' => '2.0.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
|
||||
),
|
||||
'phpunit/php-timer' =>
|
||||
array (
|
||||
'pretty_version' => '5.0.3',
|
||||
'version' => '5.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
|
||||
),
|
||||
'phpunit/phpunit' =>
|
||||
array (
|
||||
'pretty_version' => '9.5.16',
|
||||
'version' => '9.5.16.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5ff8c545a50226c569310a35f4fa89d79f1ddfdc',
|
||||
),
|
||||
'psr/cache' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf',
|
||||
),
|
||||
'psr/log' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',
|
||||
),
|
||||
'sebastian/cli-parser' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
|
||||
),
|
||||
'sebastian/code-unit' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.8',
|
||||
'version' => '1.0.8.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
|
||||
),
|
||||
'sebastian/code-unit-reverse-lookup' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.3',
|
||||
'version' => '2.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
|
||||
),
|
||||
'sebastian/comparator' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.6',
|
||||
'version' => '4.0.6.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
|
||||
),
|
||||
'sebastian/complexity' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.2',
|
||||
'version' => '2.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
|
||||
),
|
||||
'sebastian/diff' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
|
||||
),
|
||||
'sebastian/environment' =>
|
||||
array (
|
||||
'pretty_version' => '5.1.4',
|
||||
'version' => '5.1.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1b5dff7bb151a4db11d49d90e5408e4e938270f7',
|
||||
),
|
||||
'sebastian/exporter' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '65e8b7db476c5dd267e65eea9cab77584d3cfff9',
|
||||
),
|
||||
'sebastian/global-state' =>
|
||||
array (
|
||||
'pretty_version' => '5.0.5',
|
||||
'version' => '5.0.5.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
|
||||
),
|
||||
'sebastian/lines-of-code' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.3',
|
||||
'version' => '1.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
|
||||
),
|
||||
'sebastian/object-enumerator' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
|
||||
),
|
||||
'sebastian/object-reflector' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.4',
|
||||
'version' => '2.0.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
|
||||
),
|
||||
'sebastian/recursion-context' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
|
||||
),
|
||||
'sebastian/resource-operations' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.3',
|
||||
'version' => '3.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
|
||||
),
|
||||
'sebastian/type' =>
|
||||
array (
|
||||
'pretty_version' => '2.3.4',
|
||||
'version' => '2.3.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'b8cd8a1c753c90bc1a0f5372170e3e489136f914',
|
||||
),
|
||||
'sebastian/version' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.2',
|
||||
'version' => '3.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
|
||||
),
|
||||
'spomky-labs/otphp' =>
|
||||
array (
|
||||
'pretty_version' => 'v10.0.3',
|
||||
'version' => '10.0.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '9784d9f7c790eed26e102d6c78f12c754036c366',
|
||||
),
|
||||
'thecodingmachine/safe' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.2',
|
||||
'version' => '2.2.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '440284f9592c9df402832452a6871a8b3c48d97e',
|
||||
),
|
||||
'theseer/tokenizer' =>
|
||||
array (
|
||||
'pretty_version' => '1.2.1',
|
||||
'version' => '1.2.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e',
|
||||
),
|
||||
'webmozart/assert' =>
|
||||
array (
|
||||
'pretty_version' => '1.11.0',
|
||||
'version' => '1.11.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991',
|
||||
),
|
||||
),
|
||||
);
|
||||
private static $canGetVendors;
|
||||
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||
*/
|
||||
private static $installedByVendor = array();
|
||||
|
||||
/**
|
||||
|
@ -56,6 +486,7 @@ class InstalledVersions
|
|||
$packages[] = array_keys($installed['versions']);
|
||||
}
|
||||
|
||||
|
||||
if (1 === \count($packages)) {
|
||||
return $packages[0];
|
||||
}
|
||||
|
@ -63,42 +494,19 @@ class InstalledVersions
|
|||
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all package names with a specific type e.g. 'library'
|
||||
*
|
||||
* @param string $type
|
||||
* @return string[]
|
||||
* @psalm-return list<string>
|
||||
*/
|
||||
public static function getInstalledPackagesByType($type)
|
||||
{
|
||||
$packagesByType = array();
|
||||
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
foreach ($installed['versions'] as $name => $package) {
|
||||
if (isset($package['type']) && $package['type'] === $type) {
|
||||
$packagesByType[] = $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $packagesByType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given package is installed
|
||||
*
|
||||
* This also returns true if the package name is provided or replaced by another package
|
||||
*
|
||||
* @param string $packageName
|
||||
* @param bool $includeDevRequirements
|
||||
* @return bool
|
||||
*/
|
||||
public static function isInstalled($packageName, $includeDevRequirements = true)
|
||||
public static function isInstalled($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (isset($installed['versions'][$packageName])) {
|
||||
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -115,6 +523,7 @@ class InstalledVersions
|
|||
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
||||
* @param string $packageName
|
||||
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
||||
|
@ -224,26 +633,9 @@ class InstalledVersions
|
|||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
||||
*/
|
||||
public static function getInstallPath($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
|
||||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}
|
||||
*/
|
||||
public static function getRootPackage()
|
||||
{
|
||||
|
@ -255,38 +647,14 @@ class InstalledVersions
|
|||
/**
|
||||
* Returns the raw installed.php data for custom implementations
|
||||
*
|
||||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
||||
* @return array[]
|
||||
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
|
||||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>}
|
||||
*/
|
||||
public static function getRawData()
|
||||
{
|
||||
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
||||
|
||||
if (null === self::$installed) {
|
||||
// only require the installed.php file if this file is loaded from its dumped location,
|
||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||
self::$installed = include __DIR__ . '/installed.php';
|
||||
} else {
|
||||
self::$installed = array();
|
||||
}
|
||||
}
|
||||
|
||||
return self::$installed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
||||
*
|
||||
* @return array[]
|
||||
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||
*/
|
||||
public static function getAllRawData()
|
||||
{
|
||||
return self::getInstalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Lets you reload the static array from another file
|
||||
*
|
||||
|
@ -303,7 +671,7 @@ class InstalledVersions
|
|||
* @param array[] $data A vendor/composer/installed.php data set
|
||||
* @return void
|
||||
*
|
||||
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
|
||||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>} $data
|
||||
*/
|
||||
public static function reload($data)
|
||||
{
|
||||
|
@ -313,7 +681,6 @@ class InstalledVersions
|
|||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||
*/
|
||||
private static function getInstalled()
|
||||
{
|
||||
|
@ -324,27 +691,16 @@ class InstalledVersions
|
|||
$installed = array();
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
// @phpstan-ignore-next-line
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (null === self::$installed) {
|
||||
// only require the installed.php file if this file is loaded from its dumped location,
|
||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||
self::$installed = require __DIR__ . '/installed.php';
|
||||
} else {
|
||||
self::$installed = array();
|
||||
}
|
||||
}
|
||||
$installed[] = self::$installed;
|
||||
|
||||
return $installed;
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
Copyright (c) Nils Adermann, Jordi Boggiano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
@ -18,4 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// autoload_classmap.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
|
|
|
@ -2,10 +2,12 @@
|
|||
|
||||
// autoload_files.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php',
|
||||
'ec07570ca5a812141189b1fa81503674' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
|
||||
'a4ecaeafb8cfb009ad0e052c90355e98' => $vendorDir . '/beberlei/assert/lib/Assert/functions.php',
|
||||
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
|
||||
'51fcf4e06c07cc00c920b44bcd900e7a' => $vendorDir . '/thecodingmachine/safe/deprecated/apc.php',
|
||||
|
@ -95,6 +97,7 @@ return array(
|
|||
'4af1dca6db8c527c6eed27bff85ff0e5' => $vendorDir . '/thecodingmachine/safe/generated/yaz.php',
|
||||
'fe43ca06499ac37bc2dedd823af71eb5' => $vendorDir . '/thecodingmachine/safe/generated/zip.php',
|
||||
'356736db98a6834f0a886b8d509b0ecd' => $vendorDir . '/thecodingmachine/safe/generated/zlib.php',
|
||||
'9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php',
|
||||
'ec07570ca5a812141189b1fa81503674' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
|
||||
'ff1b7935a93a4a9517db3ebe0533892a' => $vendorDir . '/opentracing/opentracing/src/OpenTracing/Tags.php',
|
||||
'0db36546c71c357f5ee70c39bb03966f' => $vendorDir . '/opentracing/opentracing/src/OpenTracing/Formats.php',
|
||||
'822502b10d2c1dae82956ef999e8b4be' => $vendorDir . '/jonahgeorge/jaeger-client-php/src/Jaeger/Constants.php',
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// autoload_namespaces.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// autoload_psr4.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
|
@ -10,10 +10,15 @@ return array(
|
|||
'chillerlan\\Settings\\' => array($vendorDir . '/chillerlan/php-settings-container/src'),
|
||||
'chillerlan\\QRCode\\' => array($vendorDir . '/chillerlan/php-qrcode/src'),
|
||||
'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),
|
||||
'Thrift\\' => array($vendorDir . '/packaged/thrift/src'),
|
||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
|
||||
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
||||
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src/Prophecy'),
|
||||
'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
|
||||
'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
|
||||
'OpenTracing\\' => array($vendorDir . '/opentracing/opentracing/src/OpenTracing'),
|
||||
'OTPHP\\' => array($vendorDir . '/spomky-labs/otphp/src'),
|
||||
'Jaeger\\' => array($vendorDir . '/jonahgeorge/jaeger-client-php/src/Jaeger'),
|
||||
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
|
||||
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
|
||||
'Assert\\' => array($vendorDir . '/beberlei/assert/lib/Assert'),
|
||||
|
|
|
@ -23,26 +23,51 @@ class ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056
|
|||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056::getInitializer($loader));
|
||||
} else {
|
||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
$loader->set($namespace, $path);
|
||||
}
|
||||
|
||||
$map = require __DIR__ . '/autoload_psr4.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
$loader->setPsr4($namespace, $path);
|
||||
}
|
||||
|
||||
$classMap = require __DIR__ . '/autoload_classmap.php';
|
||||
if ($classMap) {
|
||||
$loader->addClassMap($classMap);
|
||||
}
|
||||
}
|
||||
|
||||
$loader->register(true);
|
||||
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056::$files;
|
||||
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
||||
require $file;
|
||||
if ($useStaticLoader) {
|
||||
$includeFiles = Composer\Autoload\ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056::$files;
|
||||
} else {
|
||||
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||
}
|
||||
}, null, null);
|
||||
foreach ($filesToLoad as $fileIdentifier => $file) {
|
||||
$requireFile($fileIdentifier, $file);
|
||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||
composerRequire19fc2ff1c0f9a92279c7979386bb2056($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
|
||||
function composerRequire19fc2ff1c0f9a92279c7979386bb2056($fileIdentifier, $file)
|
||||
{
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
require $file;
|
||||
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@ namespace Composer\Autoload;
|
|||
class ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056
|
||||
{
|
||||
public static $files = array (
|
||||
'9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php',
|
||||
'ec07570ca5a812141189b1fa81503674' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
|
||||
'a4ecaeafb8cfb009ad0e052c90355e98' => __DIR__ . '/..' . '/beberlei/assert/lib/Assert/functions.php',
|
||||
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
|
||||
'51fcf4e06c07cc00c920b44bcd900e7a' => __DIR__ . '/..' . '/thecodingmachine/safe/deprecated/apc.php',
|
||||
|
@ -96,8 +98,9 @@ class ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056
|
|||
'4af1dca6db8c527c6eed27bff85ff0e5' => __DIR__ . '/..' . '/thecodingmachine/safe/generated/yaz.php',
|
||||
'fe43ca06499ac37bc2dedd823af71eb5' => __DIR__ . '/..' . '/thecodingmachine/safe/generated/zip.php',
|
||||
'356736db98a6834f0a886b8d509b0ecd' => __DIR__ . '/..' . '/thecodingmachine/safe/generated/zlib.php',
|
||||
'9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php',
|
||||
'ec07570ca5a812141189b1fa81503674' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
|
||||
'ff1b7935a93a4a9517db3ebe0533892a' => __DIR__ . '/..' . '/opentracing/opentracing/src/OpenTracing/Tags.php',
|
||||
'0db36546c71c357f5ee70c39bb03966f' => __DIR__ . '/..' . '/opentracing/opentracing/src/OpenTracing/Formats.php',
|
||||
'822502b10d2c1dae82956ef999e8b4be' => __DIR__ . '/..' . '/jonahgeorge/jaeger-client-php/src/Jaeger/Constants.php',
|
||||
);
|
||||
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
|
@ -114,16 +117,27 @@ class ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056
|
|||
array (
|
||||
'Webmozart\\Assert\\' => 17,
|
||||
),
|
||||
'T' =>
|
||||
array (
|
||||
'Thrift\\' => 7,
|
||||
),
|
||||
'P' =>
|
||||
array (
|
||||
'Psr\\Log\\' => 8,
|
||||
'Psr\\Cache\\' => 10,
|
||||
'Prophecy\\' => 9,
|
||||
'PhpParser\\' => 10,
|
||||
'ParagonIE\\ConstantTime\\' => 23,
|
||||
),
|
||||
'O' =>
|
||||
array (
|
||||
'OpenTracing\\' => 12,
|
||||
'OTPHP\\' => 6,
|
||||
),
|
||||
'J' =>
|
||||
array (
|
||||
'Jaeger\\' => 7,
|
||||
),
|
||||
'D' =>
|
||||
array (
|
||||
'Doctrine\\Instantiator\\' => 22,
|
||||
|
@ -154,6 +168,18 @@ class ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056
|
|||
array (
|
||||
0 => __DIR__ . '/..' . '/webmozart/assert/src',
|
||||
),
|
||||
'Thrift\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/packaged/thrift/src',
|
||||
),
|
||||
'Psr\\Log\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/psr/log/src',
|
||||
),
|
||||
'Psr\\Cache\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/psr/cache/src',
|
||||
),
|
||||
'Prophecy\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy',
|
||||
|
@ -166,10 +192,18 @@ class ComposerStaticInit19fc2ff1c0f9a92279c7979386bb2056
|
|||
array (
|
||||
0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src',
|
||||
),
|
||||
'OpenTracing\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/opentracing/opentracing/src/OpenTracing',
|
||||
),
|
||||
'OTPHP\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/spomky-labs/otphp/src',
|
||||
),
|
||||
'Jaeger\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/jonahgeorge/jaeger-client-php/src/Jaeger',
|
||||
),
|
||||
'Doctrine\\Instantiator\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator',
|
||||
|
|
|
@ -359,6 +359,77 @@
|
|||
},
|
||||
"install-path": "../j4mie/idiorm"
|
||||
},
|
||||
{
|
||||
"name": "jonahgeorge/jaeger-client-php",
|
||||
"version": "v1.4.4",
|
||||
"version_normalized": "1.4.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jonahgeorge/jaeger-client-php.git",
|
||||
"reference": "3173d9c68ad8cea16058f25337982b00cc3d1c2b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jonahgeorge/jaeger-client-php/zipball/3173d9c68ad8cea16058f25337982b00cc3d1c2b",
|
||||
"reference": "3173d9c68ad8cea16058f25337982b00cc3d1c2b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-sockets": "*",
|
||||
"opentracing/opentracing": "^1.0",
|
||||
"packaged/thrift": "^0.13",
|
||||
"php": "^7.1 || ^8.0 || ^8.1",
|
||||
"psr/cache": "^1.0 || ^2.0 || ^3.0",
|
||||
"psr/log": "^1.0 || ^2.0 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"cache/array-adapter": "^1.0",
|
||||
"phpunit/phpunit": "^7 || ^8 || ^9",
|
||||
"squizlabs/php_codesniffer": "3.*",
|
||||
"symfony/polyfill-php73": "^1.10"
|
||||
},
|
||||
"time": "2023-01-31T13:40:20+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"./src/Jaeger/Constants.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Jaeger\\": "src/Jaeger/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jonah George",
|
||||
"homepage": "http://twitter.com/jonahgeorge"
|
||||
},
|
||||
{
|
||||
"name": "José Carlos Chávez",
|
||||
"email": "jcchavezs@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Contributors",
|
||||
"homepage": "https://github.com/jonahgeorge/jaeger-client-php/graphs/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Jaeger Bindings for PHP OpenTracing API",
|
||||
"keywords": [
|
||||
"jaeger",
|
||||
"opentracing",
|
||||
"trace",
|
||||
"tracing"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/jonahgeorge/jaeger-client-php/issues",
|
||||
"source": "https://github.com/jonahgeorge/jaeger-client-php/tree/v1.4.4"
|
||||
},
|
||||
"install-path": "../jonahgeorge/jaeger-client-php"
|
||||
},
|
||||
{
|
||||
"name": "mervick/material-design-icons",
|
||||
"version": "2.2.0",
|
||||
|
@ -526,6 +597,100 @@
|
|||
},
|
||||
"install-path": "../nikic/php-parser"
|
||||
},
|
||||
{
|
||||
"name": "opentracing/opentracing",
|
||||
"version": "1.0.2",
|
||||
"version_normalized": "1.0.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/opentracing/opentracing-php.git",
|
||||
"reference": "cd60bd1fb2a25280600bc74c7f9e0c13881a9116"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/opentracing/opentracing-php/zipball/cd60bd1fb2a25280600bc74c7f9e0c13881a9116",
|
||||
"reference": "cd60bd1fb2a25280600bc74c7f9e0c13881a9116",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "~0.12",
|
||||
"phpunit/phpunit": "^7.0 || ^9.0",
|
||||
"squizlabs/php_codesniffer": "3.*"
|
||||
},
|
||||
"time": "2022-01-27T19:59:21+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/OpenTracing/Tags.php",
|
||||
"src/OpenTracing/Formats.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"OpenTracing\\": "src/OpenTracing/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "José Carlos Chávez",
|
||||
"email": "jcchavezs@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "OpenTracing API for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/opentracing/opentracing-php/issues",
|
||||
"source": "https://github.com/opentracing/opentracing-php/tree/1.0.2"
|
||||
},
|
||||
"install-path": "../opentracing/opentracing"
|
||||
},
|
||||
{
|
||||
"name": "packaged/thrift",
|
||||
"version": "0.13.01",
|
||||
"version_normalized": "0.13.01.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/packaged/thrift.git",
|
||||
"reference": "e3dbcfb79e319971d64264ffe9c340590cc8a228"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/packaged/thrift/zipball/e3dbcfb79e319971d64264ffe9c340590cc8a228",
|
||||
"reference": "e3dbcfb79e319971d64264ffe9c340590cc8a228",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.5 || ^7.0 || ^8.0"
|
||||
},
|
||||
"time": "2021-01-25T13:32:28+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Thrift\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"description": "Apache Thrift",
|
||||
"homepage": "http://thrift.apache.org/",
|
||||
"keywords": [
|
||||
"apache",
|
||||
"thrift"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/packaged/thrift/issues",
|
||||
"source": "https://github.com/packaged/thrift/tree/0.13.01"
|
||||
},
|
||||
"install-path": "../packaged/thrift"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/constant_time_encoding",
|
||||
"version": "v2.6.3",
|
||||
|
@ -1453,6 +1618,111 @@
|
|||
],
|
||||
"install-path": "../phpunit/phpunit"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
"version": "3.0.0",
|
||||
"version_normalized": "3.0.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/cache.git",
|
||||
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
|
||||
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.0.0"
|
||||
},
|
||||
"time": "2021-02-03T23:26:27+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Cache\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for caching libraries",
|
||||
"keywords": [
|
||||
"cache",
|
||||
"psr",
|
||||
"psr-6"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/cache/tree/3.0.0"
|
||||
},
|
||||
"install-path": "../psr/cache"
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "3.0.0",
|
||||
"version_normalized": "3.0.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.0.0"
|
||||
},
|
||||
"time": "2021-07-14T16:46:02+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.x-dev"
|
||||
}
|
||||
},
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Log\\": "src"
|
||||
}
|
||||
},
|
||||
"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/3.0.0"
|
||||
},
|
||||
"install-path": "../psr/log"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
"version": "1.0.1",
|
||||
|
|
|
@ -1,403 +1,448 @@
|
|||
<?php return array (
|
||||
'root' => array(
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'a37eab2610a0a2bcb655258781c1c7e925dc94c0',
|
||||
'name' => '__root__',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'__root__' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'b7a6c948d078a59739f14de8454e0e7237d0722e',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'dev' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'versions' => array(
|
||||
'__root__' => array(
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'b7a6c948d078a59739f14de8454e0e7237d0722e',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'reference' => 'a37eab2610a0a2bcb655258781c1c7e925dc94c0',
|
||||
),
|
||||
'beberlei/assert' => array(
|
||||
'beberlei/assert' =>
|
||||
array (
|
||||
'pretty_version' => 'v3.3.2',
|
||||
'version' => '3.3.2.0',
|
||||
'reference' => 'cb70015c04be1baee6f5f5c953703347c0ac1655',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../beberlei/assert',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'chillerlan/php-qrcode' => array(
|
||||
'reference' => 'cb70015c04be1baee6f5f5c953703347c0ac1655',
|
||||
),
|
||||
'chillerlan/php-qrcode' =>
|
||||
array (
|
||||
'pretty_version' => '4.3.4',
|
||||
'version' => '4.3.4.0',
|
||||
'reference' => '2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../chillerlan/php-qrcode',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'chillerlan/php-settings-container' => array(
|
||||
'reference' => '2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d',
|
||||
),
|
||||
'chillerlan/php-settings-container' =>
|
||||
array (
|
||||
'pretty_version' => '2.1.4',
|
||||
'version' => '2.1.4.0',
|
||||
'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../chillerlan/php-settings-container',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'doctrine/instantiator' => array(
|
||||
'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
|
||||
),
|
||||
'doctrine/instantiator' =>
|
||||
array (
|
||||
'pretty_version' => '1.4.1',
|
||||
'version' => '1.4.1.0',
|
||||
'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../doctrine/instantiator',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'j4mie/idiorm' => array(
|
||||
'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc',
|
||||
),
|
||||
'j4mie/idiorm' =>
|
||||
array (
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'efc8ea06698f53e2c479c7696f2b154c47c3a3cb',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../j4mie/idiorm',
|
||||
'aliases' => array(
|
||||
'aliases' =>
|
||||
array (
|
||||
0 => '9999999-dev',
|
||||
),
|
||||
'dev_requirement' => false,
|
||||
'reference' => 'efc8ea06698f53e2c479c7696f2b154c47c3a3cb',
|
||||
),
|
||||
'mervick/material-design-icons' => array(
|
||||
'jonahgeorge/jaeger-client-php' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.4.4',
|
||||
'version' => '1.4.4.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '3173d9c68ad8cea16058f25337982b00cc3d1c2b',
|
||||
),
|
||||
'mervick/material-design-icons' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'reference' => '635435c8d3df3a6da3241648caf8a65d1c07cc1a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../mervick/material-design-icons',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'myclabs/deep-copy' => array(
|
||||
'reference' => '635435c8d3df3a6da3241648caf8a65d1c07cc1a',
|
||||
),
|
||||
'myclabs/deep-copy' =>
|
||||
array (
|
||||
'pretty_version' => '1.11.0',
|
||||
'version' => '1.11.0.0',
|
||||
'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../myclabs/deep-copy',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'nikic/php-parser' => array(
|
||||
'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614',
|
||||
),
|
||||
'nikic/php-parser' =>
|
||||
array (
|
||||
'pretty_version' => 'v4.14.0',
|
||||
'version' => '4.14.0.0',
|
||||
'reference' => '34bea19b6e03d8153165d8f30bba4c3be86184c1',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../nikic/php-parser',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'paragonie/constant_time_encoding' => array(
|
||||
'reference' => '34bea19b6e03d8153165d8f30bba4c3be86184c1',
|
||||
),
|
||||
'opentracing/opentracing' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'cd60bd1fb2a25280600bc74c7f9e0c13881a9116',
|
||||
),
|
||||
'packaged/thrift' =>
|
||||
array (
|
||||
'pretty_version' => '0.13.01',
|
||||
'version' => '0.13.01.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'e3dbcfb79e319971d64264ffe9c340590cc8a228',
|
||||
),
|
||||
'paragonie/constant_time_encoding' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.6.3',
|
||||
'version' => '2.6.3.0',
|
||||
'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phar-io/manifest' => array(
|
||||
'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
|
||||
),
|
||||
'phar-io/manifest' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.3',
|
||||
'version' => '2.0.3.0',
|
||||
'reference' => '97803eca37d319dfa7826cc2437fc020857acb53',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phar-io/manifest',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phar-io/version' => array(
|
||||
'reference' => '97803eca37d319dfa7826cc2437fc020857acb53',
|
||||
),
|
||||
'phar-io/version' =>
|
||||
array (
|
||||
'pretty_version' => '3.2.1',
|
||||
'version' => '3.2.1.0',
|
||||
'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phar-io/version',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpdocumentor/reflection-common' => array(
|
||||
'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
|
||||
),
|
||||
'phpdocumentor/reflection-common' =>
|
||||
array (
|
||||
'pretty_version' => '2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpdocumentor/reflection-common',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpdocumentor/reflection-docblock' => array(
|
||||
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
|
||||
),
|
||||
'phpdocumentor/reflection-docblock' =>
|
||||
array (
|
||||
'pretty_version' => '5.3.0',
|
||||
'version' => '5.3.0.0',
|
||||
'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpdocumentor/reflection-docblock',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpdocumentor/type-resolver' => array(
|
||||
'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170',
|
||||
),
|
||||
'phpdocumentor/type-resolver' =>
|
||||
array (
|
||||
'pretty_version' => '1.6.1',
|
||||
'version' => '1.6.1.0',
|
||||
'reference' => '77a32518733312af16a44300404e945338981de3',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpdocumentor/type-resolver',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpspec/prophecy' => array(
|
||||
'reference' => '77a32518733312af16a44300404e945338981de3',
|
||||
),
|
||||
'phpspec/prophecy' =>
|
||||
array (
|
||||
'pretty_version' => 'v1.15.0',
|
||||
'version' => '1.15.0.0',
|
||||
'reference' => 'bbcd7380b0ebf3961ee21409db7b38bc31d69a13',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpspec/prophecy',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpstan/phpstan' => array(
|
||||
'reference' => 'bbcd7380b0ebf3961ee21409db7b38bc31d69a13',
|
||||
),
|
||||
'phpstan/phpstan' =>
|
||||
array (
|
||||
'pretty_version' => '1.10.3',
|
||||
'version' => '1.10.3.0',
|
||||
'reference' => '5419375b5891add97dc74be71e6c1c34baaddf64',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpstan/phpstan',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpunit/php-code-coverage' => array(
|
||||
'reference' => '5419375b5891add97dc74be71e6c1c34baaddf64',
|
||||
),
|
||||
'phpunit/php-code-coverage' =>
|
||||
array (
|
||||
'pretty_version' => '9.2.15',
|
||||
'version' => '9.2.15.0',
|
||||
'reference' => '2e9da11878c4202f97915c1cb4bb1ca318a63f5f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpunit/php-code-coverage',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpunit/php-file-iterator' => array(
|
||||
'reference' => '2e9da11878c4202f97915c1cb4bb1ca318a63f5f',
|
||||
),
|
||||
'phpunit/php-file-iterator' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.6',
|
||||
'version' => '3.0.6.0',
|
||||
'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpunit/php-file-iterator',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpunit/php-invoker' => array(
|
||||
'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf',
|
||||
),
|
||||
'phpunit/php-invoker' =>
|
||||
array (
|
||||
'pretty_version' => '3.1.1',
|
||||
'version' => '3.1.1.0',
|
||||
'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpunit/php-invoker',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpunit/php-text-template' => array(
|
||||
'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
|
||||
),
|
||||
'phpunit/php-text-template' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.4',
|
||||
'version' => '2.0.4.0',
|
||||
'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpunit/php-text-template',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpunit/php-timer' => array(
|
||||
'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
|
||||
),
|
||||
'phpunit/php-timer' =>
|
||||
array (
|
||||
'pretty_version' => '5.0.3',
|
||||
'version' => '5.0.3.0',
|
||||
'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpunit/php-timer',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'phpunit/phpunit' => array(
|
||||
'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
|
||||
),
|
||||
'phpunit/phpunit' =>
|
||||
array (
|
||||
'pretty_version' => '9.5.16',
|
||||
'version' => '9.5.16.0',
|
||||
'reference' => '5ff8c545a50226c569310a35f4fa89d79f1ddfdc',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpunit/phpunit',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/cli-parser' => array(
|
||||
'reference' => '5ff8c545a50226c569310a35f4fa89d79f1ddfdc',
|
||||
),
|
||||
'psr/cache' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf',
|
||||
),
|
||||
'psr/log' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',
|
||||
),
|
||||
'sebastian/cli-parser' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/cli-parser',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/code-unit' => array(
|
||||
'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
|
||||
),
|
||||
'sebastian/code-unit' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.8',
|
||||
'version' => '1.0.8.0',
|
||||
'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/code-unit',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/code-unit-reverse-lookup' => array(
|
||||
'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
|
||||
),
|
||||
'sebastian/code-unit-reverse-lookup' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.3',
|
||||
'version' => '2.0.3.0',
|
||||
'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/comparator' => array(
|
||||
'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
|
||||
),
|
||||
'sebastian/comparator' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.6',
|
||||
'version' => '4.0.6.0',
|
||||
'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/comparator',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/complexity' => array(
|
||||
'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
|
||||
),
|
||||
'sebastian/complexity' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.2',
|
||||
'version' => '2.0.2.0',
|
||||
'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/complexity',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/diff' => array(
|
||||
'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
|
||||
),
|
||||
'sebastian/diff' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/diff',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/environment' => array(
|
||||
'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
|
||||
),
|
||||
'sebastian/environment' =>
|
||||
array (
|
||||
'pretty_version' => '5.1.4',
|
||||
'version' => '5.1.4.0',
|
||||
'reference' => '1b5dff7bb151a4db11d49d90e5408e4e938270f7',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/environment',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/exporter' => array(
|
||||
'reference' => '1b5dff7bb151a4db11d49d90e5408e4e938270f7',
|
||||
),
|
||||
'sebastian/exporter' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'reference' => '65e8b7db476c5dd267e65eea9cab77584d3cfff9',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/exporter',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/global-state' => array(
|
||||
'reference' => '65e8b7db476c5dd267e65eea9cab77584d3cfff9',
|
||||
),
|
||||
'sebastian/global-state' =>
|
||||
array (
|
||||
'pretty_version' => '5.0.5',
|
||||
'version' => '5.0.5.0',
|
||||
'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/global-state',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/lines-of-code' => array(
|
||||
'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
|
||||
),
|
||||
'sebastian/lines-of-code' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.3',
|
||||
'version' => '1.0.3.0',
|
||||
'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/lines-of-code',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/object-enumerator' => array(
|
||||
'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
|
||||
),
|
||||
'sebastian/object-enumerator' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/object-enumerator',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/object-reflector' => array(
|
||||
'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
|
||||
),
|
||||
'sebastian/object-reflector' =>
|
||||
array (
|
||||
'pretty_version' => '2.0.4',
|
||||
'version' => '2.0.4.0',
|
||||
'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/object-reflector',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/recursion-context' => array(
|
||||
'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
|
||||
),
|
||||
'sebastian/recursion-context' =>
|
||||
array (
|
||||
'pretty_version' => '4.0.4',
|
||||
'version' => '4.0.4.0',
|
||||
'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/recursion-context',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/resource-operations' => array(
|
||||
'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
|
||||
),
|
||||
'sebastian/resource-operations' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.3',
|
||||
'version' => '3.0.3.0',
|
||||
'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/resource-operations',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/type' => array(
|
||||
'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
|
||||
),
|
||||
'sebastian/type' =>
|
||||
array (
|
||||
'pretty_version' => '2.3.4',
|
||||
'version' => '2.3.4.0',
|
||||
'reference' => 'b8cd8a1c753c90bc1a0f5372170e3e489136f914',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/type',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'sebastian/version' => array(
|
||||
'reference' => 'b8cd8a1c753c90bc1a0f5372170e3e489136f914',
|
||||
),
|
||||
'sebastian/version' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.2',
|
||||
'version' => '3.0.2.0',
|
||||
'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../sebastian/version',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'spomky-labs/otphp' => array(
|
||||
'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
|
||||
),
|
||||
'spomky-labs/otphp' =>
|
||||
array (
|
||||
'pretty_version' => 'v10.0.3',
|
||||
'version' => '10.0.3.0',
|
||||
'reference' => '9784d9f7c790eed26e102d6c78f12c754036c366',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../spomky-labs/otphp',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'thecodingmachine/safe' => array(
|
||||
'reference' => '9784d9f7c790eed26e102d6c78f12c754036c366',
|
||||
),
|
||||
'thecodingmachine/safe' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.2.2',
|
||||
'version' => '2.2.2.0',
|
||||
'reference' => '440284f9592c9df402832452a6871a8b3c48d97e',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../thecodingmachine/safe',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'theseer/tokenizer' => array(
|
||||
'reference' => '440284f9592c9df402832452a6871a8b3c48d97e',
|
||||
),
|
||||
'theseer/tokenizer' =>
|
||||
array (
|
||||
'pretty_version' => '1.2.1',
|
||||
'version' => '1.2.1.0',
|
||||
'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../theseer/tokenizer',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'webmozart/assert' => array(
|
||||
'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e',
|
||||
),
|
||||
'webmozart/assert' =>
|
||||
array (
|
||||
'pretty_version' => '1.11.0',
|
||||
'version' => '1.11.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../webmozart/assert',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.yml]
|
||||
indent_style = space
|
||||
indent_size = 2
|
|
@ -0,0 +1,44 @@
|
|||
name: Test
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
run:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
|
||||
name: PHP ${{ matrix.php-versions }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: xdebug
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composercache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer install \
|
||||
--no-interaction \
|
||||
--no-ansi \
|
||||
--no-progress
|
||||
|
||||
- name: Run lint
|
||||
run: composer lint
|
||||
|
||||
- name: Run test
|
||||
run: composer test
|
|
@ -0,0 +1,17 @@
|
|||
# Please do not use this ignore file to define platform specific files.
|
||||
#
|
||||
# For these purposes create a global .gitignore file, which is a list of rules
|
||||
# for ignoring files in every Git repository on your computer.
|
||||
#
|
||||
# https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
|
||||
|
||||
jaeger-idl
|
||||
vendor
|
||||
|
||||
composer.lock
|
||||
composer.phar
|
||||
|
||||
jaeger-client-php.iml
|
||||
|
||||
phpunit.xml
|
||||
phpcs.xml
|
|
@ -0,0 +1,3 @@
|
|||
# How to Contribute to Jaeger
|
||||
|
||||
We'd love your help!
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018 Jonah George, José Carlos Chávez
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,219 @@
|
|||
![Build Status](https://github.com/jonahgeorge/jaeger-client-php/workflows/Test/badge.svg) [![PHP version][packagist-img]][packagist]
|
||||
|
||||
# Jaeger Bindings for PHP OpenTracing API
|
||||
|
||||
This is a client-side library that can be used to instrument PHP apps for distributed trace collection,
|
||||
and to send those traces to Jaeger. See the [OpenTracing PHP API](https://github.com/opentracing/opentracing-php)
|
||||
for additional detail.
|
||||
|
||||
## Contributing and Developing
|
||||
|
||||
Please see [CONTRIBUTING.md](./CONTRIBUTING.md).
|
||||
|
||||
## Installation
|
||||
|
||||
Jaeger client can be installed via Composer:
|
||||
|
||||
```bash
|
||||
composer require jonahgeorge/jaeger-client-php
|
||||
```
|
||||
|
||||
## Getting Started
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
require_once 'vendor/autoload.php';
|
||||
|
||||
use Jaeger\Config;
|
||||
use OpenTracing\GlobalTracer;
|
||||
|
||||
$config = new Config(
|
||||
[
|
||||
'sampler' => [
|
||||
'type' => Jaeger\SAMPLER_TYPE_CONST,
|
||||
'param' => true,
|
||||
],
|
||||
'logging' => true,
|
||||
],
|
||||
'your-app-name'
|
||||
);
|
||||
$config->initializeTracer();
|
||||
|
||||
$tracer = GlobalTracer::get();
|
||||
|
||||
$scope = $tracer->startActiveSpan('TestSpan', []);
|
||||
$scope->close();
|
||||
|
||||
$tracer->flush();
|
||||
```
|
||||
|
||||
### Samplers
|
||||
|
||||
List of supported samplers, for more info about samplers, please read [Jaeger Sampling](https://www.jaegertracing.io/docs/1.9/sampling/) guide.
|
||||
|
||||
#### Const sampler
|
||||
This sampler either samples everything, or nothing.
|
||||
|
||||
##### Configuration
|
||||
```
|
||||
'sampler' => [
|
||||
'type' => Jaeger\SAMPLER_TYPE_CONST,
|
||||
'param' => true, // boolean wheter to trace or not
|
||||
],
|
||||
```
|
||||
|
||||
#### Probabilistic sampler
|
||||
This sampler samples request by given rate.
|
||||
|
||||
##### Configuration
|
||||
```
|
||||
'sampler' => [
|
||||
'type' => Jaeger\SAMPLER_TYPE_PROBABILISTIC,
|
||||
'param' => 0.5, // float [0.0, 1.0]
|
||||
],
|
||||
```
|
||||
|
||||
#### Rate limiting sampler
|
||||
Samples maximum specified number of traces (requests) per second.
|
||||
|
||||
##### Requirements
|
||||
* `psr/cache` PSR-6 cache component to store and retrieve sampler state between requests.
|
||||
Cache component is passed to `Jaeger\Config` trough its constructor.
|
||||
* `hrtime()` function, that can retrieve time in nanoseconds. You need either `php 7.3` or [PECL/hrtime](http://pecl.php.net/package/hrtime) extension.
|
||||
|
||||
##### Configuration
|
||||
```
|
||||
'sampler' => [
|
||||
'type' => Jaeger\SAMPLER_TYPE_RATE_LIMITING,
|
||||
'param' => 100 // integer maximum number of traces per second,
|
||||
'cache' => [
|
||||
'currentBalanceKey' => 'rate.currentBalance' // string
|
||||
'lastTickKey' => 'rate.lastTick' // string
|
||||
]
|
||||
],
|
||||
```
|
||||
## Dispatch mode
|
||||
|
||||
The library supports 3 ways of sending data to Jaeger Agent:
|
||||
|
||||
1. `Zipkin.thrift` over Compact protocol (socket - UDP) - default
|
||||
2. `Jaeger.thrift` over Binary protocol (socket - UDP)
|
||||
2. `Jaeger.thrift` over Binary protocol (HTTP)
|
||||
|
||||
If you want to enable "`Jaeger.thrift` over Binary protocol" one or other, than
|
||||
you need to set `dispatch_mode` config option or `JAEGER_DISPATCH_MODE` env
|
||||
variable.
|
||||
|
||||
Allowed values for `dispatch_mode` are:
|
||||
- `jaeger_over_binary_udp`
|
||||
- `jaeger_over_binary_http`
|
||||
- `zipkin_over_compact_udp`
|
||||
|
||||
There are 3 constants available, so it is better to use them:
|
||||
```php
|
||||
class Config
|
||||
{
|
||||
const ZIPKIN_OVER_COMPACT_UDP = "zipkin_over_compact_udp";
|
||||
const JAEGER_OVER_BINARY_UDP = "jaeger_over_binary_udp";
|
||||
const JAEGER_OVER_BINARY_HTTP = "jaeger_over_binary_http";
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
A possible config with custom `dispatch_mode` can look like this:
|
||||
```php
|
||||
// config.php
|
||||
|
||||
use Jaeger\Config;
|
||||
|
||||
return [
|
||||
'sampler' => [
|
||||
'type' => Jaeger\SAMPLER_TYPE_CONST,
|
||||
'param' => true,
|
||||
],
|
||||
'logging' => true,
|
||||
"tags" => [
|
||||
// process. prefix works only with JAEGER_OVER_HTTP, JAEGER_OVER_BINARY
|
||||
// otherwise it will be shown as simple global tag
|
||||
"process.process-tag-key-1" => "process-value-1", // all tags with `process.` prefix goes to process section
|
||||
"process.process-tag-key-2" => "process-value-2", // all tags with `process.` prefix goes to process section
|
||||
"global-tag-key-1" => "global-tag-value-1", // this tag will be appended to all spans
|
||||
"global-tag-key-2" => "global-tag-value-2", // this tag will be appended to all spans
|
||||
],
|
||||
"local_agent" => [
|
||||
"reporting_host" => "localhost",
|
||||
// You can override port by setting local_agent.reporting_port value
|
||||
"reporting_port" => 6832
|
||||
],
|
||||
// Different ways to send data to Jaeger. Config::ZIPKIN_OVER_COMPACT - default):
|
||||
'dispatch_mode' => Config::JAEGER_OVER_BINARY_UDP,
|
||||
];
|
||||
```
|
||||
The full example you can see at `examples` directory.
|
||||
|
||||
By default, for each `dispatch_mode` there is default `reporting_port` config value. Table with
|
||||
default values you can see below:
|
||||
|
||||
`dispatch_mode` | default `reporting_port`
|
||||
------------------------ | ----------------
|
||||
ZIPKIN_OVER_COMPACT_UDP | 5775
|
||||
JAEGER_OVER_BINARY_UDP | 6832
|
||||
JAEGER_OVER_BINARY_HTTP | 14268
|
||||
|
||||
## IPv6
|
||||
|
||||
In case you need IPv6 support you need to set `ip_version` Config variable.
|
||||
By default, IPv4 is used. There is an alias `Config::IP_VERSION` which you can use
|
||||
as an alternative to raw `ip_version`.
|
||||
|
||||
Example:
|
||||
|
||||
```php
|
||||
use Jaeger\Config;
|
||||
|
||||
$config = new Config(
|
||||
[
|
||||
"ip_version" => Config::IPV6, // <-- or use Config::IP_VERSION constant
|
||||
'logging' => true,
|
||||
'dispatch_mode' => Config::JAEGER_OVER_BINARY_UDP,
|
||||
],
|
||||
'serviceNameExample',
|
||||
);
|
||||
$config->initializeTracer();
|
||||
```
|
||||
or
|
||||
|
||||
```php
|
||||
use Jaeger\Config;
|
||||
|
||||
$config = new Config(
|
||||
[
|
||||
Config::IP_VERSION => Config::IPV6, // <--
|
||||
'logging' => true,
|
||||
'dispatch_mode' => Config::JAEGER_OVER_BINARY_UDP,
|
||||
],
|
||||
'serviceNameExample',
|
||||
);
|
||||
$config->initializeTracer();
|
||||
```
|
||||
|
||||
|
||||
## Testing
|
||||
|
||||
Tests are located in the `tests` directory. See [tests/README.md](./tests/README.md).
|
||||
|
||||
## Roadmap
|
||||
|
||||
- [Support Span baggage](https://github.com/jonahgeorge/jaeger-client-php/issues/5)
|
||||
- [Support Tracer metrics](https://github.com/jonahgeorge/jaeger-client-php/issues/12)
|
||||
- [Support Tracer error reporting](https://github.com/jonahgeorge/jaeger-client-php/issues/13)
|
||||
|
||||
## License
|
||||
|
||||
[MIT License](./LICENSE).
|
||||
|
||||
[ci-img]: https://travis-ci.org/jonahgeorge/jaeger-client-php.svg?branch=travis
|
||||
[ci]: https://travis-ci.org/jonahgeorge/jaeger-client-php
|
||||
[packagist-img]: https://badge.fury.io/ph/jonahgeorge%2Fjaeger-client-php.svg
|
||||
[packagist]: https://badge.fury.io/ph/jonahgeorge%2Fjaeger-client-php
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"name": "jonahgeorge/jaeger-client-php",
|
||||
"description": "Jaeger Bindings for PHP OpenTracing API",
|
||||
"keywords": [
|
||||
"jaeger",
|
||||
"opentracing",
|
||||
"trace",
|
||||
"tracing"
|
||||
],
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jonah George",
|
||||
"homepage": "http://twitter.com/jonahgeorge"
|
||||
},
|
||||
{
|
||||
"name": "José Carlos Chávez",
|
||||
"email": "jcchavezs@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Contributors",
|
||||
"homepage": "https://github.com/jonahgeorge/jaeger-client-php/graphs/contributors"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0 || ^8.1",
|
||||
"ext-sockets": "*",
|
||||
"opentracing/opentracing": "^1.0",
|
||||
"packaged/thrift": "^0.13",
|
||||
"psr/cache": "^1.0 || ^2.0 || ^3.0",
|
||||
"psr/log": "^1.0 || ^2.0 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^7 || ^8 || ^9",
|
||||
"squizlabs/php_codesniffer": "3.*",
|
||||
"cache/array-adapter": "^1.0",
|
||||
"symfony/polyfill-php73": "^1.10"
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Jaeger\\": "src/Jaeger/"
|
||||
},
|
||||
"files": [
|
||||
"./src/Jaeger/Constants.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"Jaeger\\Tests\\": "tests/Jaeger/"
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
"scripts": {
|
||||
"fix-lint": "./vendor/bin/phpcbf",
|
||||
"lint": "./vendor/bin/phpcs",
|
||||
"test": "./vendor/bin/phpunit"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
use Jaeger\Config;
|
||||
|
||||
return [
|
||||
'sampler' => [
|
||||
'type' => Jaeger\SAMPLER_TYPE_CONST,
|
||||
'param' => true,
|
||||
],
|
||||
'logging' => true,
|
||||
"tags" => [
|
||||
// process. prefix works only with JAEGER_OVER_HTTP, JAEGER_OVER_BINARY
|
||||
// otherwise it will be shown as simple global tag
|
||||
"process.process-tag-key-1" => "process-value-1", // all tags with `process.` prefix goes to process section
|
||||
"process.process-tag-key-2" => "process-value-2", // all tags with `process.` prefix goes to process section
|
||||
"global-tag-key-1" => "global-tag-value-1", // this tag will be appended to all spans
|
||||
"global-tag-key-2" => "global-tag-value-2", // this tag will be appended to all spans
|
||||
],
|
||||
"local_agent" => [
|
||||
"reporting_host" => "localhost",
|
||||
// You can override port by setting local_agent.reporting_port value
|
||||
// "reporting_port" => 6832
|
||||
],
|
||||
// Different ways to send data to Jaeger. Config::ZIPKIN_OVER_COMPACT - default):
|
||||
'dispatch_mode' => Config::JAEGER_OVER_BINARY_UDP,
|
||||
];
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
use Jaeger\Config;
|
||||
use OpenTracing\GlobalTracer;
|
||||
|
||||
$config = new Config(
|
||||
require_once __DIR__.'/config.php',
|
||||
'your-app-name'
|
||||
);
|
||||
|
||||
$config->initializeTracer();
|
||||
|
||||
$tracer = GlobalTracer::get();
|
||||
|
||||
$scope = $tracer->startActiveSpan('JaegerSpan', []);
|
||||
$scope->getSpan()->setTag("tag1", "value1");
|
||||
$scope->getSpan()->setTag("tag2", "value2");
|
||||
$scope->getSpan()->setTag("tag3", "value2");
|
||||
$scope->getSpan()->log([
|
||||
"key1" => "value1",
|
||||
"key2" => 2,
|
||||
"key3" => true
|
||||
]);
|
||||
|
||||
$scope->getSpan()->addBaggageItem("baggage-item1", "baggage-value1");
|
||||
$scope->getSpan()->addBaggageItem("baggage-item2", "baggage-value2");
|
||||
$scope->getSpan()->addBaggageItem("baggage-item3", "baggage-value3");
|
||||
|
||||
$nestedSpanScope = $tracer->startActiveSpan("Nested1");
|
||||
$nestedSpanScope->getSpan()->setTag("tag1", "value1");
|
||||
$nestedSpanScope->getSpan()->setTag("tag2", "value2");
|
||||
$nestedSpanScope->getSpan()->setTag("tag3", "value2");
|
||||
$nestedSpanScope->getSpan()->log([
|
||||
"key1" => "value1",
|
||||
"key2" => 2,
|
||||
"key3" => true
|
||||
]);
|
||||
|
||||
$nestedSpanScope->getSpan()->addBaggageItem("baggage-item1", "baggage-value1");
|
||||
$nestedSpanScope->getSpan()->addBaggageItem("baggage-item2", "baggage-value2");
|
||||
$nestedSpanScope->getSpan()->addBaggageItem("baggage-item3", "baggage-value3");
|
||||
|
||||
sleep(1);
|
||||
|
||||
$nestedSpanScope->close();
|
||||
|
||||
sleep(1);
|
||||
$scope->close();
|
||||
$tracer->flush();
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0"?>
|
||||
<ruleset name="Jaeger">
|
||||
|
||||
<!--
|
||||
The name attribute of the ruleset tag is displayed
|
||||
when running PHP_CodeSniffer with the -v command line
|
||||
argument. The description tag below is not displayed anywhere
|
||||
except in this file, so it can contain information for
|
||||
developers who may change this file in the future.
|
||||
-->
|
||||
<description>The coding standard for Jaeger Client</description>
|
||||
|
||||
<!-- Show sniff codes in all reports -->
|
||||
<arg value="s"/>
|
||||
|
||||
<!-- Use PSR-2 as a base -->
|
||||
<rule ref="PSR2"/>
|
||||
|
||||
<!-- Uncomment to use colors in progress or report -->
|
||||
<!-- arg name="colors" / -->
|
||||
|
||||
<!--
|
||||
If no files or directories are specified on the command line
|
||||
your custom standard can specify what files should be checked
|
||||
instead.
|
||||
Note that specifying any file or directory path
|
||||
on the command line will ignore all file tags.
|
||||
-->
|
||||
<file>src</file>
|
||||
|
||||
<!--
|
||||
You can hard-code ignore patterns directly into your
|
||||
custom standard so you don't have to specify the
|
||||
patterns on the command line.
|
||||
-->
|
||||
<exclude-pattern>src/Jaeger/Thrift/*</exclude-pattern>
|
||||
</ruleset>
|
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">src/Jaeger</directory>
|
||||
<exclude>
|
||||
<directory suffix="Interface.php">src/</directory>
|
||||
<file>src/Jaeger/Constants.php</file>
|
||||
<file>src/Jaeger/Thrift/Agent/AgentIf.php</file>
|
||||
<file>src/Jaeger/Thrift/Agent/AggregationValidatorIf.php</file>
|
||||
<file>src/Jaeger/Thrift/Agent/BaggageRestrictionManagerIf.php</file>
|
||||
<file>src/Jaeger/Thrift/Agent/DependencyIf.php</file>
|
||||
<file>src/Jaeger/Thrift/Agent/SamplingManagerIf.php</file>
|
||||
<file>src/Jaeger/Thrift/CollectorIf.php</file>
|
||||
<file>src/Jaeger/Thrift/Crossdock/TracedServiceIf.php</file>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="Jaeger Test Suite">
|
||||
<directory suffix=".php">tests/Jaeger</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<php>
|
||||
<ini name="date.timezone" value="UTC"/>
|
||||
<ini name="display_errors" value="on"/>
|
||||
<ini name="display_startup_errors" value="on"/>
|
||||
</php>
|
||||
|
||||
<logging>
|
||||
<log
|
||||
type="coverage-text"
|
||||
target="php://stdout"
|
||||
lowUpperBound="60"
|
||||
highLowerBound="90"/>
|
||||
|
||||
<log
|
||||
type="coverage-clover"
|
||||
target="build/coverage.xml"/>
|
||||
</logging>
|
||||
</phpunit>
|
|
@ -0,0 +1,27 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# checkout jaeger thrift files
|
||||
rm -rf jaeger-idl
|
||||
git clone https://github.com/jaegertracing/jaeger-idl
|
||||
|
||||
# define thrift cmd
|
||||
THRIFT="docker run -u $(id -u) -v '${PWD}:/data' thrift:0.11.0 thrift -o /data/jaeger-idl"
|
||||
THRIFT_CMD="${THRIFT} --gen php:psr4,oop"
|
||||
|
||||
# generate php files
|
||||
FILES=$(find jaeger-idl/thrift -type f -name \*.thrift)
|
||||
for f in ${FILES}; do
|
||||
echo "${THRIFT_CMD} "/data/${f}""
|
||||
eval $THRIFT_CMD "/data/${f}"
|
||||
done
|
||||
|
||||
# move generated files
|
||||
rm -rf src/Jaeger/Thrift
|
||||
mv jaeger-idl/gen-php/Jaeger/Thrift src/Jaeger/Thrift
|
||||
|
||||
# remove thrift files
|
||||
rm -rf jaeger-idl
|
27
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/AgentClient/HttpAgentClient.php
vendored
Normal file
27
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/AgentClient/HttpAgentClient.php
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\AgentClient;
|
||||
|
||||
class HttpAgentClient implements \Jaeger\Thrift\Agent\AgentIf
|
||||
{
|
||||
protected $input_ = null;
|
||||
protected $output_ = null;
|
||||
|
||||
protected $seqid_ = 0;
|
||||
|
||||
public function __construct($input, $output = null)
|
||||
{
|
||||
$this->input_ = $input;
|
||||
$this->output_ = $output ? $output : $input;
|
||||
}
|
||||
|
||||
public function emitZipkinBatch(array $spans)
|
||||
{
|
||||
}
|
||||
|
||||
public function emitBatch(\Jaeger\Thrift\Batch $batch)
|
||||
{
|
||||
$batch->write($this->output_);
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Codec;
|
||||
|
||||
use Jaeger\SpanContext;
|
||||
use OpenTracing\UnsupportedFormatException;
|
||||
|
||||
class BinaryCodec implements CodecInterface
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see \Jaeger\Tracer::inject
|
||||
*
|
||||
* @param SpanContext $spanContext
|
||||
* @param mixed $carrier
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function inject(SpanContext $spanContext, &$carrier)
|
||||
{
|
||||
throw new UnsupportedFormatException('Binary encoding not implemented');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see \Jaeger\Tracer::extract
|
||||
*
|
||||
* @param mixed $carrier
|
||||
* @return SpanContext|null
|
||||
*
|
||||
* @throws UnsupportedFormatException
|
||||
*/
|
||||
public function extract($carrier)
|
||||
{
|
||||
throw new UnsupportedFormatException('Binary encoding not implemented');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Codec;
|
||||
|
||||
use Jaeger\SpanContext;
|
||||
|
||||
interface CodecInterface
|
||||
{
|
||||
/**
|
||||
* Handle the logic behind injecting propagation scheme specific information into the carrier
|
||||
* (e.g. http request headers, amqp message headers, etc.).
|
||||
*
|
||||
* This method can modify the carrier.
|
||||
*
|
||||
* @see \Jaeger\Tracer::inject
|
||||
*
|
||||
* @param SpanContext $spanContext
|
||||
* @param mixed $carrier
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function inject(SpanContext $spanContext, &$carrier);
|
||||
|
||||
/**
|
||||
* Handle the logic behind extracting propagation-scheme specific information from carrier
|
||||
* (e.g. http request headers, amqp message headers, etc.).
|
||||
*
|
||||
* This method must not modify the carrier.
|
||||
*
|
||||
* @see \Jaeger\Tracer::extract
|
||||
*
|
||||
* @param mixed $carrier
|
||||
* @return SpanContext|null
|
||||
*/
|
||||
public function extract($carrier);
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Codec;
|
||||
|
||||
class CodecUtility
|
||||
{
|
||||
|
||||
/**
|
||||
* Incoming trace/span IDs are hex representations of 64-bit values. PHP
|
||||
* represents ints internally as signed 32- or 64-bit values, but base_convert
|
||||
* converts to string representations of arbitrarily large positive numbers.
|
||||
* This means at least half the incoming IDs will be larger than PHP_INT_MAX.
|
||||
*
|
||||
* Thrift, while building a binary representation of the IDs, performs bitwise
|
||||
* operations on the string values, implicitly casting to int and capping them
|
||||
* at PHP_INT_MAX. So, incoming IDs larger than PHP_INT_MAX will be serialized
|
||||
* and sent to the agent as PHP_INT_MAX, breaking trace/span correlation.
|
||||
*
|
||||
* This method therefore, on 64-bit architectures, splits the hex string into
|
||||
* high and low values, converts them separately to ints, and manually combines
|
||||
* them into a proper signed int. This int is then handled properly by the
|
||||
* Thrift package.
|
||||
*
|
||||
* On 32-bit architectures, it falls back to base_convert.
|
||||
*
|
||||
* @param string $hex
|
||||
* @return string|int
|
||||
*/
|
||||
public static function hexToInt64($hex)
|
||||
{
|
||||
// If we're on a 32-bit architecture, fall back to base_convert.
|
||||
if (PHP_INT_SIZE === 4) {
|
||||
return base_convert($hex, 16, 10);
|
||||
}
|
||||
|
||||
$hi = intval(substr($hex, -16, -8), 16);
|
||||
$lo = intval(substr($hex, -8, 8), 16);
|
||||
|
||||
return $hi << 32 | $lo;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,184 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Codec;
|
||||
|
||||
use Exception;
|
||||
use Jaeger\SpanContext;
|
||||
|
||||
use const Jaeger\TRACE_ID_HEADER;
|
||||
use const Jaeger\BAGGAGE_HEADER_PREFIX;
|
||||
use const Jaeger\DEBUG_ID_HEADER_KEY;
|
||||
|
||||
class TextCodec implements CodecInterface
|
||||
{
|
||||
private $urlEncoding;
|
||||
private $traceIdHeader;
|
||||
private $baggagePrefix;
|
||||
private $debugIdHeader;
|
||||
private $prefixLength;
|
||||
|
||||
/**
|
||||
* @param bool $urlEncoding
|
||||
* @param string $traceIdHeader
|
||||
* @param string $baggageHeaderPrefix
|
||||
* @param string $debugIdHeader
|
||||
*/
|
||||
public function __construct(
|
||||
bool $urlEncoding = false,
|
||||
string $traceIdHeader = TRACE_ID_HEADER,
|
||||
string $baggageHeaderPrefix = BAGGAGE_HEADER_PREFIX,
|
||||
string $debugIdHeader = DEBUG_ID_HEADER_KEY
|
||||
) {
|
||||
$this->urlEncoding = $urlEncoding;
|
||||
$this->traceIdHeader = str_replace('_', '-', strtolower($traceIdHeader));
|
||||
$this->baggagePrefix = str_replace('_', '-', strtolower($baggageHeaderPrefix));
|
||||
$this->debugIdHeader = str_replace('_', '-', strtolower($debugIdHeader));
|
||||
$this->prefixLength = strlen($baggageHeaderPrefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see \Jaeger\Tracer::inject
|
||||
*
|
||||
* @param SpanContext $spanContext
|
||||
* @param mixed $carrier
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function inject(SpanContext $spanContext, &$carrier)
|
||||
{
|
||||
$carrier[$this->traceIdHeader] = $this->spanContextToString(
|
||||
$spanContext->getTraceId(),
|
||||
$spanContext->getSpanId(),
|
||||
$spanContext->getParentId(),
|
||||
$spanContext->getFlags()
|
||||
);
|
||||
|
||||
$baggage = $spanContext->getBaggage();
|
||||
if (empty($baggage)) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($baggage as $key => $value) {
|
||||
$encodedValue = $value;
|
||||
|
||||
if ($this->urlEncoding) {
|
||||
$encodedValue = urlencode($value);
|
||||
}
|
||||
|
||||
$carrier[$this->baggagePrefix . $key] = $encodedValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see \Jaeger\Tracer::extract
|
||||
*
|
||||
* @param mixed $carrier
|
||||
* @return SpanContext|null
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function extract($carrier)
|
||||
{
|
||||
$traceId = null;
|
||||
$spanId = null;
|
||||
$parentId = null;
|
||||
$flags = null;
|
||||
$baggage = null;
|
||||
$debugId = null;
|
||||
|
||||
foreach ($carrier as $key => $value) {
|
||||
$ucKey = strtolower($key);
|
||||
|
||||
if ($ucKey === $this->traceIdHeader) {
|
||||
if ($this->urlEncoding) {
|
||||
$value = urldecode($value);
|
||||
}
|
||||
list($traceId, $spanId, $parentId, $flags) =
|
||||
$this->spanContextFromString($value);
|
||||
} elseif ($this->startsWith($ucKey, $this->baggagePrefix)) {
|
||||
if ($this->urlEncoding) {
|
||||
$value = urldecode($value);
|
||||
}
|
||||
$attrKey = substr($key, $this->prefixLength);
|
||||
if ($baggage === null) {
|
||||
$baggage = [strtolower($attrKey) => $value];
|
||||
} else {
|
||||
$baggage[strtolower($attrKey)] = $value;
|
||||
}
|
||||
} elseif ($ucKey === $this->debugIdHeader) {
|
||||
if ($this->urlEncoding) {
|
||||
$value = urldecode($value);
|
||||
}
|
||||
$debugId = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if ($traceId === null && $baggage !== null) {
|
||||
throw new Exception('baggage without trace ctx');
|
||||
}
|
||||
|
||||
if ($traceId === null) {
|
||||
if ($debugId !== null) {
|
||||
return new SpanContext(null, null, null, null, [], $debugId);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
return new SpanContext($traceId, $spanId, $parentId, $flags, $baggage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a span context to a string.
|
||||
*
|
||||
* @param int $traceId
|
||||
* @param int $spanId
|
||||
* @param int $parentId
|
||||
* @param int $flags
|
||||
* @return string
|
||||
*/
|
||||
private function spanContextToString($traceId, $spanId, $parentId, $flags)
|
||||
{
|
||||
$parentId = $parentId ?? 0;
|
||||
return sprintf('%x:%x:%x:%x', $traceId, $spanId, $parentId, $flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a span context from a string.
|
||||
*
|
||||
* @param string $value
|
||||
* @return array
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
private function spanContextFromString($value): array
|
||||
{
|
||||
$parts = explode(':', $value);
|
||||
|
||||
if (count($parts) != 4) {
|
||||
throw new Exception('Malformed tracer state string.');
|
||||
}
|
||||
|
||||
return [
|
||||
CodecUtility::hexToInt64($parts[0]),
|
||||
CodecUtility::hexToInt64($parts[1]),
|
||||
CodecUtility::hexToInt64($parts[2]),
|
||||
$parts[3],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that a string ($haystack) starts with a given prefix ($needle).
|
||||
*
|
||||
* @param string $haystack
|
||||
* @param string $needle
|
||||
* @return bool
|
||||
*/
|
||||
private function startsWith(string $haystack, string $needle): bool
|
||||
{
|
||||
return substr($haystack, 0, strlen($needle)) == $needle;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Codec;
|
||||
|
||||
use Jaeger\SpanContext;
|
||||
|
||||
use const Jaeger\DEBUG_FLAG;
|
||||
use const Jaeger\SAMPLED_FLAG;
|
||||
|
||||
class ZipkinCodec implements CodecInterface
|
||||
{
|
||||
const SAMPLED_NAME = 'X-B3-Sampled';
|
||||
const TRACE_ID_NAME = 'X-B3-TraceId';
|
||||
const SPAN_ID_NAME = 'X-B3-SpanId';
|
||||
const PARENT_ID_NAME = 'X-B3-ParentSpanId';
|
||||
const FLAGS_NAME = 'X-B3-Flags';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see \Jaeger\Tracer::inject
|
||||
*
|
||||
* @param SpanContext $spanContext
|
||||
* @param mixed $carrier
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function inject(SpanContext $spanContext, &$carrier)
|
||||
{
|
||||
$carrier[self::TRACE_ID_NAME] = dechex($spanContext->getTraceId());
|
||||
$carrier[self::SPAN_ID_NAME] = dechex($spanContext->getSpanId());
|
||||
if ($spanContext->getParentId() != null) {
|
||||
$carrier[self::PARENT_ID_NAME] = dechex($spanContext->getParentId());
|
||||
}
|
||||
$carrier[self::FLAGS_NAME] = (int) $spanContext->getFlags();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see \Jaeger\Tracer::extract
|
||||
*
|
||||
* @param mixed $carrier
|
||||
* @return SpanContext|null
|
||||
*/
|
||||
public function extract($carrier)
|
||||
{
|
||||
$traceId = "0";
|
||||
$spanId = "0";
|
||||
$parentId = "0";
|
||||
$flags = 0;
|
||||
|
||||
if (isset($carrier[strtolower(self::SAMPLED_NAME)])) {
|
||||
if ($carrier[strtolower(self::SAMPLED_NAME)] === "1" ||
|
||||
strtolower($carrier[strtolower(self::SAMPLED_NAME)] === "true")
|
||||
) {
|
||||
$flags = $flags | SAMPLED_FLAG;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($carrier[strtolower(self::TRACE_ID_NAME)])) {
|
||||
$traceId = CodecUtility::hexToInt64($carrier[strtolower(self::TRACE_ID_NAME)], 16, 10);
|
||||
}
|
||||
|
||||
if (isset($carrier[strtolower(self::PARENT_ID_NAME)])) {
|
||||
$parentId = CodecUtility::hexToInt64($carrier[strtolower(self::PARENT_ID_NAME)], 16, 10);
|
||||
}
|
||||
|
||||
if (isset($carrier[strtolower(self::SPAN_ID_NAME)])) {
|
||||
$spanId = CodecUtility::hexToInt64($carrier[strtolower(self::SPAN_ID_NAME)], 16, 10);
|
||||
}
|
||||
|
||||
if (isset($carrier[strtolower(self::FLAGS_NAME)])) {
|
||||
if ($carrier[strtolower(self::FLAGS_NAME)] === "1") {
|
||||
$flags = $flags | DEBUG_FLAG;
|
||||
}
|
||||
}
|
||||
|
||||
if ($traceId != "0" && $spanId != "0") {
|
||||
return new SpanContext($traceId, $spanId, $parentId, $flags);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,390 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger;
|
||||
|
||||
use Exception;
|
||||
use Jaeger\Reporter\CompositeReporter;
|
||||
use Jaeger\Reporter\LoggingReporter;
|
||||
use Jaeger\Reporter\ReporterInterface;
|
||||
use Jaeger\ReporterFactory\JaegerHttpReporterFactory;
|
||||
use Jaeger\ReporterFactory\JaegerReporterFactory;
|
||||
use Jaeger\ReporterFactory\ZipkinReporterFactory;
|
||||
use Jaeger\Sampler\ConstSampler;
|
||||
use Jaeger\Sampler\ProbabilisticSampler;
|
||||
use Jaeger\Sampler\RateLimitingSampler;
|
||||
use Jaeger\Sampler\SamplerInterface;
|
||||
use Jaeger\Util\RateLimiter;
|
||||
use OpenTracing\GlobalTracer;
|
||||
use Psr\Cache\CacheItemPoolInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\NullLogger;
|
||||
|
||||
class Config
|
||||
{
|
||||
const IP_VERSION = "ip_version";
|
||||
|
||||
const ZIPKIN_OVER_COMPACT_UDP = "zipkin_over_compact_udp";
|
||||
const JAEGER_OVER_BINARY_UDP = "jaeger_over_binary_udp";
|
||||
const JAEGER_OVER_BINARY_HTTP = "jaeger_over_binary_http";
|
||||
|
||||
const IPV6 = "IPv6";
|
||||
const IPV4 = "IPv4";
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public static function getAvailableDispatchModes()
|
||||
{
|
||||
return [self::ZIPKIN_OVER_COMPACT_UDP, self::JAEGER_OVER_BINARY_UDP, self::JAEGER_OVER_BINARY_HTTP];
|
||||
}
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $config;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $serviceName;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $initialized = false;
|
||||
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
private $logger;
|
||||
|
||||
/**
|
||||
* @return LoggerInterface
|
||||
*/
|
||||
public function getLogger()
|
||||
{
|
||||
return $this->logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* @var CacheItemPoolInterface
|
||||
*/
|
||||
private $cache;
|
||||
|
||||
/**
|
||||
* Config constructor.
|
||||
* @param array $config
|
||||
* @param string|null $serviceName
|
||||
* @param LoggerInterface|null $logger
|
||||
* @param CacheItemPoolInterface|null $cache
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct(
|
||||
array $config,
|
||||
string $serviceName = null,
|
||||
LoggerInterface $logger = null,
|
||||
CacheItemPoolInterface $cache = null
|
||||
) {
|
||||
$this->config = $config;
|
||||
|
||||
$this->setConfigFromEnv();
|
||||
|
||||
if (empty($this->config["dispatch_mode"])) {
|
||||
$this->config["dispatch_mode"] = self::ZIPKIN_OVER_COMPACT_UDP;
|
||||
}
|
||||
|
||||
if (empty($this->config[Config::IP_VERSION])) {
|
||||
$this->config[Config::IP_VERSION] = self::IPV4;
|
||||
}
|
||||
|
||||
$this->serviceName = $this->config['service_name'] ?? $serviceName;
|
||||
|
||||
if ($this->serviceName === null) {
|
||||
throw new Exception('service_name required in the config or param.');
|
||||
}
|
||||
|
||||
$this->logger = $logger ?: new NullLogger();
|
||||
$this->cache = $cache;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Tracer|null
|
||||
* @throws Exception
|
||||
*/
|
||||
public function initializeTracer()
|
||||
{
|
||||
if ($this->initialized) {
|
||||
$this->logger->warning('Jaeger tracer already initialized, skipping');
|
||||
return null;
|
||||
}
|
||||
|
||||
$reporter = $this->getReporter();
|
||||
$sampler = $this->getSampler();
|
||||
|
||||
|
||||
$tracer = $this->createTracer($reporter, $sampler);
|
||||
|
||||
$this->initializeGlobalTracer($tracer);
|
||||
|
||||
return $tracer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ReporterInterface $reporter
|
||||
* @param SamplerInterface $sampler
|
||||
* @return Tracer
|
||||
*/
|
||||
public function createTracer(ReporterInterface $reporter, SamplerInterface $sampler): Tracer
|
||||
{
|
||||
return new Tracer(
|
||||
$this->serviceName,
|
||||
$reporter,
|
||||
$sampler,
|
||||
$this->shouldUseOneSpanPerRpc(),
|
||||
$this->logger,
|
||||
null,
|
||||
$this->getTraceIdHeader(),
|
||||
$this->getBaggageHeaderPrefix(),
|
||||
$this->getDebugIdHeaderKey(),
|
||||
$this->getConfiguredTags()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getServiceName(): string
|
||||
{
|
||||
return $this->serviceName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Tracer $tracer
|
||||
*/
|
||||
private function initializeGlobalTracer(Tracer $tracer)
|
||||
{
|
||||
GlobalTracer::set($tracer);
|
||||
$this->logger->debug('OpenTracing\GlobalTracer initialized to ' . $tracer->getServiceName());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
private function getLogging(): bool
|
||||
{
|
||||
return (bool)($this->config['logging'] ?? false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ReporterInterface
|
||||
*/
|
||||
private function getReporter(): ReporterInterface
|
||||
{
|
||||
switch ($this->config["dispatch_mode"]) {
|
||||
case self::JAEGER_OVER_BINARY_UDP:
|
||||
$reporter = (new JaegerReporterFactory($this))->createReporter();
|
||||
break;
|
||||
case self::ZIPKIN_OVER_COMPACT_UDP:
|
||||
$reporter = (new ZipkinReporterFactory($this))->createReporter();
|
||||
break;
|
||||
case self::JAEGER_OVER_BINARY_HTTP:
|
||||
$reporter = (new JaegerHttpReporterFactory($this))->createReporter();
|
||||
break;
|
||||
default:
|
||||
throw new \RuntimeException(
|
||||
sprintf(
|
||||
"Unsupported `dispatch_mode` value: %s. Allowed values are: %s",
|
||||
$this->config["dispatch_mode"],
|
||||
implode(", ", Config::getAvailableDispatchModes())
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->getLogging()) {
|
||||
$reporter = new CompositeReporter($reporter, new LoggingReporter($this->logger));
|
||||
}
|
||||
|
||||
return $reporter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return SamplerInterface
|
||||
* @throws \Psr\Cache\InvalidArgumentException
|
||||
* @throws Exception
|
||||
*/
|
||||
private function getSampler(): SamplerInterface
|
||||
{
|
||||
$samplerConfig = $this->config['sampler'] ?? [];
|
||||
$samplerType = $samplerConfig['type'] ?? null;
|
||||
$samplerParam = $samplerConfig['param'] ?? null;
|
||||
|
||||
if ($samplerType === null || $samplerType === SAMPLER_TYPE_REMOTE) {
|
||||
// todo: implement remote sampling
|
||||
return new ProbabilisticSampler((float)$samplerParam);
|
||||
} elseif ($samplerType === SAMPLER_TYPE_CONST) {
|
||||
return new ConstSampler($samplerParam ?? false);
|
||||
} elseif ($samplerType === SAMPLER_TYPE_PROBABILISTIC) {
|
||||
return new ProbabilisticSampler((float)$samplerParam);
|
||||
} elseif ($samplerType === SAMPLER_TYPE_RATE_LIMITING) {
|
||||
if (!$this->cache) {
|
||||
throw new Exception('You cannot use RateLimitingSampler without cache component');
|
||||
}
|
||||
$cacheConfig = $samplerConfig['cache'] ?? [];
|
||||
return new RateLimitingSampler(
|
||||
$samplerParam ?? 0,
|
||||
new RateLimiter(
|
||||
$this->cache,
|
||||
$cacheConfig['currentBalanceKey'] ?? 'rate.currentBalance',
|
||||
$cacheConfig['lastTickKey'] ?? 'rate.lastTick'
|
||||
)
|
||||
);
|
||||
}
|
||||
throw new Exception('Unknown sampler type ' . $samplerType);
|
||||
}
|
||||
|
||||
/**
|
||||
* The UDP max buffer length.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getMaxBufferLength(): int
|
||||
{
|
||||
return (int)($this->config['max_buffer_length'] ?? 64000);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLocalAgentReportingHost(): string
|
||||
{
|
||||
return $this->getLocalAgentGroup()['reporting_host'] ?? DEFAULT_REPORTING_HOST;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getLocalAgentReportingPort(): int
|
||||
{
|
||||
$port = $this->getLocalAgentGroup()['reporting_port'] ?? null;
|
||||
if (empty($this->getLocalAgentGroup()['reporting_port'])) {
|
||||
switch ($this->config['dispatch_mode']) {
|
||||
case self::JAEGER_OVER_BINARY_UDP:
|
||||
$port = DEFAULT_JAEGER_UDP_BINARY_REPORTING_PORT;
|
||||
break;
|
||||
case self::JAEGER_OVER_BINARY_HTTP:
|
||||
$port = DEFAULT_JAEGER_HTTP_BINARY_REPORTING_PORT;
|
||||
break;
|
||||
default:
|
||||
$port = DEFAULT_ZIPKIN_UDP_COMPACT_REPORTING_PORT;
|
||||
}
|
||||
}
|
||||
return (int)$port;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function getLocalAgentGroup(): array
|
||||
{
|
||||
return $this->config['local_agent'] ?? [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getTraceIdHeader(): string
|
||||
{
|
||||
return $this->config['trace_id_header'] ?? TRACE_ID_HEADER;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getBaggageHeaderPrefix(): string
|
||||
{
|
||||
return $this->config['baggage_header_prefix'] ?? BAGGAGE_HEADER_PREFIX;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getDebugIdHeaderKey(): string
|
||||
{
|
||||
return $this->config['debug_id_header_key'] ?? DEBUG_ID_HEADER_KEY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of user-defined tags to be added to each span created by the tracer initialized by this config.
|
||||
* @return string[]
|
||||
*/
|
||||
private function getConfiguredTags(): array
|
||||
{
|
||||
return $this->config['tags'] ?? [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether to follow the Zipkin model of using one span per RPC,
|
||||
* as opposed to the model of using separate spans on the RPC client and server.
|
||||
* Defaults to true.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function shouldUseOneSpanPerRpc(): bool
|
||||
{
|
||||
return $this->config['one_span_per_rpc'] ?? true;
|
||||
}
|
||||
|
||||
public function ipProtocolVersion(): string
|
||||
{
|
||||
return $this->config[self::IP_VERSION] ?? self::IPV4;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets values from env vars into config props, unless ones has been already set.
|
||||
*/
|
||||
private function setConfigFromEnv()
|
||||
{
|
||||
// general
|
||||
if (isset($_ENV['JAEGER_SERVICE_NAME']) && !isset($this->config['service_name'])) {
|
||||
$this->config['service_name'] = $_ENV['JAEGER_SERVICE_NAME'];
|
||||
}
|
||||
|
||||
if (isset($_ENV['JAEGER_TAGS']) && !isset($this->config["tags"])) {
|
||||
$this->config['tags'] = $_ENV['JAEGER_TAGS'];
|
||||
}
|
||||
|
||||
if (isset($_ENV['JAEGER_DISPATCH_MODE']) && !isset($this->config['dispatch_mode'])) {
|
||||
$this->config['dispatch_mode'] = $_ENV['JAEGER_DISPATCH_MODE'];
|
||||
}
|
||||
|
||||
// reporting
|
||||
if (isset($_ENV['JAEGER_AGENT_HOST']) && !isset($this->config['local_agent']['reporting_host'])) {
|
||||
$this->config['local_agent']['reporting_host'] = $_ENV['JAEGER_AGENT_HOST'];
|
||||
}
|
||||
|
||||
if (isset($_ENV['JAEGER_AGENT_PORT']) && !isset($this->config['local_agent']['reporting_port'])) {
|
||||
$this->config['local_agent']['reporting_port'] = intval($_ENV['JAEGER_AGENT_PORT']);
|
||||
}
|
||||
|
||||
if (isset($_ENV['JAEGER_REPORTER_LOG_SPANS']) && !isset($this->config['logging'])) {
|
||||
$this->config['logging'] = filter_var($_ENV['JAEGER_REPORTER_LOG_SPANS'], FILTER_VALIDATE_BOOLEAN);
|
||||
}
|
||||
|
||||
if (isset($_ENV['JAEGER_REPORTER_MAX_QUEUE_SIZE']) && !isset($this->config['max_buffer_length'])) {
|
||||
$this->config['max_buffer_length'] = intval($_ENV['JAEGER_REPORTER_MAX_QUEUE_SIZE']);
|
||||
}
|
||||
|
||||
// sampling
|
||||
if (isset($_ENV['JAEGER_SAMPLER_TYPE']) && !isset($this->config['sampler']['type'])) {
|
||||
$this->config['sampler']['type'] = $_ENV['JAEGER_SAMPLER_TYPE'];
|
||||
}
|
||||
|
||||
if (isset($_ENV['JAEGER_SAMPLER_PARAM']) && !isset($this->config['sampler']['param'])) {
|
||||
$this->config['sampler']['param'] = $_ENV['JAEGER_SAMPLER_PARAM'];
|
||||
}
|
||||
|
||||
if (isset($_ENV['IP_VERSION']) && !isset($this->config[Config::IP_VERSION])) {
|
||||
$this->config[Config::IP_VERSION] = $_ENV['IP_VERSION'];
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger;
|
||||
|
||||
// Max number of bits to use when generating random ID
|
||||
const MAX_ID_BITS = 64;
|
||||
|
||||
// How often remotely controller sampler polls for sampling strategy
|
||||
const DEFAULT_SAMPLING_INTERVAL = 60;
|
||||
|
||||
// How often remote reporter does a preemptive flush of its buffers
|
||||
const DEFAULT_FLUSH_INTERVAL = 1;
|
||||
|
||||
// Name of the HTTP header used to encode trace ID
|
||||
const TRACE_ID_HEADER = 'uber-trace-id';
|
||||
|
||||
// Prefix for HTTP headers used to record baggage items
|
||||
const BAGGAGE_HEADER_PREFIX = 'uberctx-';
|
||||
|
||||
// The name of HTTP header or a TextMap carrier key which, if found in the
|
||||
// carrier, forces the trace to be sampled as "debug" trace. The value of the
|
||||
// header is recorded as the tag on the # root span, so that the trace can
|
||||
// be found in the UI using this value as a correlation ID.
|
||||
const DEBUG_ID_HEADER_KEY = 'jaeger-debug-id';
|
||||
|
||||
const JAEGER_CLIENT_VERSION = 'PHP-' . PHP_VERSION;
|
||||
|
||||
// Tracer-scoped tag that tells the version of Jaeger client library
|
||||
const JAEGER_VERSION_TAG_KEY = 'jaeger.version';
|
||||
|
||||
// Tracer-scoped tag that contains the hostname
|
||||
const JAEGER_HOSTNAME_TAG_KEY = 'jaeger.hostname';
|
||||
|
||||
const SAMPLER_TYPE_TAG_KEY = 'sampler.type';
|
||||
|
||||
const SAMPLER_PARAM_TAG_KEY = 'sampler.param';
|
||||
|
||||
const DEFAULT_SAMPLING_PROBABILITY = 0.001;
|
||||
|
||||
const DEFAULT_LOWER_BOUND = 1.0 / (10.0 * 60.0); # sample once every 10 minutes
|
||||
|
||||
const DEFAULT_MAX_OPERATIONS = 2000;
|
||||
|
||||
const STRATEGIES_STR = 'perOperationStrategies';
|
||||
|
||||
const OPERATION_STR = 'operation';
|
||||
|
||||
const DEFAULT_LOWER_BOUND_STR = 'defaultLowerBoundTracesPerSecond';
|
||||
|
||||
const PROBABILISTIC_SAMPLING_STR = 'probabilisticSampling';
|
||||
|
||||
const SAMPLING_RATE_STR = 'samplingRate';
|
||||
|
||||
const DEFAULT_SAMPLING_PROBABILITY_STR = 'defaultSamplingProbability';
|
||||
|
||||
const OPERATION_SAMPLING_STR = 'operationSampling';
|
||||
|
||||
const MAX_TRACES_PER_SECOND_STR = 'maxTracesPerSecond';
|
||||
|
||||
const RATE_LIMITING_SAMPLING_STR = 'rateLimitingSampling';
|
||||
|
||||
const STRATEGY_TYPE_STR = 'strategyType';
|
||||
|
||||
// the type of sampler that always makes the same decision.
|
||||
const SAMPLER_TYPE_CONST = 'const';
|
||||
|
||||
// the type of sampler that polls Jaeger agent for sampling strategy.
|
||||
const SAMPLER_TYPE_REMOTE = 'remote';
|
||||
|
||||
// the type of sampler that samples traces with a certain fixed probability.
|
||||
const SAMPLER_TYPE_PROBABILISTIC = 'probabilistic';
|
||||
|
||||
// the type of sampler that samples only up to a fixed number
|
||||
// of traces per second.
|
||||
// noinspection SpellCheckingInspection
|
||||
const SAMPLER_TYPE_RATE_LIMITING = 'ratelimiting';
|
||||
|
||||
// the type of sampler that samples only up to a fixed number
|
||||
// of traces per second.
|
||||
// noinspection SpellCheckingInspection
|
||||
const SAMPLER_TYPE_LOWER_BOUND = 'lowerbound';
|
||||
|
||||
const DEFAULT_REPORTING_HOST = 'localhost';
|
||||
|
||||
/** @deprecated */
|
||||
const DEFAULT_REPORTING_PORT = 5775;
|
||||
|
||||
const DEFAULT_ZIPKIN_UDP_COMPACT_REPORTING_PORT = 5775;
|
||||
const DEFAULT_JAEGER_UDP_BINARY_REPORTING_PORT = 6832;
|
||||
const DEFAULT_JAEGER_HTTP_BINARY_REPORTING_PORT = 14268;
|
||||
|
||||
const DEFAULT_SAMPLING_PORT = 5778;
|
||||
|
||||
const LOCAL_AGENT_DEFAULT_ENABLED = true;
|
||||
|
||||
const ZIPKIN_SPAN_FORMAT = 'zipkin-span-format';
|
||||
|
||||
const SAMPLED_FLAG = 0x01;
|
||||
|
||||
const DEBUG_FLAG = 0x02;
|
171
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Mapper/SpanToJaegerMapper.php
vendored
Normal file
171
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Mapper/SpanToJaegerMapper.php
vendored
Normal file
|
@ -0,0 +1,171 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Mapper;
|
||||
|
||||
use Jaeger\Span;
|
||||
use Jaeger\Thrift\Agent\Zipkin\AnnotationType;
|
||||
use Jaeger\Thrift\Agent\Zipkin\BinaryAnnotation;
|
||||
use Jaeger\Thrift\Log;
|
||||
use Jaeger\Thrift\Span as JaegerThriftSpan;
|
||||
use Jaeger\Thrift\Tag;
|
||||
use Jaeger\Thrift\TagType;
|
||||
use const OpenTracing\Tags\COMPONENT;
|
||||
use const OpenTracing\Tags\PEER_HOST_IPV4;
|
||||
use const OpenTracing\Tags\PEER_PORT;
|
||||
use const OpenTracing\Tags\PEER_SERVICE;
|
||||
use const OpenTracing\Tags\SPAN_KIND;
|
||||
|
||||
class SpanToJaegerMapper
|
||||
{
|
||||
private $specialSpanTags = ["jaeger.hostname", "jaeger.version"];
|
||||
|
||||
private $processTagsPrefix = "process.";
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getSpecialSpanTags(): array
|
||||
{
|
||||
return $this->specialSpanTags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getProcessTagsPrefix(): string
|
||||
{
|
||||
return $this->processTagsPrefix;
|
||||
}
|
||||
|
||||
public function mapSpanToJaeger(Span $span) : JaegerThriftSpan
|
||||
{
|
||||
$timestamp = $span->getStartTime();
|
||||
$duration = $span->getEndTime() - $span->getStartTime();
|
||||
|
||||
/** @var Tag[] $tags */
|
||||
$tags = [];
|
||||
|
||||
$tags[] = new Tag([
|
||||
"key" => COMPONENT,
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => $span->getComponent() ?? $span->getTracer()->getServiceName(),
|
||||
]);
|
||||
|
||||
// Handle special tags
|
||||
$peerService = $span->peer['service_name'] ?? null;
|
||||
if ($peerService !== null) {
|
||||
$tags[] = new Tag([
|
||||
"key" => PEER_SERVICE,
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => $peerService,
|
||||
]);
|
||||
}
|
||||
|
||||
$peerHostIpv4 = $span->peer['ipv4'] ?? null;
|
||||
if ($peerHostIpv4 !== null) {
|
||||
$tags[] = new Tag([
|
||||
"key" => PEER_HOST_IPV4,
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => $peerHostIpv4,
|
||||
]);
|
||||
}
|
||||
|
||||
$peerPort = $span->peer['port'] ?? null;
|
||||
if ($peerPort !== null) {
|
||||
$tags[] = new Tag([
|
||||
"key" => PEER_PORT,
|
||||
"vType" => TagType::LONG,
|
||||
"vLong" => $peerPort,
|
||||
]);
|
||||
}
|
||||
|
||||
$spanKind = $span->getKind();
|
||||
if ($spanKind !== null) {
|
||||
$tags[] = new Tag([
|
||||
"key" => SPAN_KIND,
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => $spanKind,
|
||||
]);
|
||||
}
|
||||
|
||||
/** @var BinaryAnnotation[] $binaryAnnotationTags */
|
||||
$binaryAnnotationTags = $span->getTags();
|
||||
foreach ($binaryAnnotationTags as $binaryAnnotationTag) {
|
||||
if (in_array($binaryAnnotationTag->key, $this->specialSpanTags, true)) {
|
||||
continue ;
|
||||
}
|
||||
|
||||
if (strpos($binaryAnnotationTag->key, $this->processTagsPrefix) === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$type = "";
|
||||
$vkey = "";
|
||||
switch ($binaryAnnotationTag->annotation_type) {
|
||||
case AnnotationType::BOOL:
|
||||
$type = TagType::BOOL;
|
||||
$vkey = "vBool";
|
||||
break;
|
||||
case AnnotationType::BYTES:
|
||||
$type = TagType::BINARY;
|
||||
$vkey = "vBinary";
|
||||
break;
|
||||
case AnnotationType::DOUBLE:
|
||||
$type = TagType::DOUBLE;
|
||||
$vkey = "vDouble";
|
||||
break;
|
||||
case AnnotationType::I16:
|
||||
case AnnotationType::I32:
|
||||
case AnnotationType::I64:
|
||||
$type = TagType::LONG;
|
||||
$vkey = "vLong";
|
||||
break;
|
||||
default:
|
||||
$type = TagType::STRING;
|
||||
$vkey = "vStr";
|
||||
}
|
||||
|
||||
$tags[] = new Tag([
|
||||
"key" => $binaryAnnotationTag->key,
|
||||
"vType" => $type,
|
||||
$vkey => $binaryAnnotationTag->value,
|
||||
]);
|
||||
}
|
||||
|
||||
/** @var Log[] $logs */
|
||||
$logs = [];
|
||||
|
||||
$spanLogs = $span->getLogs();
|
||||
|
||||
foreach ($spanLogs as $spanLog) {
|
||||
/** @var Tag $fields */
|
||||
$fields = [];
|
||||
|
||||
if (!empty($spanLog["fields"])) {
|
||||
$fields[] = new Tag([
|
||||
"key" => "event",
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => json_encode($spanLog["fields"])
|
||||
]);
|
||||
}
|
||||
|
||||
$logs[] = new Log([
|
||||
"timestamp" => $spanLog["timestamp"],
|
||||
"fields" => $fields
|
||||
]);
|
||||
}
|
||||
|
||||
return new JaegerThriftSpan([
|
||||
"traceIdLow" => (int)$span->getContext()->getTraceId(),
|
||||
"traceIdHigh" => 0,
|
||||
"spanId" => (int)$span->getContext()->getSpanId(),
|
||||
"parentSpanId" => (int)$span->getContext()->getParentId(),
|
||||
"operationName" => $span->getOperationName(),
|
||||
"startTime" => $timestamp,
|
||||
"duration" => $duration,
|
||||
"flags" => (int)$span->isDebug(),
|
||||
"tags" => $tags,
|
||||
"logs" => $logs
|
||||
]);
|
||||
}
|
||||
}
|
51
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/CompositeReporter.php
vendored
Normal file
51
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/CompositeReporter.php
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Reporter;
|
||||
|
||||
use Jaeger\Span;
|
||||
|
||||
/**
|
||||
* CompositeReporter delegates reporting to one or more underlying reporters.
|
||||
*/
|
||||
class CompositeReporter implements ReporterInterface
|
||||
{
|
||||
/**
|
||||
* @var ReporterInterface[]
|
||||
*/
|
||||
private $reporters;
|
||||
|
||||
/**
|
||||
* CompositeReporter constructor.
|
||||
*
|
||||
* @param ReporterInterface ...$reporters
|
||||
*/
|
||||
public function __construct(ReporterInterface ...$reporters)
|
||||
{
|
||||
$this->reporters = $reporters;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param Span $span
|
||||
* @return void
|
||||
*/
|
||||
public function reportSpan(Span $span)
|
||||
{
|
||||
foreach ($this->reporters as $reporter) {
|
||||
$reporter->reportSpan($span);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
foreach ($this->reporters as $reporter) {
|
||||
$reporter->close();
|
||||
}
|
||||
}
|
||||
}
|
47
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/InMemoryReporter.php
vendored
Normal file
47
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/InMemoryReporter.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Reporter;
|
||||
|
||||
use Jaeger\Span;
|
||||
|
||||
/**
|
||||
* InMemoryReporter stores spans in memory and returns them via getSpans().
|
||||
*/
|
||||
class InMemoryReporter implements ReporterInterface
|
||||
{
|
||||
/**
|
||||
* @var Span[]
|
||||
*/
|
||||
private $spans = [];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param Span $span
|
||||
* @return void
|
||||
*/
|
||||
public function reportSpan(Span $span)
|
||||
{
|
||||
$this->spans[] = $span;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Span[]
|
||||
*/
|
||||
public function getSpans(): array
|
||||
{
|
||||
return $this->spans;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Only implemented to satisfy the sampler interface.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Reporter;
|
||||
|
||||
use Jaeger\Sender\SenderInterface;
|
||||
use Jaeger\Span;
|
||||
|
||||
class JaegerReporter implements ReporterInterface
|
||||
{
|
||||
/**
|
||||
* @var SenderInterface
|
||||
*/
|
||||
private $sender;
|
||||
|
||||
/**
|
||||
* RemoteReporter constructor.
|
||||
*
|
||||
* @param SenderInterface $sender
|
||||
*/
|
||||
public function __construct(SenderInterface $sender)
|
||||
{
|
||||
$this->sender = $sender;
|
||||
}
|
||||
|
||||
public function reportSpan(Span $span)
|
||||
{
|
||||
$this->sender->append($span);
|
||||
}
|
||||
|
||||
public function close()
|
||||
{
|
||||
$this->sender->flush();
|
||||
$this->sender->close();
|
||||
}
|
||||
}
|
51
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/LoggingReporter.php
vendored
Normal file
51
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/LoggingReporter.php
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Reporter;
|
||||
|
||||
use Jaeger\Span;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\NullLogger;
|
||||
|
||||
/**
|
||||
* LoggingReporter logs all spans.
|
||||
*/
|
||||
class LoggingReporter implements ReporterInterface
|
||||
{
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
private $logger;
|
||||
|
||||
/**
|
||||
* LoggingReporter constructor.
|
||||
*
|
||||
* @param LoggerInterface|null $logger
|
||||
*/
|
||||
public function __construct(LoggerInterface $logger = null)
|
||||
{
|
||||
$this->logger = $logger ?? new NullLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param Span $span
|
||||
* @return void
|
||||
*/
|
||||
public function reportSpan(Span $span)
|
||||
{
|
||||
$this->logger->debug('Reporting span ' . $span->getOperationName());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Only implemented to satisfy the sampler interface.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Reporter;
|
||||
|
||||
use Jaeger\Span;
|
||||
|
||||
/**
|
||||
* NullReporter ignores all spans.
|
||||
*/
|
||||
class NullReporter implements ReporterInterface
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param Span $span
|
||||
* @return void
|
||||
*/
|
||||
public function reportSpan(Span $span)
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Reporter;
|
||||
|
||||
use Jaeger\Sender\UdpSender;
|
||||
use Jaeger\Span;
|
||||
|
||||
class RemoteReporter implements ReporterInterface
|
||||
{
|
||||
/**
|
||||
* @var UdpSender
|
||||
*/
|
||||
private $transport;
|
||||
|
||||
/**
|
||||
* RemoteReporter constructor.
|
||||
*
|
||||
* @param UdpSender $transport
|
||||
*/
|
||||
public function __construct(UdpSender $transport)
|
||||
{
|
||||
$this->transport = $transport;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param Span $span
|
||||
* @return void
|
||||
*/
|
||||
public function reportSpan(Span $span)
|
||||
{
|
||||
$this->transport->append($span);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
$this->transport->flush();
|
||||
$this->transport->close();
|
||||
}
|
||||
}
|
28
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/ReporterInterface.php
vendored
Normal file
28
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Reporter/ReporterInterface.php
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Reporter;
|
||||
|
||||
use Jaeger\Span;
|
||||
|
||||
/**
|
||||
* Uses to report finished span to something that collects those spans.
|
||||
*
|
||||
* @package Jaeger\Reporter
|
||||
*/
|
||||
interface ReporterInterface
|
||||
{
|
||||
/**
|
||||
* Report finished span.
|
||||
*
|
||||
* @param Span $span
|
||||
* @return void
|
||||
*/
|
||||
public function reportSpan(Span $span);
|
||||
|
||||
/**
|
||||
* Release any resources used by the reporter and flushes/sends the data.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close();
|
||||
}
|
23
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/AbstractReporterFactory.php
vendored
Normal file
23
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/AbstractReporterFactory.php
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\ReporterFactory;
|
||||
|
||||
use Jaeger\Config;
|
||||
use Thrift\Transport\TTransport;
|
||||
|
||||
abstract class AbstractReporterFactory implements ReporterFactoryInterface
|
||||
{
|
||||
/**
|
||||
* @var Config
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* AbstractReporterFactory constructor.
|
||||
* @param Config $config
|
||||
*/
|
||||
public function __construct($config)
|
||||
{
|
||||
$this->config = $config;
|
||||
}
|
||||
}
|
35
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/JaegerHttpReporterFactory.php
vendored
Normal file
35
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/JaegerHttpReporterFactory.php
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\ReporterFactory;
|
||||
|
||||
use Jaeger\AgentClient\HttpAgentClient;
|
||||
use Jaeger\Reporter\JaegerReporter;
|
||||
use Jaeger\Reporter\ReporterInterface;
|
||||
use Jaeger\Sender\JaegerSender;
|
||||
use Thrift\Exception\TTransportException;
|
||||
use Thrift\Protocol\TBinaryProtocol;
|
||||
use Thrift\Transport\THttpClient;
|
||||
|
||||
class JaegerHttpReporterFactory extends AbstractReporterFactory implements ReporterFactoryInterface
|
||||
{
|
||||
public function createReporter() : ReporterInterface
|
||||
{
|
||||
$transport = new THttpClient(
|
||||
$this->config->getLocalAgentReportingHost(),
|
||||
$this->config->getLocalAgentReportingPort(),
|
||||
"/api/traces"
|
||||
);
|
||||
|
||||
try {
|
||||
$transport->open();
|
||||
} catch (TTransportException $e) {
|
||||
$this->config->getLogger()->warning($e->getMessage());
|
||||
}
|
||||
$protocol = new TBinaryProtocol($transport);
|
||||
$client = new HttpAgentClient($protocol);
|
||||
$this->config->getLogger()->debug('Initializing HTTP Jaeger Tracer with Jaeger.Thrift over Binary protocol');
|
||||
$sender = new JaegerSender($client, $this->config->getLogger());
|
||||
$sender->setMaxBufferLength($this->config->getMaxBufferLength());
|
||||
return new JaegerReporter($sender);
|
||||
}
|
||||
}
|
44
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/JaegerReporterFactory.php
vendored
Normal file
44
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/JaegerReporterFactory.php
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\ReporterFactory;
|
||||
|
||||
use Jaeger\AgentClient\HttpAgentClient;
|
||||
use Jaeger\Reporter\JaegerReporter;
|
||||
use Jaeger\Reporter\ReporterInterface;
|
||||
use Jaeger\Sender\JaegerSender;
|
||||
use Jaeger\Thrift\Agent\AgentClient;
|
||||
use Jaeger\ThriftUdpTransport;
|
||||
use Thrift\Exception\TTransportException;
|
||||
use Thrift\Protocol\TBinaryProtocol;
|
||||
use Thrift\Transport\TBufferedTransport;
|
||||
|
||||
class JaegerReporterFactory extends AbstractReporterFactory implements ReporterFactoryInterface
|
||||
{
|
||||
public function createReporter() : ReporterInterface
|
||||
{
|
||||
$udp = new ThriftUdpTransport(
|
||||
$this->config->getLocalAgentReportingHost(),
|
||||
$this->config->getLocalAgentReportingPort(),
|
||||
$this->config->getLogger(),
|
||||
$this->config
|
||||
);
|
||||
|
||||
$transport = new TBufferedTransport(
|
||||
$udp,
|
||||
$this->config->getMaxBufferLength(),
|
||||
$this->config->getMaxBufferLength()
|
||||
);
|
||||
|
||||
try {
|
||||
$transport->open();
|
||||
} catch (TTransportException $e) {
|
||||
$this->config->getLogger()->warning($e->getMessage());
|
||||
}
|
||||
$protocol = new TBinaryProtocol($transport);
|
||||
$client = new AgentClient($protocol);
|
||||
$this->config->getLogger()->debug('Initializing UDP Jaeger Tracer with Jaeger.Thrift over Binary protocol');
|
||||
$sender = new JaegerSender($client, $this->config->getLogger());
|
||||
$sender->setMaxBufferLength($this->config->getMaxBufferLength());
|
||||
return new JaegerReporter($sender);
|
||||
}
|
||||
}
|
10
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/ReporterFactoryInterface.php
vendored
Normal file
10
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/ReporterFactoryInterface.php
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\ReporterFactory;
|
||||
|
||||
use Jaeger\Reporter\ReporterInterface;
|
||||
|
||||
interface ReporterFactoryInterface
|
||||
{
|
||||
public function createReporter() : ReporterInterface;
|
||||
}
|
46
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/ZipkinReporterFactory.php
vendored
Normal file
46
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/ReporterFactory/ZipkinReporterFactory.php
vendored
Normal file
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\ReporterFactory;
|
||||
|
||||
use Jaeger\Reporter\JaegerReporter;
|
||||
use Jaeger\Reporter\RemoteReporter;
|
||||
use Jaeger\Reporter\ReporterInterface;
|
||||
use Jaeger\Sender\JaegerSender;
|
||||
use Jaeger\Sender\UdpSender;
|
||||
use Jaeger\Thrift\Agent\AgentClient;
|
||||
use Jaeger\ThriftUdpTransport;
|
||||
use Thrift\Exception\TTransportException;
|
||||
use Thrift\Protocol\TBinaryProtocol;
|
||||
use Thrift\Protocol\TCompactProtocol;
|
||||
use Thrift\Transport\TBufferedTransport;
|
||||
use Thrift\Transport\TTransport;
|
||||
|
||||
class ZipkinReporterFactory extends AbstractReporterFactory implements ReporterFactoryInterface
|
||||
{
|
||||
public function createReporter() : ReporterInterface
|
||||
{
|
||||
$udp = new ThriftUdpTransport(
|
||||
$this->config->getLocalAgentReportingHost(),
|
||||
$this->config->getLocalAgentReportingPort(),
|
||||
$this->config->getLogger(),
|
||||
$this->config
|
||||
);
|
||||
|
||||
$transport = new TBufferedTransport(
|
||||
$udp,
|
||||
$this->config->getMaxBufferLength(),
|
||||
$this->config->getMaxBufferLength()
|
||||
);
|
||||
|
||||
try {
|
||||
$transport->open();
|
||||
} catch (TTransportException $e) {
|
||||
$this->config->getLogger()->warning($e->getMessage());
|
||||
}
|
||||
$protocol = new TCompactProtocol($transport);
|
||||
$client = new AgentClient($protocol);
|
||||
$this->config->getLogger()->debug('Initializing UDP Jaeger Tracer with Zipkin.Thrift over Compact protocol');
|
||||
$sender = new UdpSender($client, $this->config->getMaxBufferLength(), $this->config->getLogger());
|
||||
return new RemoteReporter($sender);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Sampler;
|
||||
|
||||
use const Jaeger\SAMPLER_PARAM_TAG_KEY;
|
||||
use const Jaeger\SAMPLER_TYPE_CONST;
|
||||
use const Jaeger\SAMPLER_TYPE_TAG_KEY;
|
||||
|
||||
/**
|
||||
* ConstSampler always returns the same decision.
|
||||
*
|
||||
* @package Jaeger\Sampler
|
||||
*/
|
||||
class ConstSampler implements SamplerInterface
|
||||
{
|
||||
/**
|
||||
* Whether or not the new trace should be sampled.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
private $decision;
|
||||
|
||||
/**
|
||||
* A list of the sampler tags.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $tags = [];
|
||||
|
||||
/**
|
||||
* ConstSampler constructor.
|
||||
*
|
||||
* @param bool $decision
|
||||
*/
|
||||
public function __construct(bool $decision = true)
|
||||
{
|
||||
$this->tags = [
|
||||
SAMPLER_TYPE_TAG_KEY => SAMPLER_TYPE_CONST,
|
||||
SAMPLER_PARAM_TAG_KEY => $decision,
|
||||
];
|
||||
|
||||
$this->decision = $decision;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param string $traceId The traceId on the span.
|
||||
* @param string $operation The operation name set on the span.
|
||||
* @return array
|
||||
*/
|
||||
public function isSampled(string $traceId, string $operation = ''): array
|
||||
{
|
||||
return [$this->decision, $this->tags];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Only implemented to satisfy the sampler interface.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
88
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Sampler/ProbabilisticSampler.php
vendored
Normal file
88
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Sampler/ProbabilisticSampler.php
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Sampler;
|
||||
|
||||
use OutOfBoundsException;
|
||||
use const Jaeger\SAMPLER_PARAM_TAG_KEY;
|
||||
use const Jaeger\SAMPLER_TYPE_PROBABILISTIC;
|
||||
use const Jaeger\SAMPLER_TYPE_TAG_KEY;
|
||||
|
||||
/**
|
||||
* A sampler that randomly samples a certain percentage of traces specified
|
||||
* by the samplingRate, in the range between 0.0 and 1.0.
|
||||
*
|
||||
* @package Jaeger\Sampler
|
||||
*/
|
||||
class ProbabilisticSampler implements SamplerInterface
|
||||
{
|
||||
/**
|
||||
* The sampling rate rate between 0.0 and 1.0.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
private $rate;
|
||||
|
||||
/**
|
||||
* A list of the sampler tags.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $tags = [];
|
||||
|
||||
/**
|
||||
* The boundary of the sample sampling rate.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
private $boundary;
|
||||
|
||||
/**
|
||||
* ProbabilisticSampler constructor.
|
||||
*
|
||||
* @param float $rate
|
||||
* @throws OutOfBoundsException
|
||||
*/
|
||||
public function __construct(float $rate)
|
||||
{
|
||||
$this->tags = [
|
||||
SAMPLER_TYPE_TAG_KEY => SAMPLER_TYPE_PROBABILISTIC,
|
||||
SAMPLER_PARAM_TAG_KEY => $rate,
|
||||
];
|
||||
|
||||
if ($rate < 0.0 || $rate > 1.0) {
|
||||
throw new OutOfBoundsException('Sampling rate must be between 0.0 and 1.0.');
|
||||
}
|
||||
|
||||
$this->rate = $rate;
|
||||
if ($rate < 0.5) {
|
||||
$this->boundary = (int)($rate * PHP_INT_MAX);
|
||||
} else {
|
||||
// more precise calculation due to int and float having different precision near PHP_INT_MAX
|
||||
$this->boundary = PHP_INT_MAX - (int)((1 - $rate) * PHP_INT_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param string $traceId The traceId on the span.
|
||||
* @param string $operation The operation name set on the span.
|
||||
* @return array
|
||||
*/
|
||||
public function isSampled(string $traceId, string $operation = ''): array
|
||||
{
|
||||
return [($traceId < $this->boundary), $this->tags];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Only implemented to satisfy the sampler interface.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
62
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Sampler/RateLimitingSampler.php
vendored
Normal file
62
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Sampler/RateLimitingSampler.php
vendored
Normal file
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Sampler;
|
||||
|
||||
use Jaeger\Util\RateLimiter;
|
||||
|
||||
use const Jaeger\SAMPLER_PARAM_TAG_KEY;
|
||||
use const Jaeger\SAMPLER_TYPE_RATE_LIMITING;
|
||||
use const Jaeger\SAMPLER_TYPE_TAG_KEY;
|
||||
|
||||
class RateLimitingSampler implements SamplerInterface
|
||||
{
|
||||
/**
|
||||
* @var RateLimiter
|
||||
*/
|
||||
private $rateLimiter;
|
||||
|
||||
/**
|
||||
* A list of the sampler tags.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $tags = [];
|
||||
|
||||
public function __construct($maxTracesPerSecond, RateLimiter $rateLimiter)
|
||||
{
|
||||
$this->tags = [
|
||||
SAMPLER_TYPE_TAG_KEY => SAMPLER_TYPE_RATE_LIMITING,
|
||||
SAMPLER_PARAM_TAG_KEY => $maxTracesPerSecond,
|
||||
];
|
||||
|
||||
$maxTracesPerNanosecond = $maxTracesPerSecond / 1000000000.0;
|
||||
$this->rateLimiter = $rateLimiter;
|
||||
$this->rateLimiter->initialize($maxTracesPerNanosecond, $maxTracesPerSecond > 1.0 ? 1.0 : $maxTracesPerSecond);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not the new trace should be sampled.
|
||||
*
|
||||
* Implementations should return an array in the format [$decision, $tags].
|
||||
*
|
||||
* @param string $traceId The traceId on the span.
|
||||
* @param string $operation The operation name set on the span.
|
||||
* @return array
|
||||
*/
|
||||
public function isSampled(string $traceId = '', string $operation = '')
|
||||
{
|
||||
return [$this->rateLimiter->checkCredit(1.0), $this->tags];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* Only implemented to satisfy the sampler interface.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
29
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Sampler/SamplerInterface.php
vendored
Normal file
29
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Sampler/SamplerInterface.php
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Sampler;
|
||||
|
||||
/**
|
||||
* Sampler is responsible for deciding if a new trace should be sampled and captured for storage.
|
||||
*
|
||||
* @package Jaeger\Sampler
|
||||
*/
|
||||
interface SamplerInterface
|
||||
{
|
||||
/**
|
||||
* Whether or not the new trace should be sampled.
|
||||
*
|
||||
* Implementations should return an array in the format [$decision, $tags].
|
||||
*
|
||||
* @param string $traceId The traceId on the span.
|
||||
* @param string $operation The operation name set on the span.
|
||||
* @return array
|
||||
*/
|
||||
public function isSampled(string $traceId, string $operation);
|
||||
|
||||
/**
|
||||
* Release any resources used by the sampler.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function close();
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger;
|
||||
|
||||
use OpenTracing\Scope as OTScope;
|
||||
use OpenTracing\Span as OTSpan;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
class Scope implements OTScope
|
||||
{
|
||||
/**
|
||||
* @var ScopeManager
|
||||
*/
|
||||
private $scopeManager;
|
||||
|
||||
/**
|
||||
* @var OTSpan
|
||||
*/
|
||||
private $wrapped;
|
||||
|
||||
/**
|
||||
* @var OTScope|null
|
||||
*/
|
||||
private $toRestore;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $finishSpanOnClose;
|
||||
|
||||
/**
|
||||
* Scope constructor.
|
||||
* @param ScopeManager $scopeManager
|
||||
* @param OTSpan $wrapped
|
||||
* @param bool $finishSpanOnClose
|
||||
*/
|
||||
public function __construct(ScopeManager $scopeManager, OTSpan $wrapped, bool $finishSpanOnClose)
|
||||
{
|
||||
$this->scopeManager = $scopeManager;
|
||||
$this->wrapped = $wrapped;
|
||||
$this->finishSpanOnClose = $finishSpanOnClose;
|
||||
$this->toRestore = $scopeManager->getActive();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function close(): void
|
||||
{
|
||||
if ($this->scopeManager->getActive() !== $this) {
|
||||
// This shouldn't happen if users call methods in expected order
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->finishSpanOnClose) {
|
||||
$this->wrapped->finish();
|
||||
}
|
||||
|
||||
$this->scopeManager->setActive($this->toRestore);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getSpan(): OTSpan
|
||||
{
|
||||
return $this->wrapped;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger;
|
||||
|
||||
use OpenTracing\ScopeManager as OTScopeManager;
|
||||
use OpenTracing\Span as OTSpan;
|
||||
use OpenTracing\Scope as OTScope;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
class ScopeManager implements OTScopeManager
|
||||
{
|
||||
/**
|
||||
* @var OTScope
|
||||
*/
|
||||
private $active;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function activate(OTSpan $span, bool $finishSpanOnClose = self::DEFAULT_FINISH_SPAN_ON_CLOSE): OTScope
|
||||
{
|
||||
$this->active = new Scope($this, $span, $finishSpanOnClose);
|
||||
|
||||
return $this->active;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getActive(): ?OTScope
|
||||
{
|
||||
return $this->active;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the scope as active.
|
||||
* @param OTScope|null $scope
|
||||
*/
|
||||
public function setActive(OTScope $scope = null)
|
||||
{
|
||||
$this->active = $scope;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,236 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace Jaeger\Sender;
|
||||
|
||||
use Jaeger\Mapper\SpanToJaegerMapper;
|
||||
use Jaeger\Span as JaegerSpan;
|
||||
use Jaeger\Thrift\Agent\AgentClient;
|
||||
use Jaeger\Thrift\Agent\AgentIf;
|
||||
use Jaeger\Thrift\Batch;
|
||||
use Jaeger\Thrift\Process;
|
||||
use Jaeger\Thrift\Span as JaegerThriftSpan;
|
||||
use Jaeger\Thrift\Tag;
|
||||
use Jaeger\Thrift\TagType;
|
||||
use Jaeger\Tracer;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\NullLogger;
|
||||
use Thrift\Protocol\TBinaryProtocol;
|
||||
use Thrift\Protocol\TCompactProtocol;
|
||||
use Thrift\Transport\TMemoryBuffer;
|
||||
use const Jaeger\JAEGER_HOSTNAME_TAG_KEY;
|
||||
|
||||
class JaegerSender implements SenderInterface
|
||||
{
|
||||
/**
|
||||
* @var JaegerSpan[]
|
||||
*/
|
||||
private $spans = [];
|
||||
|
||||
/**
|
||||
* @var AgentIf
|
||||
*/
|
||||
private $agentClient;
|
||||
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
private $logger;
|
||||
|
||||
/**
|
||||
* @var Tracer
|
||||
*/
|
||||
private $tracer;
|
||||
|
||||
/**
|
||||
* @var SpanToJaegerMapper
|
||||
*/
|
||||
private $mapper;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $jaegerBatchOverheadLength = 512;
|
||||
|
||||
/**
|
||||
* The maximum length of the thrift-objects for a jaeger-batch.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $maxBufferLength = 64000;
|
||||
|
||||
/**
|
||||
* @param AgentIf $agentClient
|
||||
* @param LoggerInterface|null $logger
|
||||
* @param SpanToJaegerMapper|null $mapper
|
||||
*/
|
||||
public function __construct(
|
||||
AgentIf $agentClient,
|
||||
LoggerInterface $logger = null,
|
||||
SpanToJaegerMapper $mapper = null
|
||||
) {
|
||||
$this->agentClient = $agentClient;
|
||||
$this->logger = $logger ?? new NullLogger();
|
||||
$this->mapper = $mapper ?? new SpanToJaegerMapper();
|
||||
}
|
||||
|
||||
|
||||
public function flush(): int
|
||||
{
|
||||
$count = count($this->spans);
|
||||
if ($count === 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$jaegerThriftSpans = $this->makeJaegerBatch($this->spans);
|
||||
|
||||
try {
|
||||
$this->send($jaegerThriftSpans);
|
||||
} catch (\Exception $e) {
|
||||
$this->logger->warning($e->getMessage());
|
||||
}
|
||||
|
||||
$this->spans = [];
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
public function setMaxBufferLength($maxBufferLength)
|
||||
{
|
||||
$this->maxBufferLength = $maxBufferLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param JaegerSpan[] $spans
|
||||
* @return array
|
||||
*/
|
||||
private function makeJaegerBatch(array $spans) : array
|
||||
{
|
||||
/** @var JaegerThriftSpan[] $jaegerSpans */
|
||||
$jaegerSpans = [];
|
||||
|
||||
foreach ($spans as $span) {
|
||||
if (empty($this->tracer)) {
|
||||
$this->tracer = $span->getTracer();
|
||||
}
|
||||
|
||||
$jaegerSpans[] = $this->mapper->mapSpanToJaeger($span);
|
||||
}
|
||||
|
||||
return $jaegerSpans;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param JaegerThriftSpan[] $spans
|
||||
*/
|
||||
private function send(array $spans)
|
||||
{
|
||||
if (empty($this->tracer)) {
|
||||
return ;
|
||||
}
|
||||
|
||||
$chunks = $this->chunkSplit($spans);
|
||||
foreach ($chunks as $chunk) {
|
||||
/** @var JaegerThriftSpan[] $chunk */
|
||||
$this->emitJaegerBatch($chunk);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param JaegerThriftSpan $span
|
||||
*/
|
||||
private function getBufferLength($span)
|
||||
{
|
||||
$memoryBuffer = new TMemoryBuffer();
|
||||
$span->write(new TBinaryProtocol($memoryBuffer));
|
||||
return $memoryBuffer->available();
|
||||
}
|
||||
|
||||
private function chunkSplit(array $spans): array
|
||||
{
|
||||
$actualBufferSize = $this->jaegerBatchOverheadLength;
|
||||
$chunkId = 0;
|
||||
$chunks = [];
|
||||
|
||||
foreach ($spans as $span) {
|
||||
$spanBufferLength = $this->getBufferLength($span);
|
||||
if (!empty($chunks[$chunkId]) && ($actualBufferSize + $spanBufferLength) > $this->maxBufferLength) {
|
||||
// point to next chunk
|
||||
++$chunkId;
|
||||
|
||||
// reset buffer size
|
||||
$actualBufferSize = $this->jaegerBatchOverheadLength;
|
||||
}
|
||||
|
||||
if (!isset($chunks[$chunkId])) {
|
||||
$chunks[$chunkId] = [];
|
||||
}
|
||||
|
||||
$chunks[$chunkId][] = $span;
|
||||
$actualBufferSize += $spanBufferLength;
|
||||
}
|
||||
|
||||
return $chunks;
|
||||
}
|
||||
|
||||
protected function emitJaegerBatch(array $spans)
|
||||
{
|
||||
/** @var Tag[] $tags */
|
||||
$tags = [];
|
||||
|
||||
foreach ($this->tracer->getTags() as $k => $v) {
|
||||
if (!in_array($k, $this->mapper->getSpecialSpanTags())) {
|
||||
if (strpos($k, $this->mapper->getProcessTagsPrefix()) !== 0) {
|
||||
continue ;
|
||||
}
|
||||
|
||||
$quoted = preg_quote($this->mapper->getProcessTagsPrefix());
|
||||
$k = preg_replace(sprintf('/^%s/', $quoted), '', $k);
|
||||
}
|
||||
|
||||
if ($k === JAEGER_HOSTNAME_TAG_KEY) {
|
||||
$k = "hostname";
|
||||
}
|
||||
|
||||
$tags[] = new Tag([
|
||||
"key" => $k,
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => $v
|
||||
]);
|
||||
}
|
||||
|
||||
$tags[] = new Tag([
|
||||
"key" => "format",
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => "jaeger.thrift"
|
||||
]);
|
||||
|
||||
$tags[] = new Tag([
|
||||
"key" => "ip",
|
||||
"vType" => TagType::STRING,
|
||||
"vStr" => $this->tracer->getIpAddress()
|
||||
]);
|
||||
|
||||
$batch = new Batch([
|
||||
"spans" => $spans,
|
||||
"process" => new Process([
|
||||
"serviceName" => $this->tracer->getServiceName(),
|
||||
"tags" => $tags
|
||||
])
|
||||
]);
|
||||
|
||||
$this->agentClient->emitBatch($batch);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param JaegerSpan $span
|
||||
*/
|
||||
public function append(JaegerSpan $span)
|
||||
{
|
||||
$this->spans[] = $span;
|
||||
}
|
||||
|
||||
public function close()
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Sender;
|
||||
|
||||
use Jaeger\Span as JaegerSpan;
|
||||
|
||||
interface SenderInterface
|
||||
{
|
||||
public function flush(): int;
|
||||
public function append(JaegerSpan $span);
|
||||
public function close();
|
||||
}
|
|
@ -0,0 +1,305 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger\Sender;
|
||||
|
||||
use Exception;
|
||||
use Jaeger\Thrift\Agent\AgentClient;
|
||||
use Jaeger\Thrift\Agent\Zipkin\Annotation;
|
||||
use Jaeger\Thrift\Agent\Zipkin\AnnotationType;
|
||||
use Jaeger\Thrift\Agent\Zipkin\BinaryAnnotation;
|
||||
use Jaeger\Thrift\Agent\Zipkin\Endpoint;
|
||||
use Jaeger\Thrift\Agent\Zipkin\Span as ThriftSpan;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\NullLogger;
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Protocol\TCompactProtocol;
|
||||
use Thrift\Transport\TMemoryBuffer;
|
||||
use Jaeger\Span as JaegerSpan;
|
||||
|
||||
use const OpenTracing\Tags\COMPONENT;
|
||||
|
||||
class UdpSender
|
||||
{
|
||||
const CLIENT_ADDR = "ca";
|
||||
const SERVER_ADDR = "sa";
|
||||
|
||||
/**
|
||||
* @var JaegerSpan[]
|
||||
*/
|
||||
private $spans = [];
|
||||
|
||||
/**
|
||||
* @var AgentClient
|
||||
*/
|
||||
private $client;
|
||||
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
private $logger;
|
||||
|
||||
/**
|
||||
* The maximum length of the thrift-objects for a zipkin-batch.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $maxBufferLength;
|
||||
|
||||
/**
|
||||
* The length of the zipkin-batch overhead.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $zipkinBatchOverheadLength = 30;
|
||||
|
||||
/**
|
||||
* UdpSender constructor.
|
||||
*
|
||||
* @param AgentClient $client
|
||||
* @param int $maxBufferLength
|
||||
* @param LoggerInterface|null $logger
|
||||
*/
|
||||
public function __construct(
|
||||
AgentClient $client,
|
||||
int $maxBufferLength,
|
||||
LoggerInterface $logger = null
|
||||
) {
|
||||
$this->client = $client;
|
||||
$this->maxBufferLength = $maxBufferLength;
|
||||
$this->logger = $logger ?? new NullLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param JaegerSpan $span
|
||||
*/
|
||||
public function append(JaegerSpan $span)
|
||||
{
|
||||
$this->spans[] = $span;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int the number of flushed spans
|
||||
*/
|
||||
public function flush(): int
|
||||
{
|
||||
$count = count($this->spans);
|
||||
if ($count === 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$zipkinSpans = $this->makeZipkinBatch($this->spans);
|
||||
|
||||
try {
|
||||
$this->send($zipkinSpans);
|
||||
} catch (Exception $e) {
|
||||
$this->logger->warning($e->getMessage());
|
||||
}
|
||||
|
||||
$this->spans = [];
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
public function close()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Emits the thrift-objects.
|
||||
*
|
||||
* @param array|ThriftSpan[]|TBase[] $thrifts
|
||||
*/
|
||||
private function send(array $thrifts)
|
||||
{
|
||||
foreach ($this->chunkSplit($thrifts) as $chunk) {
|
||||
/* @var $chunk ThriftSpan[] */
|
||||
$this->client->emitZipkinBatch($chunk);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param JaegerSpan[] $spans
|
||||
* @return ThriftSpan[]
|
||||
*/
|
||||
private function makeZipkinBatch(array $spans): array
|
||||
{
|
||||
/** @var ThriftSpan[] */
|
||||
$zipkinSpans = [];
|
||||
|
||||
foreach ($spans as $span) {
|
||||
/** @var JaegerSpan $span */
|
||||
|
||||
$endpoint = $this->makeEndpoint(
|
||||
$span->getTracer()->getIpAddress(),
|
||||
0, // span.port,
|
||||
$span->getTracer()->getServiceName()
|
||||
);
|
||||
|
||||
$timestamp = $span->getStartTime();
|
||||
$duration = $span->getEndTime() - $span->getStartTime();
|
||||
|
||||
$this->addZipkinAnnotations($span, $endpoint);
|
||||
|
||||
$zipkinSpan = new ThriftSpan([
|
||||
'name' => $span->getOperationName(),
|
||||
'id' => $span->getContext()->getSpanId(),
|
||||
'parent_id' => $span->getContext()->getParentId() ?? null,
|
||||
'trace_id' => $span->getContext()->getTraceId(),
|
||||
'annotations' => $this->createAnnotations($span, $endpoint),
|
||||
'binary_annotations' => $span->getTags(),
|
||||
'debug' => $span->isDebug(),
|
||||
'timestamp' => $timestamp,
|
||||
'duration' => $duration,
|
||||
]);
|
||||
|
||||
$zipkinSpans[] = $zipkinSpan;
|
||||
}
|
||||
|
||||
return $zipkinSpans;
|
||||
}
|
||||
|
||||
private function addZipkinAnnotations(JaegerSpan $span, Endpoint $endpoint)
|
||||
{
|
||||
if ($span->isRpc() && $span->peer) {
|
||||
$isClient = $span->isRpcClient();
|
||||
|
||||
$host = $this->makeEndpoint(
|
||||
$span->peer['ipv4'] ?? 0,
|
||||
$span->peer['port'] ?? 0,
|
||||
$span->peer['service_name'] ?? ''
|
||||
);
|
||||
|
||||
$key = ($isClient) ? self::SERVER_ADDR : self::CLIENT_ADDR;
|
||||
|
||||
$peer = $this->makePeerAddressTag($key, $host);
|
||||
$span->tags[$key] = $peer;
|
||||
} else {
|
||||
$tag = $this->makeLocalComponentTag(
|
||||
$span->getComponent() ?? $span->getTracer()->getServiceName(),
|
||||
$endpoint
|
||||
);
|
||||
|
||||
$span->tags[COMPONENT] = $tag;
|
||||
}
|
||||
}
|
||||
|
||||
private function makeLocalComponentTag(string $componentName, Endpoint $endpoint): BinaryAnnotation
|
||||
{
|
||||
return new BinaryAnnotation([
|
||||
'key' => "lc",
|
||||
'value' => $componentName,
|
||||
'annotation_type' => AnnotationType::STRING,
|
||||
'host' => $endpoint,
|
||||
]);
|
||||
}
|
||||
|
||||
private function makeEndpoint(string $ipv4, int $port, string $serviceName): Endpoint
|
||||
{
|
||||
$ipv4 = $this->ipv4ToInt($ipv4);
|
||||
|
||||
return new Endpoint([
|
||||
'ipv4' => $ipv4,
|
||||
'port' => $port,
|
||||
'service_name' => $serviceName,
|
||||
]);
|
||||
}
|
||||
|
||||
private function ipv4ToInt(string $ipv4): int
|
||||
{
|
||||
if ($ipv4 == 'localhost') {
|
||||
$ipv4 = '127.0.0.1';
|
||||
} elseif ($ipv4 == '::1') {
|
||||
$ipv4 = '127.0.0.1';
|
||||
}
|
||||
|
||||
$long = ip2long($ipv4);
|
||||
if (PHP_INT_SIZE === 8) {
|
||||
return $long >> 31 ? $long - (1 << 32) : $long;
|
||||
}
|
||||
return $long;
|
||||
}
|
||||
|
||||
// Used for Zipkin binary annotations like CA/SA (client/server address).
|
||||
// They are modeled as Boolean type with '0x01' as the value.
|
||||
private function makePeerAddressTag(string $key, Endpoint $host): BinaryAnnotation
|
||||
{
|
||||
return new BinaryAnnotation([
|
||||
"key" => $key,
|
||||
"value" => '0x01',
|
||||
"annotation_type" => AnnotationType::BOOL,
|
||||
"host" => $host,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits an array of thrift-objects into several chunks when the buffer limit has been reached.
|
||||
*
|
||||
* @param array|ThriftSpan[]|TBase[] $thrifts
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function chunkSplit(array $thrifts): array
|
||||
{
|
||||
$actualBufferSize = $this->zipkinBatchOverheadLength;
|
||||
$chunkId = 0;
|
||||
$chunks = [];
|
||||
|
||||
foreach ($thrifts as $thrift) {
|
||||
$spanBufferLength = $this->getBufferLength($thrift);
|
||||
|
||||
if (!empty($chunks[$chunkId]) && ($actualBufferSize + $spanBufferLength) > $this->maxBufferLength) {
|
||||
// point to next chunk
|
||||
++$chunkId;
|
||||
|
||||
// reset buffer size
|
||||
$actualBufferSize = $this->zipkinBatchOverheadLength;
|
||||
}
|
||||
|
||||
if (!isset($chunks[$chunkId])) {
|
||||
$chunks[$chunkId] = [];
|
||||
}
|
||||
|
||||
$chunks[$chunkId][] = $thrift;
|
||||
$actualBufferSize += $spanBufferLength;
|
||||
}
|
||||
|
||||
return $chunks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the length of a thrift-object.
|
||||
*
|
||||
* @param ThriftSpan|TBase $thrift
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
private function getBufferLength($thrift): int
|
||||
{
|
||||
$memoryBuffer = new TMemoryBuffer();
|
||||
|
||||
$thrift->write(new TCompactProtocol($memoryBuffer));
|
||||
|
||||
return $memoryBuffer->available();
|
||||
}
|
||||
|
||||
/*
|
||||
* @param JaegerSpan $span
|
||||
* @param Endpoint $endpoint
|
||||
*
|
||||
* @return array|Annotation[]
|
||||
*/
|
||||
private function createAnnotations(JaegerSpan $span, Endpoint $endpoint): array
|
||||
{
|
||||
$annotations = [];
|
||||
|
||||
foreach ($span->getLogs() as $values) {
|
||||
$annotations[] = new Annotation([
|
||||
'timestamp' => $values['timestamp'],
|
||||
'value' => json_encode($values['fields']),
|
||||
'host' => $endpoint,
|
||||
]);
|
||||
}
|
||||
|
||||
return $annotations;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,476 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger;
|
||||
|
||||
use Jaeger\Thrift\Agent\Zipkin\AnnotationType;
|
||||
use Jaeger\Thrift\Agent\Zipkin\BinaryAnnotation;
|
||||
use OpenTracing\Span as OTSpan;
|
||||
use DateTime;
|
||||
use DateTimeInterface;
|
||||
use OpenTracing\SpanContext as OTSpanContext;
|
||||
use const OpenTracing\Tags\COMPONENT;
|
||||
use const OpenTracing\Tags\PEER_HOST_IPV4;
|
||||
use const OpenTracing\Tags\PEER_PORT;
|
||||
use const OpenTracing\Tags\PEER_SERVICE;
|
||||
use const OpenTracing\Tags\SPAN_KIND;
|
||||
use const OpenTracing\Tags\SPAN_KIND_MESSAGE_BUS_CONSUMER;
|
||||
use const OpenTracing\Tags\SPAN_KIND_MESSAGE_BUS_PRODUCER;
|
||||
use const OpenTracing\Tags\SPAN_KIND_RPC_CLIENT;
|
||||
use const OpenTracing\Tags\SPAN_KIND_RPC_SERVER;
|
||||
|
||||
class Span implements OTSpan
|
||||
{
|
||||
/**
|
||||
* @var Tracer
|
||||
*/
|
||||
private $tracer;
|
||||
|
||||
/**
|
||||
* @var SpanContext
|
||||
*/
|
||||
private $context;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $operationName;
|
||||
|
||||
/**
|
||||
* @var int|float|DateTime|null
|
||||
*/
|
||||
private $startTime;
|
||||
|
||||
/**
|
||||
* @var int|float|DateTime|null
|
||||
*/
|
||||
private $endTime;
|
||||
|
||||
/**
|
||||
* SPAN_RPC_CLIENT
|
||||
* @var null|string
|
||||
*/
|
||||
private $kind;
|
||||
|
||||
/**
|
||||
* @var array|null
|
||||
*/
|
||||
public $peer;
|
||||
|
||||
/**
|
||||
* @var string|null
|
||||
*/
|
||||
private $component;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $logs = [];
|
||||
|
||||
/**
|
||||
* @var BinaryAnnotation[]
|
||||
*/
|
||||
public $tags = [];
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $debug = false;
|
||||
|
||||
/**
|
||||
* Span constructor.
|
||||
* @param SpanContext $context
|
||||
* @param Tracer $tracer
|
||||
* @param string $operationName
|
||||
* @param array $tags
|
||||
* @param int|float|DateTime|null $startTime
|
||||
*/
|
||||
public function __construct(
|
||||
SpanContext $context,
|
||||
Tracer $tracer,
|
||||
string $operationName,
|
||||
array $tags = [],
|
||||
$startTime = null
|
||||
) {
|
||||
$this->context = $context;
|
||||
$this->tracer = $tracer;
|
||||
|
||||
$this->operationName = $operationName;
|
||||
$this->startTime = $this->microTime($startTime);
|
||||
$this->endTime = null;
|
||||
$this->kind = null;
|
||||
$this->peer = null;
|
||||
$this->component = null;
|
||||
|
||||
foreach ($tags as $key => $value) {
|
||||
$this->setTag($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts time to microtime int
|
||||
* - int represents microseconds
|
||||
* - float represents seconds
|
||||
*
|
||||
* @param int|float|DateTime|null $time
|
||||
* @return int
|
||||
*/
|
||||
protected function microTime($time): int
|
||||
{
|
||||
if ($time === null) {
|
||||
return $this->timestampMicro();
|
||||
}
|
||||
|
||||
if ($time instanceof \DateTimeInterface) {
|
||||
return (int)round($time->format('U.u') * 1000000, 0);
|
||||
}
|
||||
|
||||
if (is_int($time)) {
|
||||
return $time;
|
||||
}
|
||||
|
||||
if (is_float($time)) {
|
||||
return (int)round($time * 1000000, 0);
|
||||
}
|
||||
|
||||
throw new \InvalidArgumentException(sprintf(
|
||||
'Time should be one of the types int|float|DateTime|null, got %s.',
|
||||
gettype($time)
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Tracer
|
||||
*/
|
||||
public function getTracer(): Tracer
|
||||
{
|
||||
return $this->tracer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isDebug(): bool
|
||||
{
|
||||
return $this->debug;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getStartTime(): int
|
||||
{
|
||||
return $this->startTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getEndTime()
|
||||
{
|
||||
return $this->endTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getOperationName(): string
|
||||
{
|
||||
return $this->operationName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getComponent()
|
||||
{
|
||||
// TODO
|
||||
return $this->component;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @return SpanContext
|
||||
*/
|
||||
public function getContext(): OTSpanContext
|
||||
{
|
||||
return $this->context;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function finish($finishTime = null, array $logRecords = []): void
|
||||
{
|
||||
if (!$this->isSampled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($logRecords as $logRecord) {
|
||||
$this->log($logRecord);
|
||||
}
|
||||
|
||||
$this->endTime = $this->microTime($finishTime);
|
||||
$this->tracer->reportSpan($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the trace should be measured.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isSampled(): bool
|
||||
{
|
||||
$context = $this->getContext();
|
||||
|
||||
return ($context->getFlags() & SAMPLED_FLAG) == SAMPLED_FLAG;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function overwriteOperationName(string $newOperationName): void
|
||||
{
|
||||
// TODO log warning
|
||||
$this->operationName = $newOperationName;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param array $tags
|
||||
* @return void
|
||||
*/
|
||||
public function setTags($tags)
|
||||
{
|
||||
foreach ($tags as $key => $value) {
|
||||
$this->setTag($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setTag(string $key, $value): void
|
||||
{
|
||||
if ($this->isSampled()) {
|
||||
$special = self::SPECIAL_TAGS[$key] ?? null;
|
||||
$handled = false;
|
||||
|
||||
if ($special !== null && is_callable([$this, $special])) {
|
||||
$handled = $this->$special($value);
|
||||
}
|
||||
|
||||
if (!$handled) {
|
||||
$tag = $this->makeTag($key, $value);
|
||||
$this->tags[$key] = $tag;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const SPECIAL_TAGS = [
|
||||
PEER_SERVICE => 'setPeerService',
|
||||
PEER_HOST_IPV4 => 'setPeerHostIpv4',
|
||||
PEER_PORT => 'setPeerPort',
|
||||
SPAN_KIND => 'setSpanKind',
|
||||
COMPONENT => 'setComponent',
|
||||
];
|
||||
|
||||
/**
|
||||
* Sets a low-cardinality identifier of the module, library,
|
||||
* or package that is generating a span.
|
||||
*
|
||||
* @see Span::setTag()
|
||||
*
|
||||
* @param string $value
|
||||
* @return bool
|
||||
*/
|
||||
private function setComponent($value): bool
|
||||
{
|
||||
$this->component = $value;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
private function setSpanKind($value): bool
|
||||
{
|
||||
$validSpanKinds = [
|
||||
SPAN_KIND_RPC_CLIENT,
|
||||
SPAN_KIND_RPC_SERVER,
|
||||
SPAN_KIND_MESSAGE_BUS_CONSUMER,
|
||||
SPAN_KIND_MESSAGE_BUS_PRODUCER,
|
||||
];
|
||||
|
||||
if ($value === null || in_array($value, $validSpanKinds, true)) {
|
||||
$this->kind = $value;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getKind(): ?string
|
||||
{
|
||||
return $this->kind;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
private function setPeerPort($value): bool
|
||||
{
|
||||
if ($this->peer === null) {
|
||||
$this->peer = ['port' => $value];
|
||||
} else {
|
||||
$this->peer['port'] = $value;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
private function setPeerHostIpv4($value): bool
|
||||
{
|
||||
if ($this->peer === null) {
|
||||
$this->peer = ['ipv4' => $value];
|
||||
} else {
|
||||
$this->peer['ipv4'] = $value;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
private function setPeerService($value): bool
|
||||
{
|
||||
if ($this->peer === null) {
|
||||
$this->peer = ['service_name' => $value];
|
||||
} else {
|
||||
$this->peer['service_name'] = $value;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isRpc(): bool
|
||||
{
|
||||
return $this->kind == SPAN_KIND_RPC_CLIENT || $this->kind == SPAN_KIND_RPC_SERVER;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isRpcClient(): bool
|
||||
{
|
||||
return $this->kind == SPAN_KIND_RPC_CLIENT;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function log(array $fields = [], $timestamp = null): void
|
||||
{
|
||||
$timestamp = $this->microTime($timestamp);
|
||||
if ($timestamp < $this->getStartTime()) {
|
||||
$timestamp = $this->timestampMicro();
|
||||
}
|
||||
|
||||
$this->logs[] = [
|
||||
'fields' => $fields,
|
||||
'timestamp' => $timestamp,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the logs.
|
||||
*
|
||||
* [
|
||||
* [
|
||||
* 'timestamp' => timestamp in microsecond,
|
||||
* 'fields' => [
|
||||
* 'error' => 'message',
|
||||
* ]
|
||||
* ]
|
||||
* ]
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLogs(): array
|
||||
{
|
||||
return $this->logs;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function addBaggageItem(string $key, string $value): void
|
||||
{
|
||||
$this->context = $this->context->withBaggageItem($key, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getBaggageItem(string $key): ?string
|
||||
{
|
||||
return $this->context->getBaggageItem($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getTags(): array
|
||||
{
|
||||
return $this->tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
private function timestampMicro(): int
|
||||
{
|
||||
return round(microtime(true) * 1000000);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @return BinaryAnnotation
|
||||
*/
|
||||
private function makeTag(string $key, $value): BinaryAnnotation
|
||||
{
|
||||
$valueType = gettype($value);
|
||||
$annotationType = null;
|
||||
switch ($valueType) {
|
||||
case "boolean":
|
||||
$annotationType = AnnotationType::BOOL;
|
||||
break;
|
||||
case "integer":
|
||||
$annotationType = AnnotationType::I64;
|
||||
break;
|
||||
case "double":
|
||||
$annotationType = AnnotationType::DOUBLE;
|
||||
break;
|
||||
default:
|
||||
$annotationType = AnnotationType::STRING;
|
||||
$value = (string)$value;
|
||||
if (strlen($value) > 1024) {
|
||||
$value = substr($value, 0, 1024);
|
||||
}
|
||||
}
|
||||
|
||||
return new BinaryAnnotation([
|
||||
'key' => $key,
|
||||
'value' => $value,
|
||||
'annotation_type' => $annotationType,
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
<?php
|
||||
|
||||
namespace Jaeger;
|
||||
|
||||
use ArrayIterator;
|
||||
use OpenTracing\SpanContext as OTSpanContext;
|
||||
|
||||
class SpanContext implements OTSpanContext
|
||||
{
|
||||
private $traceId;
|
||||
|
||||
private $spanId;
|
||||
|
||||
private $parentId;
|
||||
|
||||
private $flags;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $baggage;
|
||||
|
||||
private $debugId;
|
||||
|
||||
/**
|
||||
* SpanContext constructor.
|
||||
*
|
||||
* @param string $traceId
|
||||
* @param string $spanId
|
||||
* @param string $parentId
|
||||
* @param int|null $flags
|
||||
* @param array $baggage
|
||||
* @param int|null $debugId
|
||||
*/
|
||||
public function __construct($traceId, $spanId, $parentId, $flags = null, $baggage = [], $debugId = null)
|
||||
{
|
||||
$this->traceId = $traceId;
|
||||
$this->spanId = $spanId;
|
||||
$this->parentId = $parentId;
|
||||
$this->flags = $flags;
|
||||
$this->baggage = is_array($baggage) ? $baggage : [];
|
||||
$this->debugId = $debugId;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
#[\ReturnTypeWillChange]
|
||||
public function getIterator()
|
||||
{
|
||||
return new ArrayIterator($this->baggage);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getBaggageItem(string $key): ?string
|
||||
{
|
||||
return array_key_exists($key, $this->baggage) ? $this->baggage[$key] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $value
|
||||
* @return SpanContext
|
||||
*/
|
||||
public function withBaggageItem(string $key, string $value): OTSpanContext
|
||||
{
|
||||
return new self(
|
||||
$this->traceId,
|
||||
$this->spanId,
|
||||
$this->parentId,
|
||||
$this->flags,
|
||||
[$key => $value] + $this->baggage
|
||||
);
|
||||
}
|
||||
|
||||
public function getTraceId()
|
||||
{
|
||||
return $this->traceId;
|
||||
}
|
||||
|
||||
public function getParentId()
|
||||
{
|
||||
return $this->parentId;
|
||||
}
|
||||
|
||||
public function getSpanId()
|
||||
{
|
||||
return $this->spanId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the span context flags.
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getFlags()
|
||||
{
|
||||
return $this->flags;
|
||||
}
|
||||
|
||||
public function getBaggage()
|
||||
{
|
||||
return $this->baggage;
|
||||
}
|
||||
|
||||
public function getDebugId()
|
||||
{
|
||||
return $this->debugId;
|
||||
}
|
||||
|
||||
public function isDebugIdContainerOnly(): bool
|
||||
{
|
||||
return ($this->traceId === null) && ($this->debugId !== null);
|
||||
}
|
||||
}
|
76
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/AgentClient.php
vendored
Normal file
76
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/AgentClient.php
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class AgentClient implements \Jaeger\Thrift\Agent\AgentIf {
|
||||
protected $input_ = null;
|
||||
protected $output_ = null;
|
||||
|
||||
protected $seqid_ = 0;
|
||||
|
||||
public function __construct($input, $output=null) {
|
||||
$this->input_ = $input;
|
||||
$this->output_ = $output ? $output : $input;
|
||||
}
|
||||
|
||||
public function emitZipkinBatch(array $spans)
|
||||
{
|
||||
$this->send_emitZipkinBatch($spans);
|
||||
}
|
||||
|
||||
public function send_emitZipkinBatch(array $spans)
|
||||
{
|
||||
$args = new \Jaeger\Thrift\Agent\Agent_emitZipkinBatch_args();
|
||||
$args->spans = $spans;
|
||||
$bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
|
||||
if ($bin_accel)
|
||||
{
|
||||
thrift_protocol_write_binary($this->output_, 'emitZipkinBatch', TMessageType::ONEWAY, $args, $this->seqid_, $this->output_->isStrictWrite());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_->writeMessageBegin('emitZipkinBatch', TMessageType::ONEWAY, $this->seqid_);
|
||||
$args->write($this->output_);
|
||||
$this->output_->writeMessageEnd();
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
||||
public function emitBatch(\Jaeger\Thrift\Batch $batch)
|
||||
{
|
||||
$this->send_emitBatch($batch);
|
||||
}
|
||||
|
||||
public function send_emitBatch(\Jaeger\Thrift\Batch $batch)
|
||||
{
|
||||
$args = new \Jaeger\Thrift\Agent\Agent_emitBatch_args();
|
||||
$args->batch = $batch;
|
||||
$bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
|
||||
if ($bin_accel)
|
||||
{
|
||||
thrift_protocol_write_binary($this->output_, 'emitBatch', TMessageType::ONEWAY, $args, $this->seqid_, $this->output_->isStrictWrite());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_->writeMessageBegin('emitBatch', TMessageType::ONEWAY, $this->seqid_);
|
||||
$args->write($this->output_);
|
||||
$this->output_->writeMessageEnd();
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
interface AgentIf {
|
||||
/**
|
||||
* @param \Jaeger\Thrift\Agent\Zipkin\Span[] $spans
|
||||
*/
|
||||
public function emitZipkinBatch(array $spans);
|
||||
/**
|
||||
* @param \Jaeger\Thrift\Batch $batch
|
||||
*/
|
||||
public function emitBatch(\Jaeger\Thrift\Batch $batch);
|
||||
}
|
||||
|
||||
|
56
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Agent_emitBatch_args.php
vendored
Normal file
56
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Agent_emitBatch_args.php
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class Agent_emitBatch_args extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'batch',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Batch',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Batch
|
||||
*/
|
||||
public $batch = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Agent_emitBatch_args';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('Agent_emitBatch_args', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('Agent_emitBatch_args', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
60
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Agent_emitZipkinBatch_args.php
vendored
Normal file
60
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Agent_emitZipkinBatch_args.php
vendored
Normal file
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class Agent_emitZipkinBatch_args extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'spans',
|
||||
'isRequired' => false,
|
||||
'type' => TType::LST,
|
||||
'etype' => TType::STRUCT,
|
||||
'elem' => array(
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\Zipkin\Span',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\Zipkin\Span[]
|
||||
*/
|
||||
public $spans = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Agent_emitZipkinBatch_args';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('Agent_emitZipkinBatch_args', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('Agent_emitZipkinBatch_args', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
83
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/AggregationValidatorClient.php
vendored
Normal file
83
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/AggregationValidatorClient.php
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class AggregationValidatorClient implements \Jaeger\Thrift\Agent\AggregationValidatorIf {
|
||||
protected $input_ = null;
|
||||
protected $output_ = null;
|
||||
|
||||
protected $seqid_ = 0;
|
||||
|
||||
public function __construct($input, $output=null) {
|
||||
$this->input_ = $input;
|
||||
$this->output_ = $output ? $output : $input;
|
||||
}
|
||||
|
||||
public function validateTrace($traceId)
|
||||
{
|
||||
$this->send_validateTrace($traceId);
|
||||
return $this->recv_validateTrace();
|
||||
}
|
||||
|
||||
public function send_validateTrace($traceId)
|
||||
{
|
||||
$args = new \Jaeger\Thrift\Agent\AggregationValidator_validateTrace_args();
|
||||
$args->traceId = $traceId;
|
||||
$bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
|
||||
if ($bin_accel)
|
||||
{
|
||||
thrift_protocol_write_binary($this->output_, 'validateTrace', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_->writeMessageBegin('validateTrace', TMessageType::CALL, $this->seqid_);
|
||||
$args->write($this->output_);
|
||||
$this->output_->writeMessageEnd();
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
||||
|
||||
public function recv_validateTrace()
|
||||
{
|
||||
$bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
|
||||
if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Jaeger\Thrift\Agent\AggregationValidator_validateTrace_result', $this->input_->isStrictRead());
|
||||
else
|
||||
{
|
||||
$rseqid = 0;
|
||||
$fname = null;
|
||||
$mtype = 0;
|
||||
|
||||
$this->input_->readMessageBegin($fname, $mtype, $rseqid);
|
||||
if ($mtype == TMessageType::EXCEPTION) {
|
||||
$x = new TApplicationException();
|
||||
$x->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
throw $x;
|
||||
}
|
||||
$result = new \Jaeger\Thrift\Agent\AggregationValidator_validateTrace_result();
|
||||
$result->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
}
|
||||
if ($result->success !== null) {
|
||||
return $result->success;
|
||||
}
|
||||
throw new \Exception("validateTrace failed: unknown result");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
27
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/AggregationValidatorIf.php
vendored
Normal file
27
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/AggregationValidatorIf.php
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
interface AggregationValidatorIf {
|
||||
/**
|
||||
* @param string $traceId
|
||||
* @return \Jaeger\Thrift\Agent\ValidateTraceResponse
|
||||
*/
|
||||
public function validateTrace($traceId);
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class AggregationValidator_validateTrace_args extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'traceId',
|
||||
'isRequired' => true,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $traceId = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'AggregationValidator_validateTrace_args';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('AggregationValidator_validateTrace_args', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('AggregationValidator_validateTrace_args', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class AggregationValidator_validateTrace_result extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
0 => array(
|
||||
'var' => 'success',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\ValidateTraceResponse',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\ValidateTraceResponse
|
||||
*/
|
||||
public $success = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'AggregationValidator_validateTrace_result';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('AggregationValidator_validateTrace_result', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('AggregationValidator_validateTrace_result', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
65
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/BaggageRestriction.php
vendored
Normal file
65
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/BaggageRestriction.php
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class BaggageRestriction extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'baggageKey',
|
||||
'isRequired' => true,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'maxValueLength',
|
||||
'isRequired' => true,
|
||||
'type' => TType::I32,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $baggageKey = null;
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $maxValueLength = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'BaggageRestriction';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('BaggageRestriction', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('BaggageRestriction', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
83
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/BaggageRestrictionManagerClient.php
vendored
Normal file
83
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/BaggageRestrictionManagerClient.php
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class BaggageRestrictionManagerClient implements \Jaeger\Thrift\Agent\BaggageRestrictionManagerIf {
|
||||
protected $input_ = null;
|
||||
protected $output_ = null;
|
||||
|
||||
protected $seqid_ = 0;
|
||||
|
||||
public function __construct($input, $output=null) {
|
||||
$this->input_ = $input;
|
||||
$this->output_ = $output ? $output : $input;
|
||||
}
|
||||
|
||||
public function getBaggageRestrictions($serviceName)
|
||||
{
|
||||
$this->send_getBaggageRestrictions($serviceName);
|
||||
return $this->recv_getBaggageRestrictions();
|
||||
}
|
||||
|
||||
public function send_getBaggageRestrictions($serviceName)
|
||||
{
|
||||
$args = new \Jaeger\Thrift\Agent\BaggageRestrictionManager_getBaggageRestrictions_args();
|
||||
$args->serviceName = $serviceName;
|
||||
$bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
|
||||
if ($bin_accel)
|
||||
{
|
||||
thrift_protocol_write_binary($this->output_, 'getBaggageRestrictions', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_->writeMessageBegin('getBaggageRestrictions', TMessageType::CALL, $this->seqid_);
|
||||
$args->write($this->output_);
|
||||
$this->output_->writeMessageEnd();
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
||||
|
||||
public function recv_getBaggageRestrictions()
|
||||
{
|
||||
$bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
|
||||
if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Jaeger\Thrift\Agent\BaggageRestrictionManager_getBaggageRestrictions_result', $this->input_->isStrictRead());
|
||||
else
|
||||
{
|
||||
$rseqid = 0;
|
||||
$fname = null;
|
||||
$mtype = 0;
|
||||
|
||||
$this->input_->readMessageBegin($fname, $mtype, $rseqid);
|
||||
if ($mtype == TMessageType::EXCEPTION) {
|
||||
$x = new TApplicationException();
|
||||
$x->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
throw $x;
|
||||
}
|
||||
$result = new \Jaeger\Thrift\Agent\BaggageRestrictionManager_getBaggageRestrictions_result();
|
||||
$result->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
}
|
||||
if ($result->success !== null) {
|
||||
return $result->success;
|
||||
}
|
||||
throw new \Exception("getBaggageRestrictions failed: unknown result");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
31
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/BaggageRestrictionManagerIf.php
vendored
Normal file
31
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/BaggageRestrictionManagerIf.php
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
interface BaggageRestrictionManagerIf {
|
||||
/**
|
||||
* getBaggageRestrictions retrieves the baggage restrictions for a specific service.
|
||||
* Usually, baggageRestrictions apply to all services however there may be situations
|
||||
* where a baggageKey might only be allowed to be set by a specific service.
|
||||
*
|
||||
* @param string $serviceName
|
||||
* @return \Jaeger\Thrift\Agent\BaggageRestriction[]
|
||||
*/
|
||||
public function getBaggageRestrictions($serviceName);
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class BaggageRestrictionManager_getBaggageRestrictions_args extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'serviceName',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $serviceName = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'BaggageRestrictionManager_getBaggageRestrictions_args';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('BaggageRestrictionManager_getBaggageRestrictions_args', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('BaggageRestrictionManager_getBaggageRestrictions_args', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class BaggageRestrictionManager_getBaggageRestrictions_result extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
0 => array(
|
||||
'var' => 'success',
|
||||
'isRequired' => false,
|
||||
'type' => TType::LST,
|
||||
'etype' => TType::STRUCT,
|
||||
'elem' => array(
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\BaggageRestriction',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\BaggageRestriction[]
|
||||
*/
|
||||
public $success = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'BaggageRestrictionManager_getBaggageRestrictions_result';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('BaggageRestrictionManager_getBaggageRestrictions_result', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('BaggageRestrictionManager_getBaggageRestrictions_result', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
61
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Dependencies.php
vendored
Normal file
61
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Dependencies.php
vendored
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class Dependencies extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'links',
|
||||
'isRequired' => true,
|
||||
'type' => TType::LST,
|
||||
'etype' => TType::STRUCT,
|
||||
'elem' => array(
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\DependencyLink',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\DependencyLink[]
|
||||
*/
|
||||
public $links = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Dependencies';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('Dependencies', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('Dependencies', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
105
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/DependencyClient.php
vendored
Normal file
105
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/DependencyClient.php
vendored
Normal file
|
@ -0,0 +1,105 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class DependencyClient implements \Jaeger\Thrift\Agent\DependencyIf {
|
||||
protected $input_ = null;
|
||||
protected $output_ = null;
|
||||
|
||||
protected $seqid_ = 0;
|
||||
|
||||
public function __construct($input, $output=null) {
|
||||
$this->input_ = $input;
|
||||
$this->output_ = $output ? $output : $input;
|
||||
}
|
||||
|
||||
public function getDependenciesForTrace($traceId)
|
||||
{
|
||||
$this->send_getDependenciesForTrace($traceId);
|
||||
return $this->recv_getDependenciesForTrace();
|
||||
}
|
||||
|
||||
public function send_getDependenciesForTrace($traceId)
|
||||
{
|
||||
$args = new \Jaeger\Thrift\Agent\Dependency_getDependenciesForTrace_args();
|
||||
$args->traceId = $traceId;
|
||||
$bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
|
||||
if ($bin_accel)
|
||||
{
|
||||
thrift_protocol_write_binary($this->output_, 'getDependenciesForTrace', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_->writeMessageBegin('getDependenciesForTrace', TMessageType::CALL, $this->seqid_);
|
||||
$args->write($this->output_);
|
||||
$this->output_->writeMessageEnd();
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
||||
|
||||
public function recv_getDependenciesForTrace()
|
||||
{
|
||||
$bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
|
||||
if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Jaeger\Thrift\Agent\Dependency_getDependenciesForTrace_result', $this->input_->isStrictRead());
|
||||
else
|
||||
{
|
||||
$rseqid = 0;
|
||||
$fname = null;
|
||||
$mtype = 0;
|
||||
|
||||
$this->input_->readMessageBegin($fname, $mtype, $rseqid);
|
||||
if ($mtype == TMessageType::EXCEPTION) {
|
||||
$x = new TApplicationException();
|
||||
$x->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
throw $x;
|
||||
}
|
||||
$result = new \Jaeger\Thrift\Agent\Dependency_getDependenciesForTrace_result();
|
||||
$result->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
}
|
||||
if ($result->success !== null) {
|
||||
return $result->success;
|
||||
}
|
||||
throw new \Exception("getDependenciesForTrace failed: unknown result");
|
||||
}
|
||||
|
||||
public function saveDependencies(\Jaeger\Thrift\Agent\Dependencies $dependencies)
|
||||
{
|
||||
$this->send_saveDependencies($dependencies);
|
||||
}
|
||||
|
||||
public function send_saveDependencies(\Jaeger\Thrift\Agent\Dependencies $dependencies)
|
||||
{
|
||||
$args = new \Jaeger\Thrift\Agent\Dependency_saveDependencies_args();
|
||||
$args->dependencies = $dependencies;
|
||||
$bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
|
||||
if ($bin_accel)
|
||||
{
|
||||
thrift_protocol_write_binary($this->output_, 'saveDependencies', TMessageType::ONEWAY, $args, $this->seqid_, $this->output_->isStrictWrite());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_->writeMessageBegin('saveDependencies', TMessageType::ONEWAY, $this->seqid_);
|
||||
$args->write($this->output_);
|
||||
$this->output_->writeMessageEnd();
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
31
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/DependencyIf.php
vendored
Normal file
31
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/DependencyIf.php
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
interface DependencyIf {
|
||||
/**
|
||||
* @param string $traceId
|
||||
* @return \Jaeger\Thrift\Agent\Dependencies
|
||||
*/
|
||||
public function getDependenciesForTrace($traceId);
|
||||
/**
|
||||
* @param \Jaeger\Thrift\Agent\Dependencies $dependencies
|
||||
*/
|
||||
public function saveDependencies(\Jaeger\Thrift\Agent\Dependencies $dependencies);
|
||||
}
|
||||
|
||||
|
74
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/DependencyLink.php
vendored
Normal file
74
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/DependencyLink.php
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class DependencyLink extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'parent',
|
||||
'isRequired' => true,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'child',
|
||||
'isRequired' => true,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
4 => array(
|
||||
'var' => 'callCount',
|
||||
'isRequired' => true,
|
||||
'type' => TType::I64,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $parent = null;
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $child = null;
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $callCount = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'DependencyLink';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('DependencyLink', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('DependencyLink', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class Dependency_getDependenciesForTrace_args extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'traceId',
|
||||
'isRequired' => true,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $traceId = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Dependency_getDependenciesForTrace_args';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('Dependency_getDependenciesForTrace_args', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('Dependency_getDependenciesForTrace_args', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class Dependency_getDependenciesForTrace_result extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
0 => array(
|
||||
'var' => 'success',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\Dependencies',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\Dependencies
|
||||
*/
|
||||
public $success = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Dependency_getDependenciesForTrace_result';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('Dependency_getDependenciesForTrace_result', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('Dependency_getDependenciesForTrace_result', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class Dependency_saveDependencies_args extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'dependencies',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\Dependencies',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\Dependencies
|
||||
*/
|
||||
public $dependencies = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Dependency_saveDependencies_args';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('Dependency_saveDependencies_args', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('Dependency_saveDependencies_args', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
66
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/OperationSamplingStrategy.php
vendored
Normal file
66
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/OperationSamplingStrategy.php
vendored
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class OperationSamplingStrategy extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'operation',
|
||||
'isRequired' => true,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'probabilisticSampling',
|
||||
'isRequired' => true,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\ProbabilisticSamplingStrategy',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $operation = null;
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\ProbabilisticSamplingStrategy
|
||||
*/
|
||||
public $probabilisticSampling = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'OperationSamplingStrategy';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('OperationSamplingStrategy', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('OperationSamplingStrategy', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
88
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/PerOperationSamplingStrategies.php
vendored
Normal file
88
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/PerOperationSamplingStrategies.php
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class PerOperationSamplingStrategies extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'defaultSamplingProbability',
|
||||
'isRequired' => true,
|
||||
'type' => TType::DOUBLE,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'defaultLowerBoundTracesPerSecond',
|
||||
'isRequired' => true,
|
||||
'type' => TType::DOUBLE,
|
||||
),
|
||||
3 => array(
|
||||
'var' => 'perOperationStrategies',
|
||||
'isRequired' => true,
|
||||
'type' => TType::LST,
|
||||
'etype' => TType::STRUCT,
|
||||
'elem' => array(
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\OperationSamplingStrategy',
|
||||
),
|
||||
),
|
||||
4 => array(
|
||||
'var' => 'defaultUpperBoundTracesPerSecond',
|
||||
'isRequired' => false,
|
||||
'type' => TType::DOUBLE,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var double
|
||||
*/
|
||||
public $defaultSamplingProbability = null;
|
||||
/**
|
||||
* @var double
|
||||
*/
|
||||
public $defaultLowerBoundTracesPerSecond = null;
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\OperationSamplingStrategy[]
|
||||
*/
|
||||
public $perOperationStrategies = null;
|
||||
/**
|
||||
* @var double
|
||||
*/
|
||||
public $defaultUpperBoundTracesPerSecond = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'PerOperationSamplingStrategies';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('PerOperationSamplingStrategies', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('PerOperationSamplingStrategies', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
56
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/ProbabilisticSamplingStrategy.php
vendored
Normal file
56
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/ProbabilisticSamplingStrategy.php
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class ProbabilisticSamplingStrategy extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'samplingRate',
|
||||
'isRequired' => true,
|
||||
'type' => TType::DOUBLE,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var double
|
||||
*/
|
||||
public $samplingRate = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'ProbabilisticSamplingStrategy';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('ProbabilisticSamplingStrategy', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('ProbabilisticSamplingStrategy', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
56
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/RateLimitingSamplingStrategy.php
vendored
Normal file
56
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/RateLimitingSamplingStrategy.php
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class RateLimitingSamplingStrategy extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'maxTracesPerSecond',
|
||||
'isRequired' => true,
|
||||
'type' => TType::I16,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $maxTracesPerSecond = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'RateLimitingSamplingStrategy';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('RateLimitingSamplingStrategy', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('RateLimitingSamplingStrategy', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
83
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingManagerClient.php
vendored
Normal file
83
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingManagerClient.php
vendored
Normal file
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class SamplingManagerClient implements \Jaeger\Thrift\Agent\SamplingManagerIf {
|
||||
protected $input_ = null;
|
||||
protected $output_ = null;
|
||||
|
||||
protected $seqid_ = 0;
|
||||
|
||||
public function __construct($input, $output=null) {
|
||||
$this->input_ = $input;
|
||||
$this->output_ = $output ? $output : $input;
|
||||
}
|
||||
|
||||
public function getSamplingStrategy($serviceName)
|
||||
{
|
||||
$this->send_getSamplingStrategy($serviceName);
|
||||
return $this->recv_getSamplingStrategy();
|
||||
}
|
||||
|
||||
public function send_getSamplingStrategy($serviceName)
|
||||
{
|
||||
$args = new \Jaeger\Thrift\Agent\SamplingManager_getSamplingStrategy_args();
|
||||
$args->serviceName = $serviceName;
|
||||
$bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
|
||||
if ($bin_accel)
|
||||
{
|
||||
thrift_protocol_write_binary($this->output_, 'getSamplingStrategy', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_->writeMessageBegin('getSamplingStrategy', TMessageType::CALL, $this->seqid_);
|
||||
$args->write($this->output_);
|
||||
$this->output_->writeMessageEnd();
|
||||
$this->output_->getTransport()->flush();
|
||||
}
|
||||
}
|
||||
|
||||
public function recv_getSamplingStrategy()
|
||||
{
|
||||
$bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
|
||||
if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Jaeger\Thrift\Agent\SamplingManager_getSamplingStrategy_result', $this->input_->isStrictRead());
|
||||
else
|
||||
{
|
||||
$rseqid = 0;
|
||||
$fname = null;
|
||||
$mtype = 0;
|
||||
|
||||
$this->input_->readMessageBegin($fname, $mtype, $rseqid);
|
||||
if ($mtype == TMessageType::EXCEPTION) {
|
||||
$x = new TApplicationException();
|
||||
$x->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
throw $x;
|
||||
}
|
||||
$result = new \Jaeger\Thrift\Agent\SamplingManager_getSamplingStrategy_result();
|
||||
$result->read($this->input_);
|
||||
$this->input_->readMessageEnd();
|
||||
}
|
||||
if ($result->success !== null) {
|
||||
return $result->success;
|
||||
}
|
||||
throw new \Exception("getSamplingStrategy failed: unknown result");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
27
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingManagerIf.php
vendored
Normal file
27
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingManagerIf.php
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
interface SamplingManagerIf {
|
||||
/**
|
||||
* @param string $serviceName
|
||||
* @return \Jaeger\Thrift\Agent\SamplingStrategyResponse
|
||||
*/
|
||||
public function getSamplingStrategy($serviceName);
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class SamplingManager_getSamplingStrategy_args extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'serviceName',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $serviceName = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'SamplingManager_getSamplingStrategy_args';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('SamplingManager_getSamplingStrategy_args', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('SamplingManager_getSamplingStrategy_args', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class SamplingManager_getSamplingStrategy_result extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
0 => array(
|
||||
'var' => 'success',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\SamplingStrategyResponse',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\SamplingStrategyResponse
|
||||
*/
|
||||
public $success = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'SamplingManager_getSamplingStrategy_result';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('SamplingManager_getSamplingStrategy_result', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('SamplingManager_getSamplingStrategy_result', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
86
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingStrategyResponse.php
vendored
Normal file
86
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingStrategyResponse.php
vendored
Normal file
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class SamplingStrategyResponse extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'strategyType',
|
||||
'isRequired' => true,
|
||||
'type' => TType::I32,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'probabilisticSampling',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\ProbabilisticSamplingStrategy',
|
||||
),
|
||||
3 => array(
|
||||
'var' => 'rateLimitingSampling',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\RateLimitingSamplingStrategy',
|
||||
),
|
||||
4 => array(
|
||||
'var' => 'operationSampling',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\PerOperationSamplingStrategies',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $strategyType = null;
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\ProbabilisticSamplingStrategy
|
||||
*/
|
||||
public $probabilisticSampling = null;
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\RateLimitingSamplingStrategy
|
||||
*/
|
||||
public $rateLimitingSampling = null;
|
||||
/**
|
||||
* @var \Jaeger\Thrift\Agent\PerOperationSamplingStrategies
|
||||
*/
|
||||
public $operationSampling = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'SamplingStrategyResponse';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('SamplingStrategyResponse', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('SamplingStrategyResponse', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
28
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingStrategyType.php
vendored
Normal file
28
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/SamplingStrategyType.php
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
final class SamplingStrategyType {
|
||||
const PROBABILISTIC = 0;
|
||||
const RATE_LIMITING = 1;
|
||||
static public $__names = array(
|
||||
0 => 'PROBABILISTIC',
|
||||
1 => 'RATE_LIMITING',
|
||||
);
|
||||
}
|
||||
|
65
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/ValidateTraceResponse.php
vendored
Normal file
65
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/ValidateTraceResponse.php
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
class ValidateTraceResponse extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'ok',
|
||||
'isRequired' => true,
|
||||
'type' => TType::BOOL,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'traceCount',
|
||||
'isRequired' => true,
|
||||
'type' => TType::I64,
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
public $ok = null;
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $traceCount = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'ValidateTraceResponse';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('ValidateTraceResponse', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('ValidateTraceResponse', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
87
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/Annotation.php
vendored
Normal file
87
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/Annotation.php
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent\Zipkin;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
/**
|
||||
* An annotation is similar to a log statement. It includes a host field which
|
||||
* allows these events to be attributed properly, and also aggregatable.
|
||||
*/
|
||||
class Annotation extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'timestamp',
|
||||
'isRequired' => false,
|
||||
'type' => TType::I64,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'value',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
3 => array(
|
||||
'var' => 'host',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\Zipkin\Endpoint',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* Microseconds from epoch.
|
||||
*
|
||||
* This value should use the most precise value possible. For example,
|
||||
* gettimeofday or syncing nanoTime against a tick of currentTimeMillis.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $timestamp = null;
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $value = null;
|
||||
/**
|
||||
* Always the host that recorded the event. By specifying the host you allow
|
||||
* rollup of all events (such as client requests to a service) by IP address.
|
||||
*
|
||||
* @var \Jaeger\Thrift\Agent\Zipkin\Endpoint
|
||||
*/
|
||||
public $host = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Annotation';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('Annotation', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('Annotation', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
38
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/AnnotationType.php
vendored
Normal file
38
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/AnnotationType.php
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent\Zipkin;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
final class AnnotationType {
|
||||
const BOOL = 0;
|
||||
const BYTES = 1;
|
||||
const I16 = 2;
|
||||
const I32 = 3;
|
||||
const I64 = 4;
|
||||
const DOUBLE = 5;
|
||||
const STRING = 6;
|
||||
static public $__names = array(
|
||||
0 => 'BOOL',
|
||||
1 => 'BYTES',
|
||||
2 => 'I16',
|
||||
3 => 'I32',
|
||||
4 => 'I64',
|
||||
5 => 'DOUBLE',
|
||||
6 => 'STRING',
|
||||
);
|
||||
}
|
||||
|
106
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/BinaryAnnotation.php
vendored
Normal file
106
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/BinaryAnnotation.php
vendored
Normal file
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent\Zipkin;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
/**
|
||||
* Binary annotations are tags applied to a Span to give it context. For
|
||||
* example, a binary annotation of "http.uri" could the path to a resource in a
|
||||
* RPC call.
|
||||
*
|
||||
* Binary annotations of type STRING are always queryable, though more a
|
||||
* historical implementation detail than a structural concern.
|
||||
*
|
||||
* Binary annotations can repeat, and vary on the host. Similar to Annotation,
|
||||
* the host indicates who logged the event. This allows you to tell the
|
||||
* difference between the client and server side of the same key. For example,
|
||||
* the key "http.uri" might be different on the client and server side due to
|
||||
* rewriting, like "/api/v1/myresource" vs "/myresource. Via the host field,
|
||||
* you can see the different points of view, which often help in debugging.
|
||||
*/
|
||||
class BinaryAnnotation extends TBase {
|
||||
static $isValidate = false;
|
||||
|
||||
static $_TSPEC = array(
|
||||
1 => array(
|
||||
'var' => 'key',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
2 => array(
|
||||
'var' => 'value',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRING,
|
||||
),
|
||||
3 => array(
|
||||
'var' => 'annotation_type',
|
||||
'isRequired' => false,
|
||||
'type' => TType::I32,
|
||||
),
|
||||
4 => array(
|
||||
'var' => 'host',
|
||||
'isRequired' => false,
|
||||
'type' => TType::STRUCT,
|
||||
'class' => '\Jaeger\Thrift\Agent\Zipkin\Endpoint',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $key = null;
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $value = null;
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $annotation_type = null;
|
||||
/**
|
||||
* The host that recorded tag, which allows you to differentiate between
|
||||
* multiple tags with the same key. There are two exceptions to this.
|
||||
*
|
||||
* When the key is CLIENT_ADDR or SERVER_ADDR, host indicates the source or
|
||||
* destination of an RPC. This exception allows zipkin to display network
|
||||
* context of uninstrumented services, or clients such as web browsers.
|
||||
*
|
||||
* @var \Jaeger\Thrift\Agent\Zipkin\Endpoint
|
||||
*/
|
||||
public $host = null;
|
||||
|
||||
public function __construct($vals=null) {
|
||||
if (is_array($vals)) {
|
||||
parent::__construct(self::$_TSPEC, $vals);
|
||||
}
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'BinaryAnnotation';
|
||||
}
|
||||
|
||||
public function read($input)
|
||||
{
|
||||
return $this->_read('BinaryAnnotation', self::$_TSPEC, $input);
|
||||
}
|
||||
|
||||
public function write($output) {
|
||||
return $this->_write('BinaryAnnotation', self::$_TSPEC, $output);
|
||||
}
|
||||
|
||||
}
|
||||
|
246
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/Constant.php
vendored
Normal file
246
vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Thrift/Agent/Zipkin/Constant.php
vendored
Normal file
|
@ -0,0 +1,246 @@
|
|||
<?php
|
||||
namespace Jaeger\Thrift\Agent\Zipkin;
|
||||
|
||||
/**
|
||||
* Autogenerated by Thrift Compiler (0.11.0)
|
||||
*
|
||||
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
||||
* @generated
|
||||
*/
|
||||
use Thrift\Base\TBase;
|
||||
use Thrift\Type\TType;
|
||||
use Thrift\Type\TMessageType;
|
||||
use Thrift\Exception\TException;
|
||||
use Thrift\Exception\TProtocolException;
|
||||
use Thrift\Protocol\TProtocol;
|
||||
use Thrift\Protocol\TBinaryProtocolAccelerated;
|
||||
use Thrift\Exception\TApplicationException;
|
||||
|
||||
|
||||
final class Constant extends \Thrift\Type\TConstant {
|
||||
static protected $CLIENT_SEND;
|
||||
static protected $CLIENT_RECV;
|
||||
static protected $SERVER_SEND;
|
||||
static protected $SERVER_RECV;
|
||||
static protected $MESSAGE_SEND;
|
||||
static protected $MESSAGE_RECV;
|
||||
static protected $WIRE_SEND;
|
||||
static protected $WIRE_RECV;
|
||||
static protected $CLIENT_SEND_FRAGMENT;
|
||||
static protected $CLIENT_RECV_FRAGMENT;
|
||||
static protected $SERVER_SEND_FRAGMENT;
|
||||
static protected $SERVER_RECV_FRAGMENT;
|
||||
static protected $LOCAL_COMPONENT;
|
||||
static protected $CLIENT_ADDR;
|
||||
static protected $SERVER_ADDR;
|
||||
static protected $MESSAGE_ADDR;
|
||||
|
||||
static protected function init_CLIENT_SEND() {
|
||||
return /**
|
||||
* The client sent ("cs") a request to a server. There is only one send per
|
||||
* span. For example, if there's a transport error, each attempt can be logged
|
||||
* as a WIRE_SEND annotation.
|
||||
*
|
||||
* If chunking is involved, each chunk could be logged as a separate
|
||||
* CLIENT_SEND_FRAGMENT in the same span.
|
||||
*
|
||||
* Annotation.host is not the server. It is the host which logged the send
|
||||
* event, almost always the client. When logging CLIENT_SEND, instrumentation
|
||||
* should also log the SERVER_ADDR.
|
||||
*/
|
||||
"cs";
|
||||
}
|
||||
|
||||
static protected function init_CLIENT_RECV() {
|
||||
return /**
|
||||
* The client received ("cr") a response from a server. There is only one
|
||||
* receive per span. For example, if duplicate responses were received, each
|
||||
* can be logged as a WIRE_RECV annotation.
|
||||
*
|
||||
* If chunking is involved, each chunk could be logged as a separate
|
||||
* CLIENT_RECV_FRAGMENT in the same span.
|
||||
*
|
||||
* Annotation.host is not the server. It is the host which logged the receive
|
||||
* event, almost always the client. The actual endpoint of the server is
|
||||
* recorded separately as SERVER_ADDR when CLIENT_SEND is logged.
|
||||
*/
|
||||
"cr";
|
||||
}
|
||||
|
||||
static protected function init_SERVER_SEND() {
|
||||
return /**
|
||||
* The server sent ("ss") a response to a client. There is only one response
|
||||
* per span. If there's a transport error, each attempt can be logged as a
|
||||
* WIRE_SEND annotation.
|
||||
*
|
||||
* Typically, a trace ends with a server send, so the last timestamp of a trace
|
||||
* is often the timestamp of the root span's server send.
|
||||
*
|
||||
* If chunking is involved, each chunk could be logged as a separate
|
||||
* SERVER_SEND_FRAGMENT in the same span.
|
||||
*
|
||||
* Annotation.host is not the client. It is the host which logged the send
|
||||
* event, almost always the server. The actual endpoint of the client is
|
||||
* recorded separately as CLIENT_ADDR when SERVER_RECV is logged.
|
||||
*/
|
||||
"ss";
|
||||
}
|
||||
|
||||
static protected function init_SERVER_RECV() {
|
||||
return /**
|
||||
* The server received ("sr") a request from a client. There is only one
|
||||
* request per span. For example, if duplicate responses were received, each
|
||||
* can be logged as a WIRE_RECV annotation.
|
||||
*
|
||||
* Typically, a trace starts with a server receive, so the first timestamp of a
|
||||
* trace is often the timestamp of the root span's server receive.
|
||||
*
|
||||
* If chunking is involved, each chunk could be logged as a separate
|
||||
* SERVER_RECV_FRAGMENT in the same span.
|
||||
*
|
||||
* Annotation.host is not the client. It is the host which logged the receive
|
||||
* event, almost always the server. When logging SERVER_RECV, instrumentation
|
||||
* should also log the CLIENT_ADDR.
|
||||
*/
|
||||
"sr";
|
||||
}
|
||||
|
||||
static protected function init_MESSAGE_SEND() {
|
||||
return /**
|
||||
* Message send ("ms") is a request to send a message to a destination, usually
|
||||
* a broker. This may be the only annotation in a messaging span. If WIRE_SEND
|
||||
* exists in the same span, it follows this moment and clarifies delays sending
|
||||
* the message, such as batching.
|
||||
*
|
||||
* Unlike RPC annotations like CLIENT_SEND, messaging spans never share a span
|
||||
* ID. For example, "ms" should always be the parent of "mr".
|
||||
*
|
||||
* Annotation.host is not the destination, it is the host which logged the send
|
||||
* event: the producer. When annotating MESSAGE_SEND, instrumentation should
|
||||
* also tag the MESSAGE_ADDR.
|
||||
*/
|
||||
"ms";
|
||||
}
|
||||
|
||||
static protected function init_MESSAGE_RECV() {
|
||||
return /**
|
||||
* A consumer received ("mr") a message from a broker. This may be the only
|
||||
* annotation in a messaging span. If WIRE_RECV exists in the same span, it
|
||||
* precedes this moment and clarifies any local queuing delay.
|
||||
*
|
||||
* Unlike RPC annotations like SERVER_RECV, messaging spans never share a span
|
||||
* ID. For example, "mr" should always be a child of "ms" unless it is a root
|
||||
* span.
|
||||
*
|
||||
* Annotation.host is not the broker, it is the host which logged the receive
|
||||
* event: the consumer. When annotating MESSAGE_RECV, instrumentation should
|
||||
* also tag the MESSAGE_ADDR.
|
||||
*/
|
||||
"mr";
|
||||
}
|
||||
|
||||
static protected function init_WIRE_SEND() {
|
||||
return /**
|
||||
* Optionally logs an attempt to send a message on the wire. Multiple wire send
|
||||
* events could indicate network retries. A lag between client or server send
|
||||
* and wire send might indicate queuing or processing delay.
|
||||
*/
|
||||
"ws";
|
||||
}
|
||||
|
||||
static protected function init_WIRE_RECV() {
|
||||
return /**
|
||||
* Optionally logs an attempt to receive a message from the wire. Multiple wire
|
||||
* receive events could indicate network retries. A lag between wire receive
|
||||
* and client or server receive might indicate queuing or processing delay.
|
||||
*/
|
||||
"wr";
|
||||
}
|
||||
|
||||
static protected function init_CLIENT_SEND_FRAGMENT() {
|
||||
return /**
|
||||
* Optionally logs progress of a (CLIENT_SEND, WIRE_SEND). For example, this
|
||||
* could be one chunk in a chunked request.
|
||||
*/
|
||||
"csf";
|
||||
}
|
||||
|
||||
static protected function init_CLIENT_RECV_FRAGMENT() {
|
||||
return /**
|
||||
* Optionally logs progress of a (CLIENT_RECV, WIRE_RECV). For example, this
|
||||
* could be one chunk in a chunked response.
|
||||
*/
|
||||
"crf";
|
||||
}
|
||||
|
||||
static protected function init_SERVER_SEND_FRAGMENT() {
|
||||
return /**
|
||||
* Optionally logs progress of a (SERVER_SEND, WIRE_SEND). For example, this
|
||||
* could be one chunk in a chunked response.
|
||||
*/
|
||||
"ssf";
|
||||
}
|
||||
|
||||
static protected function init_SERVER_RECV_FRAGMENT() {
|
||||
return /**
|
||||
* Optionally logs progress of a (SERVER_RECV, WIRE_RECV). For example, this
|
||||
* could be one chunk in a chunked request.
|
||||
*/
|
||||
"srf";
|
||||
}
|
||||
|
||||
static protected function init_LOCAL_COMPONENT() {
|
||||
return /**
|
||||
* The value of "lc" is the component or namespace of a local span.
|
||||
*
|
||||
* BinaryAnnotation.host adds service context needed to support queries.
|
||||
*
|
||||
* Local Component("lc") supports three key features: flagging, query by
|
||||
* service and filtering Span.name by namespace.
|
||||
*
|
||||
* While structurally the same, local spans are fundamentally different than
|
||||
* RPC spans in how they should be interpreted. For example, zipkin v1 tools
|
||||
* center on RPC latency and service graphs. Root local-spans are neither
|
||||
* indicative of critical path RPC latency, nor have impact on the shape of a
|
||||
* service graph. By flagging with "lc", tools can special-case local spans.
|
||||
*
|
||||
* Zipkin v1 Spans are unqueryable unless they can be indexed by service name.
|
||||
* The only path to a service name is by (Binary)?Annotation.host.serviceName.
|
||||
* By logging "lc", a local span can be queried even if no other annotations
|
||||
* are logged.
|
||||
*
|
||||
* The value of "lc" is the namespace of Span.name. For example, it might be
|
||||
* "finatra2", for a span named "bootstrap". "lc" allows you to resolves
|
||||
* conflicts for the same Span.name, for example "finatra/bootstrap" vs
|
||||
* "finch/bootstrap". Using local component, you'd search for spans named
|
||||
* "bootstrap" where "lc=finch"
|
||||
*/
|
||||
"lc";
|
||||
}
|
||||
|
||||
static protected function init_CLIENT_ADDR() {
|
||||
return /**
|
||||
* Indicates a client address ("ca") in a span. Most likely, there's only one.
|
||||
* Multiple addresses are possible when a client changes its ip or port within
|
||||
* a span.
|
||||
*/
|
||||
"ca";
|
||||
}
|
||||
|
||||
static protected function init_SERVER_ADDR() {
|
||||
return /**
|
||||
* Indicates a server address ("sa") in a span. Most likely, there's only one.
|
||||
* Multiple addresses are possible when a client is redirected, or fails to a
|
||||
* different server ip or port.
|
||||
*/
|
||||
"sa";
|
||||
}
|
||||
|
||||
static protected function init_MESSAGE_ADDR() {
|
||||
return /**
|
||||
* Indicates the remote address of a messaging span, usually the broker.
|
||||
*/
|
||||
"ma";
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue