public static function findAddonInfoFromFilePath()

in agent/php/ElasticApm/Impl/AutoInstrument/WordPressAutoInstrumentation.php [168:216]


    public static function findAddonInfoFromFilePath(string $filePath, LoggerFactory $loggerFactory, /* out */ ?string &$groupKind, /* out */ ?string &$groupName): void
    {
        $logger = null;
        $loggerProxyTrace = null;
        if ($loggerFactory->isEnabledForLevel(Level::TRACE)) {
            $logger = $loggerFactory->loggerForClass(LogCategory::AUTO_INSTRUMENTATION, __NAMESPACE__, __CLASS__, __FILE__)->addContext('filePath', $filePath);
            $loggerProxyTrace = $logger->ifTraceLevelEnabledNoLine(__FUNCTION__);
        }

        $loggerProxyTrace && $loggerProxyTrace->log(__LINE__, 'Entered');

        $adaptedFilePath = str_replace('\\', '/', $filePath);
        $logger && $logger->addContext('adaptedFilePath', $adaptedFilePath);

        $groupKind = self::CALLBACK_GROUP_KIND_CORE;
        $groupName = null;

        $currentGroupKind = null;
        /** @var ?int $posAfterAddonsSubDir */
        $posAfterAddonsSubDir = null;
        foreach (self::CALLBACK_SUBDIR_SUBPATH_TO_GROUP_KIND as $subDirSubPath => $currentGroupKind) {
            $pluginsSubDirPos = strpos($adaptedFilePath, $subDirSubPath);
            if ($pluginsSubDirPos !== false) {
                $posAfterAddonsSubDir = $pluginsSubDirPos + strlen($subDirSubPath);
                break;
            }
        }
        if ($posAfterAddonsSubDir === null) {
            $loggerProxyTrace && $loggerProxyTrace->log(__LINE__, 'Not found any of the known sub-paths in the given path');
            return;
        }
        $logger && $logger->addContext('posAfterAddonsSubDir', $posAfterAddonsSubDir);

        $dirSeparatorAfterPluginPos = strpos($adaptedFilePath, '/', $posAfterAddonsSubDir);
        if ($dirSeparatorAfterPluginPos !== false && $dirSeparatorAfterPluginPos > $posAfterAddonsSubDir) {
            $groupKind = $currentGroupKind;
            $groupName = substr($adaptedFilePath, $posAfterAddonsSubDir, $dirSeparatorAfterPluginPos - $posAfterAddonsSubDir);
            return;
        }

        $fileExtAfterPluginPos = strpos($adaptedFilePath, '.php', $posAfterAddonsSubDir);
        if ($fileExtAfterPluginPos !== false && $fileExtAfterPluginPos > $posAfterAddonsSubDir) {
            $groupKind = $currentGroupKind;
            $groupName = substr($adaptedFilePath, $posAfterAddonsSubDir, $fileExtAfterPluginPos - $posAfterAddonsSubDir);
            return;
        }

        $loggerProxyTrace && $loggerProxyTrace->log(__LINE__, 'Found one of the known sub-paths but the suffix is not as expected');
    }