*/ private array $dataCollectors = []; private ?FileProfilerStorage $storage = null; private bool $enabled = false; public function __construct(SystemConfig $config) { $this->enabled = $config->getValue('profiler', false); if ($this->enabled) { $this->storage = new FileProfilerStorage($config->getValue('datadirectory', \OC::$SERVERROOT . '/data') . '/__profiler'); } } #[\Override] public function add(IDataCollector $dataCollector): void { $this->dataCollectors[$dataCollector->getName()] = $dataCollector; } #[\Override] public function loadProfileFromResponse(Response $response): ?IProfile { if (!$token = $response->getHeaders()['X-Debug-Token']) { return null; } return $this->loadProfile($token); } #[\Override] public function loadProfile(string $token): ?IProfile { if ($this->storage) { return $this->storage->read($token); } else { return null; } } #[\Override] public function saveProfile(IProfile $profile): bool { if ($this->storage) { return $this->storage->write($profile); } else { return false; } } #[\Override] public function collect(Request $request, Response $response): IProfile { $profile = new Profile($request->getId()); $profile->setTime(time()); $profile->setUrl($request->getRequestUri()); $profile->setMethod($request->getMethod()); $profile->setStatusCode($response->getStatus()); foreach ($this->dataCollectors as $dataCollector) { $dataCollector->collect($request, $response, null); // We clone for subrequests $profile->addCollector(clone $dataCollector); } return $profile; } /** * @return array[] */ #[\Override] public function find(?string $url, ?int $limit, ?string $method, ?int $start, ?int $end, ?string $statusCode = null): array { if ($this->storage) { return $this->storage->find($url, $limit, $method, $start, $end, $statusCode); } else { return []; } } #[\Override] public function dataProviders(): array { return array_keys($this->dataCollectors); } #[\Override] public function isEnabled(): bool { return $this->enabled; } #[\Override] public function setEnabled(bool $enabled): void { $this->enabled = $enabled; } #[\Override] public function clear(): void { $this->storage->purge(); } }