summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/sdk/Metrics/StalenessHandler
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2023-10-20 17:12:29 +0300
committerAndrew Dolgov <[email protected]>2023-10-20 21:13:39 +0300
commitcdd7ad020e165fe680703b6d3319b908b682fb7a (patch)
treeb51eb09b7b4587e8fbc5624ac8d88d28cfcd0b04 /vendor/open-telemetry/sdk/Metrics/StalenessHandler
parent45a9ff0c88cbd33892ff16ab837e9059937d656e (diff)
jaeger-client -> opentelemetry
Diffstat (limited to 'vendor/open-telemetry/sdk/Metrics/StalenessHandler')
-rw-r--r--vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandler.php71
-rw-r--r--vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandlerFactory.php64
-rw-r--r--vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandler.php50
-rw-r--r--vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandlerFactory.php16
-rw-r--r--vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandler.php30
-rw-r--r--vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandlerFactory.php18
6 files changed, 249 insertions, 0 deletions
diff --git a/vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandler.php b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandler.php
new file mode 100644
index 000000000..66b271018
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandler.php
@@ -0,0 +1,71 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\SDK\Metrics\StalenessHandler;
+
+use function assert;
+use Closure;
+use OpenTelemetry\SDK\Metrics\ReferenceCounterInterface;
+use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
+
+/**
+ * @internal
+ */
+final class DelayedStalenessHandler implements StalenessHandlerInterface, ReferenceCounterInterface
+{
+ private Closure $stale;
+ private Closure $freshen;
+
+ /** @var Closure[]|null */
+ private ?array $onStale = [];
+ private int $count = 0;
+
+ public function __construct(Closure $stale, Closure $freshen)
+ {
+ $this->stale = $stale;
+ $this->freshen = $freshen;
+ }
+
+ public function acquire(bool $persistent = false): void
+ {
+ if ($this->count === 0) {
+ ($this->freshen)($this);
+ }
+
+ $this->count++;
+
+ if ($persistent) {
+ $this->onStale = null;
+ }
+ }
+
+ public function release(): void
+ {
+ if (--$this->count || $this->onStale === null) {
+ return;
+ }
+
+ ($this->stale)($this);
+ }
+
+ public function onStale(Closure $callback): void
+ {
+ if ($this->onStale === null) {
+ return;
+ }
+
+ $this->onStale[] = $callback;
+ }
+
+ public function triggerStale(): void
+ {
+ assert($this->onStale !== null);
+
+ $callbacks = $this->onStale;
+ $this->onStale = [];
+ foreach ($callbacks as $callback) {
+ $callback();
+ }
+ }
+}
diff --git a/vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandlerFactory.php b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandlerFactory.php
new file mode 100644
index 000000000..0d719c74f
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/DelayedStalenessHandlerFactory.php
@@ -0,0 +1,64 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\SDK\Metrics\StalenessHandler;
+
+use ArrayAccess;
+use Closure;
+use OpenTelemetry\SDK\Common\Time\ClockInterface;
+use OpenTelemetry\SDK\Common\Util\WeakMap;
+use OpenTelemetry\SDK\Metrics\StalenessHandlerFactoryInterface;
+use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
+use Traversable;
+
+final class DelayedStalenessHandlerFactory implements StalenessHandlerFactoryInterface
+{
+ private ClockInterface $clock;
+ private int $nanoDelay;
+
+ private Closure $stale;
+ private Closure $freshen;
+
+ /** @var ArrayAccess<DelayedStalenessHandler, int>&Traversable<DelayedStalenessHandler, int> */
+ private $staleHandlers;
+
+ /**
+ * @param float $delay delay in seconds
+ */
+ public function __construct(ClockInterface $clock, float $delay)
+ {
+ $this->clock = $clock;
+ $this->nanoDelay = (int) ($delay * 1e9);
+
+ $this->stale = function (DelayedStalenessHandler $handler): void {
+ $this->staleHandlers[$handler] = $this->clock->now();
+ };
+ $this->freshen = function (DelayedStalenessHandler $handler): void {
+ unset($this->staleHandlers[$handler]);
+ };
+
+ $this->staleHandlers = WeakMap::create();
+ }
+
+ public function create(): StalenessHandlerInterface
+ {
+ $this->triggerStaleHandlers();
+
+ return new DelayedStalenessHandler($this->stale, $this->freshen);
+ }
+
+ private function triggerStaleHandlers(): void
+ {
+ $expired = $this->clock->now() - $this->nanoDelay;
+ foreach ($this->staleHandlers as $handler => $timestamp) {
+ if ($timestamp > $expired) {
+ break;
+ }
+
+ /** @var DelayedStalenessHandler $handler */
+ unset($this->staleHandlers[$handler]);
+ $handler->triggerStale();
+ }
+ }
+}
diff --git a/vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandler.php b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandler.php
new file mode 100644
index 000000000..a5b32d5c4
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandler.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\SDK\Metrics\StalenessHandler;
+
+use Closure;
+use OpenTelemetry\SDK\Metrics\ReferenceCounterInterface;
+use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
+
+/**
+ * @internal
+ */
+final class ImmediateStalenessHandler implements StalenessHandlerInterface, ReferenceCounterInterface
+{
+ /** @var Closure[]|null */
+ private ?array $onStale = [];
+ private int $count = 0;
+
+ public function acquire(bool $persistent = false): void
+ {
+ $this->count++;
+
+ if ($persistent) {
+ $this->onStale = null;
+ }
+ }
+
+ public function release(): void
+ {
+ if (--$this->count !== 0 || !$this->onStale) {
+ return;
+ }
+
+ $callbacks = $this->onStale;
+ $this->onStale = [];
+ foreach ($callbacks as $callback) {
+ $callback();
+ }
+ }
+
+ public function onStale(Closure $callback): void
+ {
+ if ($this->onStale === null) {
+ return;
+ }
+
+ $this->onStale[] = $callback;
+ }
+}
diff --git a/vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandlerFactory.php b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandlerFactory.php
new file mode 100644
index 000000000..899615dea
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/ImmediateStalenessHandlerFactory.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\SDK\Metrics\StalenessHandler;
+
+use OpenTelemetry\SDK\Metrics\StalenessHandlerFactoryInterface;
+use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
+
+final class ImmediateStalenessHandlerFactory implements StalenessHandlerFactoryInterface
+{
+ public function create(): StalenessHandlerInterface
+ {
+ return new ImmediateStalenessHandler();
+ }
+}
diff --git a/vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandler.php b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandler.php
new file mode 100644
index 000000000..00d432b6b
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandler.php
@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\SDK\Metrics\StalenessHandler;
+
+use Closure;
+use OpenTelemetry\SDK\Metrics\ReferenceCounterInterface;
+use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
+
+/**
+ * @internal
+ */
+final class NoopStalenessHandler implements StalenessHandlerInterface, ReferenceCounterInterface
+{
+ public function acquire(bool $persistent = false): void
+ {
+ // no-op
+ }
+
+ public function release(): void
+ {
+ // no-op
+ }
+
+ public function onStale(Closure $callback): void
+ {
+ // no-op
+ }
+}
diff --git a/vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandlerFactory.php b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandlerFactory.php
new file mode 100644
index 000000000..07f34e3b0
--- /dev/null
+++ b/vendor/open-telemetry/sdk/Metrics/StalenessHandler/NoopStalenessHandlerFactory.php
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OpenTelemetry\SDK\Metrics\StalenessHandler;
+
+use OpenTelemetry\SDK\Metrics\StalenessHandlerFactoryInterface;
+use OpenTelemetry\SDK\Metrics\StalenessHandlerInterface;
+
+final class NoopStalenessHandlerFactory implements StalenessHandlerFactoryInterface
+{
+ public function create(): StalenessHandlerInterface
+ {
+ static $instance;
+
+ return $instance ??= new NoopStalenessHandler();
+ }
+}