summaryrefslogtreecommitdiff
path: root/classes/tracer.php
diff options
context:
space:
mode:
Diffstat (limited to 'classes/tracer.php')
-rw-r--r--classes/tracer.php69
1 files changed, 69 insertions, 0 deletions
diff --git a/classes/tracer.php b/classes/tracer.php
new file mode 100644
index 000000000..5a23dfeba
--- /dev/null
+++ b/classes/tracer.php
@@ -0,0 +1,69 @@
+<?php
+use OpenTracing\GlobalTracer;
+use OpenTracing\Scope;
+
+class Tracer {
+ /** @var Tracer $instance */
+ private static $instance;
+
+ public function __construct() {
+ $jaeger_host = Config::get(Config::JAEGER_REPORTING_HOST);
+
+ if ($jaeger_host) {
+ $config = new \Jaeger\Config(
+ [
+ 'sampler' => [
+ 'type' => \Jaeger\SAMPLER_TYPE_CONST,
+ 'param' => true,
+ ],
+ 'logging' => true,
+ "local_agent" => [
+ "reporting_host" => $jaeger_host,
+ "reporting_port" => 6832
+ ],
+ 'dispatch_mode' => \Jaeger\Config::JAEGER_OVER_BINARY_UDP,
+ ],
+ Config::get(Config::JAEGER_SERVICE_NAME)
+ );
+
+ $config->initializeTracer();
+
+ register_shutdown_function(function() {
+ $tracer = GlobalTracer::get();
+ $tracer->flush();
+ });
+ }
+ }
+
+ /**
+ * @param string $name
+ * @param array<string>|array<string, array<string, mixed>> $tags
+ * @param array<string> $args
+ * @return Scope
+ */
+ private function _start(string $name, array $tags = [], array $args = []): Scope {
+ $tracer = GlobalTracer::get();
+
+ $tags['args'] = json_encode($args);
+
+ return $tracer->startActiveSpan($name, ['tags' => $tags]);
+ }
+
+ /**
+ * @param string $name
+ * @param array<string>|array<string, array<string, mixed>> $tags
+ * @param array<string> $args
+ * @return Scope
+ */
+ public static function start(string $name, array $tags = [], array $args = []) : Scope {
+ return self::get_instance()->_start($name, $tags, $args);
+ }
+
+ public static function get_instance() : Tracer {
+ if (self::$instance == null)
+ self::$instance = new self();
+
+ return self::$instance;
+ }
+
+}