summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2023-10-20 23:39:30 +0300
committerAndrew Dolgov <[email protected]>2023-10-20 23:39:30 +0300
commit350177df3949bf884d38e133a3048d582a50efdb (patch)
tree7d278a5d461eee644376de8899f11505bfe96e18
parentd3fadc0bd0256697e4a8e9a445d48d9620339f04 (diff)
add placeholder instrumentation for public
-rw-r--r--backend.php8
-rw-r--r--classes/tracer.php30
-rw-r--r--index.php1
-rw-r--r--public.php11
4 files changed, 34 insertions, 16 deletions
diff --git a/backend.php b/backend.php
index b4e118d62..c316bcc44 100644
--- a/backend.php
+++ b/backend.php
@@ -30,12 +30,6 @@
$op = (string)clean($op);
$method = (string)clean($method);
- $span = Tracer::start(__FILE__);
-
- register_shutdown_function(function() use ($span) {
- $span->end();
- });
-
startup_gettext();
$script_started = microtime(true);
@@ -44,6 +38,8 @@
return;
}
+ $span = OpenTelemetry\API\Trace\Span::getCurrent();
+
header("Content-Type: text/json; charset=utf-8");
if (Config::get(Config::SINGLE_USER_MODE)) {
diff --git a/classes/tracer.php b/classes/tracer.php
index e36b9f947..e8f6a0378 100644
--- a/classes/tracer.php
+++ b/classes/tracer.php
@@ -5,18 +5,23 @@ use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
-use OpenTelemetry\API\Trace\Span;
+use OpenTelemetry\API\Trace\SpanKind;
use OpenTelemetry\SDK\Trace\SpanExporter\InMemoryExporter;
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SemConv\ResourceAttributes;
+use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
+use OpenTelemetry\SDK\Trace\Sampler\ParentBased;
+
class Tracer {
/** @var Tracer $instance */
private static $instance;
+ private $tracerProvider;
+
/** @var OpenTelemetry\API\Trace\TracerInterface $tracer */
private $tracer;
@@ -36,23 +41,29 @@ class Tracer {
), ResourceAttributes::SCHEMA_URL),
);
- $tracerProvider = new TracerProvider(new SimpleSpanProcessor($exporter), null, $resource);
+ $this->tracerProvider = TracerProvider::builder()
+ ->addSpanProcessor(new SimpleSpanProcessor($exporter))
+ ->setResource($resource)
+ ->setSampler(new ParentBased(new AlwaysOnSampler()))
+ ->build();
- $this->tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
+ $this->tracer = $this->tracerProvider->getTracer('io.opentelemetry.contrib.php');
$context = TraceContextPropagator::getInstance()->extract(getallheaders());
+
$span = $this->tracer->spanBuilder('root')
->setParent($context)
- ->setAttribute('http.request', json_encode($_REQUEST))
+ ->setSpanKind(SpanKind::KIND_SERVER)
+ ->setAttribute('php.request', json_encode($_REQUEST))
+ ->setAttribute('php.server', json_encode($_SERVER))
->startSpan();
$scope = $span->activate();
- register_shutdown_function(function() use ($span, $tracerProvider, $scope) {
+ register_shutdown_function(function() use ($span, $scope) {
$span->end();
$scope->detach();
-
- $tracerProvider->shutdown();
+ $this->tracerProvider->shutdown();
});
}
@@ -61,7 +72,10 @@ class Tracer {
* @return OpenTelemetry\API\Trace\SpanInterface
*/
private function _start(string $name) {
- $span = $this->tracer->spanBuilder($name)->startSpan();
+ $span = $this->tracer
+ ->spanBuilder($name)
+ ->setSpanKind(SpanKind::KIND_SERVER)
+ ->startSpan();
$span->activate();
diff --git a/index.php b/index.php
index 276b79ec3..b7c039d7a 100644
--- a/index.php
+++ b/index.php
@@ -16,7 +16,6 @@
Config::sanity_check();
-
if (!init_plugins()) return;
UserHelper::login_sequence();
diff --git a/public.php b/public.php
index f44a94c01..6d9bc4b0c 100644
--- a/public.php
+++ b/public.php
@@ -14,6 +14,8 @@
if (!init_plugins()) return;
+ $span = OpenTelemetry\API\Trace\Span::getCurrent();
+
$method = (string)clean($_REQUEST["op"]);
// shortcut syntax for public (exposed) methods (?op=plugin--pmethod&...params)
@@ -39,27 +41,34 @@
user_error("Refusing to invoke method $method which starts with underscore.", E_USER_WARNING);
header("Content-Type: text/json");
print Errors::to_json(Errors::E_UNAUTHORIZED);
+ $span->setAttribute('error', Errors::E_UNAUTHORIZED);
return;
}
if (implements_interface($handler, "IHandler") && $handler->before($method)) {
+ $span->addEvent("construct/$method");
if ($method && method_exists($handler, $method)) {
$reflection = new ReflectionMethod($handler, $method);
if ($reflection->getNumberOfRequiredParameters() == 0) {
+ $span->addEvent("invoke/$method");
$handler->$method();
} else {
user_error("Refusing to invoke method $method which has required parameters.", E_USER_WARNING);
header("Content-Type: text/json");
print Errors::to_json(Errors::E_UNAUTHORIZED);
+ $span->setAttribute('error', Errors::E_UNAUTHORIZED);
}
} else if (method_exists($handler, 'index')) {
+ $span->addEvent("index");
$handler->index();
}
+ $span->addEvent("after/$method");
$handler->after();
return;
}
header("Content-Type: text/plain");
print Errors::to_json(Errors::E_UNKNOWN_METHOD);
-?>
+ $span->setAttribute('error', Errors::E_UNKNOWN_METHOD);
+