in prod/php/ElasticOTel/PhpPartFacade.php [89:159]
public static function bootstrap(string $elasticOTelNativePartVersion, int $maxEnabledLogLevel, float $requestInitStartTime): bool
{
self::$wasBootstrapCalled = true;
require __DIR__ . DIRECTORY_SEPARATOR . 'BootstrapStageLogger.php';
BootstrapStageLogger::configure($maxEnabledLogLevel, __DIR__, __NAMESPACE__);
BootstrapStageLogger::logDebug(
'Starting bootstrap sequence...'
. "; elasticOTelNativePartVersion: $elasticOTelNativePartVersion" . "; maxEnabledLogLevel: $maxEnabledLogLevel" . "; requestInitStartTime: $requestInitStartTime",
__FILE__,
__LINE__,
__CLASS__,
__FUNCTION__
);
if (self::$singletonInstance !== null) {
BootstrapStageLogger::logCritical(
'bootstrap() is called even though singleton instance is already created (probably bootstrap() is called more than once)',
__FILE__,
__LINE__,
__CLASS__,
__FUNCTION__
);
return false;
}
try {
require __DIR__ . DIRECTORY_SEPARATOR . 'Autoloader.php';
Autoloader::register(__DIR__);
InstrumentationBridge::singletonInstance()->bootstrap();
self::prepareEnvForOTelSdk($elasticOTelNativePartVersion);
self::registerAutoloader();
self::registerNativeOtlpSerializer();
self::registerAsyncTransportFactory();
self::registerOtelLogWriter();
/** @noinspection PhpInternalEntityUsedInspection */
if (SdkAutoloader::isExcludedUrl()) {
BootstrapStageLogger::logDebug('Url is excluded', __FILE__, __LINE__, __CLASS__, __FUNCTION__);
return false;
}
Traces\ElasticRootSpan::startRootSpan(function () {
PhpPartFacade::$rootSpanEnded = true;
if (PhpPartFacade::$singletonInstance && PhpPartFacade::$singletonInstance->inferredSpans) {
PhpPartFacade::$singletonInstance->inferredSpans->shutdown();
}
});
self::$singletonInstance = new self();
if (elastic_otel_get_config_option_by_name('inferred_spans_enabled')) {
self::$singletonInstance->inferredSpans = new InferredSpans(
(bool)elastic_otel_get_config_option_by_name('inferred_spans_reduction_enabled'),
(bool)elastic_otel_get_config_option_by_name('inferred_spans_stacktrace_enabled'),
elastic_otel_get_config_option_by_name('inferred_spans_min_duration') // @phpstan-ignore argument.type
);
}
} catch (Throwable $throwable) {
BootstrapStageLogger::logCriticalThrowable($throwable, 'One of the steps in bootstrap sequence has thrown', __FILE__, __LINE__, __CLASS__, __FUNCTION__);
return false;
}
BootstrapStageLogger::logDebug('Successfully completed bootstrap sequence', __FILE__, __LINE__, __CLASS__, __FUNCTION__);
return true;
}