Skip to content

Commit

Permalink
Autoloader for Elastic classes (#115), Use EDOT logging in OTel loggi…
Browse files Browse the repository at this point in the history
…ng (#116) (#117)

* Autoloader for Elastic classes (#115)
* Use EDOT logging in OTel logging (#116)
* Updated composer and moved autoload to dev
  • Loading branch information
intuibase authored Nov 6, 2024
1 parent ef99f9d commit 73fee5a
Show file tree
Hide file tree
Showing 110 changed files with 154 additions and 8,400 deletions.
6 changes: 1 addition & 5 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,9 @@
"slevomat/coding-standard": "8.14.1",
"squizlabs/php_codesniffer": "3.8.1"
},
"autoload": {
"psr-4": {
"Elastic\\OTel\\": "./prod/php/ElasticOTel/"
}
},
"autoload-dev": {
"psr-4": {
"Elastic\\OTel\\": "./prod/php/ElasticOTel/",
"ElasticOTelTests\\": "./tests/ElasticOTelTests/"
}
},
Expand Down
2 changes: 1 addition & 1 deletion elastic-otel-php.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version=0.2.0
supported_php_versions=(80 81 82 83)
php_headers_version=2.0
logger_features_enum_values=ALL=0,MODULE=1,REQUEST=2,TRANSPORT=3,BOOTSTRAP=4,HOOKS=5,INSTRUMENTATION=6
logger_features_enum_values=ALL=0,MODULE=1,REQUEST=2,TRANSPORT=3,BOOTSTRAP=4,HOOKS=5,INSTRUMENTATION=6,OTEL=7
108 changes: 108 additions & 0 deletions prod/php/ElasticOTel/Autoloader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

declare(strict_types=1);

namespace Elastic\OTel;

/**
* Code in this file is part of implementation internals and thus it is not covered by the backward compatibility.
*
* @internal
*/
final class Autoloader
{
private const AUTOLOAD_FQ_CLASS_NAME_PREFIX = 'Elastic\\OTel\\';

/** @var int */
private static $autoloadFqClassNamePrefixLength;

/** @var string */
private static $srcRootDir;

public static function register(string $rootDir): void
{
self::$srcRootDir = $rootDir . DIRECTORY_SEPARATOR;
self::$autoloadFqClassNamePrefixLength = strlen(self::AUTOLOAD_FQ_CLASS_NAME_PREFIX);

spl_autoload_register([__CLASS__, 'autoloadCodeForClass']);
}

private static function shouldAutoloadCodeForClass(string $fqClassName): bool
{
// does the class use the namespace prefix?
return strncmp(self::AUTOLOAD_FQ_CLASS_NAME_PREFIX, $fqClassName, self::$autoloadFqClassNamePrefixLength) == 0;
}

public static function autoloadCodeForClass(string $fqClassName): void
{
// Example of $fqClassName: Elastic\Apm\Impl\Util\Assert

BootstrapStageLogger::logTrace("Entered with fqClassName: `$fqClassName'", __FILE__, __LINE__, __CLASS__, __FUNCTION__);

if (!self::shouldAutoloadCodeForClass($fqClassName)) {
BootstrapStageLogger::logTrace(
"shouldAutoloadCodeForClass returned false. fqClassName: {$fqClassName}",
__FILE__,
__LINE__,
__CLASS__,
__FUNCTION__
);
return;
}

// get the relative class name
$relativeClass = substr($fqClassName, self::$autoloadFqClassNamePrefixLength);
$classSrcFileRelative = ((DIRECTORY_SEPARATOR === '\\')
? $relativeClass
: str_replace('\\', DIRECTORY_SEPARATOR, $relativeClass)) . '.php';
$classSrcFileAbsolute = self::$srcRootDir . DIRECTORY_SEPARATOR . $classSrcFileRelative;

if (file_exists($classSrcFileAbsolute)) {
BootstrapStageLogger::logTrace(
"Before require `$classSrcFileAbsolute' ...",
__FILE__,
__LINE__,
__CLASS__,
__FUNCTION__
);

require $classSrcFileAbsolute;

BootstrapStageLogger::logTrace(
"After require `$classSrcFileAbsolute' ...",
__FILE__,
__LINE__,
__CLASS__,
__FUNCTION__
);
} else {
BootstrapStageLogger::logTrace(
"File with the code for class doesn't exist."
. " classSrcFile: `$classSrcFileAbsolute'. fqClassName: `$fqClassName'",
__FILE__,
__LINE__,
__CLASS__,
__FUNCTION__
);
}
}
}
2 changes: 1 addition & 1 deletion prod/php/ElasticOTel/BootstrapStageLogger.php
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ private static function logWithLevel(int $statementLevel, string $message, strin
\elastic_otel_log_feature(
0 /* $isForced */,
$statementLevel,
LogFeature::BOOTSTRAP,
Log\LogFeature::BOOTSTRAP,
self::LOG_CATEGORY,
self::processSourceCodeFilePathForLog($file),
$line,
Expand Down
120 changes: 0 additions & 120 deletions prod/php/ElasticOTel/Config/AllOptionsMetadata.php

This file was deleted.

39 changes: 0 additions & 39 deletions prod/php/ElasticOTel/Config/BoolOptionMetadata.php

This file was deleted.

71 changes: 0 additions & 71 deletions prod/php/ElasticOTel/Config/BoolOptionParser.php

This file was deleted.

Loading

0 comments on commit 73fee5a

Please sign in to comment.