public function astInstrumentationPreHook()

in agent/php/ElasticApm/Impl/AutoInstrument/InterceptionManager.php [219:251]


    public function astInstrumentationPreHook(?string $instrumentedClassFullName, string $instrumentedFunction, array $capturedArgs): ?callable
    {
        $localLogger = $this->logger->inherit()->addAllContext(['instrumentedClassFullName' => $instrumentedClassFullName]);

        $loggerProxyTrace = $localLogger->ifTraceLevelEnabledNoLine(__FUNCTION__);
        $loggerProxyTrace && $loggerProxyTrace->log(__LINE__, 'Entered');

        $wordPressAutoInstrumIfEnabled = $this->builtinPlugin->getWordPressAutoInstrumentationIfEnabled();
        if ($wordPressAutoInstrumIfEnabled === null) {
            static $loggedOnce = false;
            if (!$loggedOnce) {
                $loggerProxyTrace && $loggerProxyTrace->log(__LINE__, 'WordPress instrumentation is DISABLED');
                $loggedOnce = true;
            }
            return null;
        }

        static $dbgImplFuncDesc = null;
        if ($dbgImplFuncDesc === null) {
            $dbgImplFuncDesc = ClassNameUtil::fqToShort(WordPressAutoInstrumentation::class) . '->preHook';
        }
        /** @var string $dbgImplFuncDesc */
        $loggerProxyTrace && $loggerProxyTrace->log(__LINE__, 'Calling ' . $dbgImplFuncDesc . '...');
        try {
            $retVal = $wordPressAutoInstrumIfEnabled->preHook($instrumentedClassFullName, $instrumentedFunction, $capturedArgs);
            $loggerProxyTrace && $loggerProxyTrace->log(__LINE__, $dbgImplFuncDesc . ' completed without throwing', ['retVal == null' => ($retVal == null)]);
            return $retVal;
        } catch (Throwable $throwable) {
            ($loggerProxy = $localLogger->ifErrorLevelEnabled(__LINE__, __FUNCTION__))
            && $loggerProxy->logThrowable($throwable, $dbgImplFuncDesc . ' has thrown');
            return null;
        }
    }