Merge pull request #46169 from nextcloud/enh/support-profiler-in-occ

Support profiler in occ commands
This commit is contained in:
Robin Appelman 2024-07-01 22:45:31 +02:00 committed by GitHub
commit 55f3e53695
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 5 deletions

View file

@ -10,6 +10,10 @@ declare(strict_types=1);
require_once __DIR__ . '/lib/versioncheck.php';
use OC\Console\Application;
use OCP\AppFramework\Http\Response;
use OCP\Diagnostics\IEventLogger;
use OCP\IRequest;
use OCP\Profiler\IProfiler;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\ConsoleOutput;
@ -67,9 +71,34 @@ try {
echo "Additionally the function 'pcntl_signal' and 'pcntl_signal_dispatch' need to be enabled in your php.ini." . PHP_EOL;
}
$eventLogger = \OCP\Server::get(IEventLogger::class);
$eventLogger->start('console:build_application', 'Build Application instance and load commands');
$application = \OCP\Server::get(Application::class);
$application->loadCommands(new ArgvInput(), new ConsoleOutput());
$application->run();
$eventLogger->end('console:build_application');
$eventLogger->start('console:run', 'Run the command');
$application->setAutoExit(false);
$exitCode = $application->run();
$eventLogger->end('console:run');
$profiler = \OCP\Server::get(IProfiler::class);
if ($profiler->isEnabled()) {
$eventLogger->end('runtime');
$profile = $profiler->collect(\OCP\Server::get(IRequest::class), new Response());
$profile->setMethod('occ');
$profile->setUrl(implode(' ', $argv));
$profiler->saveProfile($profile);
}
if ($exitCode > 255) {
$exitCode = 255;
}
exit($exitCode);
} catch (Exception $ex) {
exceptionHandler($ex);
} catch (Error $ex) {

View file

@ -388,8 +388,8 @@ class AppManager implements IAppManager {
if ($appPath === false) {
return;
}
$eventLogger = \OC::$server->get(\OCP\Diagnostics\IEventLogger::class);
$eventLogger->start("bootstrap:load_app:$app", "Load $app");
$eventLogger = \OC::$server->get(IEventLogger::class);
$eventLogger->start("bootstrap:load_app:$app", "Load app: $app");
// in case someone calls loadApp() directly
\OC_App::registerAutoloading($app, $appPath);
@ -400,8 +400,6 @@ class AppManager implements IAppManager {
$hasAppPhpFile = is_file($appPath . '/appinfo/app.php');
$eventLogger = \OC::$server->get(IEventLogger::class);
$eventLogger->start('bootstrap:load_app_' . $app, 'Load app: ' . $app);
if ($isBootable && $hasAppPhpFile) {
$this->logger->error('/appinfo/app.php is not loaded when \OCP\AppFramework\Bootstrap\IBootstrap on the application class is used. Migrate everything from app.php to the Application class.', [
'app' => $app,