Skip to content

Commit

Permalink
Fix command input handling (#589)
Browse files Browse the repository at this point in the history
  • Loading branch information
stayallive committed Oct 13, 2022
1 parent fd85d9b commit 4371085
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 12 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Fix extracting command input resulting in errors when calling Artisan commands programatically with `null` as an argument value (#589)

## 2.14.1

- Fix not setting the correct SDK ID and version when running the `sentry:test` command (#582)
Expand Down
37 changes: 27 additions & 10 deletions src/Sentry/Laravel/EventHandler.php
Expand Up @@ -27,6 +27,8 @@
use Sentry\Breadcrumb;
use Sentry\SentrySdk;
use Sentry\State\Scope;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Input\InputInterface;

class EventHandler
{
Expand Down Expand Up @@ -568,9 +570,9 @@ protected function commandStartingHandler(CommandStarting $event)
Breadcrumb::TYPE_DEFAULT,
'artisan.command',
'Starting Artisan command: ' . $event->command,
method_exists($event->input, '__toString') ? [
'input' => (string)$event->input,
] : []
[
'input' => $this->extractConsoleCommandInput($event->input),
]
));
}
}
Expand All @@ -588,20 +590,35 @@ protected function commandFinishedHandler(CommandFinished $event)
Breadcrumb::TYPE_DEFAULT,
'artisan.command',
'Finished Artisan command: ' . $event->command,
array_merge([
[
'exit' => $event->exitCode,
], method_exists($event->input, '__toString') ? [
'input' => (string)$event->input,
] : [])
'input' => $this->extractConsoleCommandInput($event->input),
]
));
}

// Flush any and all events that were possibly generated by the command
Integration::flushEvents();

Integration::configureScope(static function (Scope $scope): void {
$scope->setTag('command', '');
$scope->removeTag('command');
});
}

// Flush any and all events that were possibly generated by the command
Integration::flushEvents();
/**
* Extract the command input arguments if possible.
*
* @param \Symfony\Component\Console\Input\InputInterface|null $input
*
* @return string|null
*/
private function extractConsoleCommandInput(?InputInterface $input): ?string
{
if ($input instanceof ArgvInput) {
return (string)$input;
}

return null;
}

protected function octaneRequestReceivedHandler(Octane\RequestReceived $event): void
Expand Down
4 changes: 2 additions & 2 deletions test/Sentry/CommandInfoInBreadcrumbsTest.php
Expand Up @@ -3,7 +3,7 @@
namespace Sentry\Laravel\Tests;

use Illuminate\Console\Events\CommandStarting;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\BufferedOutput;

class CommandInfoInBreadcrumbsTest extends SentryLaravelTestCase
Expand Down Expand Up @@ -55,7 +55,7 @@ private function dispatchCommandStartEvent()
CommandStarting::class,
new CommandStarting(
'test:command',
new ArrayInput(['--foo' => 'bar']),
new ArgvInput(['artisan', '--foo=bar']),
new BufferedOutput()
)
);
Expand Down

0 comments on commit 4371085

Please sign in to comment.