From 9911e141d18ec6aa27b81fd44bc72d809ab0a40c Mon Sep 17 00:00:00 2001 From: yaozm Date: Fri, 16 Jun 2023 17:16:40 +0800 Subject: [PATCH] Add attribute for outputs --- .php-cs-fixer.php | 2 +- composer.json | 2 +- config/soar.php | 10 ++++----- psalm-baseline.xml | 29 -------------------------- psalm.xml.dist | 6 ++++++ src/Outputs/ClockworkOutput.php | 2 +- src/Outputs/ConsoleOutput.php | 11 ++++++++-- src/Outputs/DebugBarOutput.php | 36 ++++++++++++++++----------------- src/Outputs/DumpOutput.php | 4 +--- src/Outputs/LogOutput.php | 7 +++++-- src/Outputs/SoarBarOutput.php | 36 +++++++++++++++++---------------- src/Outputs/SyslogOutput.php | 9 ++++++++- src/SoarBar.php | 4 ++-- 13 files changed, 76 insertions(+), 82 deletions(-) diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index aa5e2ee..4fabfa4 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -350,7 +350,7 @@ PhpCsFixerCustomFixers\Fixer\PhpUnitDedicatedAssertFixer::name() => true, PhpCsFixerCustomFixers\Fixer\PhpUnitNoUselessReturnFixer::name() => true, PhpCsFixerCustomFixers\Fixer\PhpdocArrayStyleFixer::name() => true, - PhpCsFixerCustomFixers\Fixer\PhpdocNoIncorrectVarAnnotationFixer::name() => true, + // PhpCsFixerCustomFixers\Fixer\PhpdocNoIncorrectVarAnnotationFixer::name() => true, PhpCsFixerCustomFixers\Fixer\PhpdocNoSuperfluousParamFixer::name() => true, // PhpCsFixerCustomFixers\Fixer\PhpdocOnlyAllowedAnnotationsFixer::name() => [ // 'elements' => [ diff --git a/composer.json b/composer.json index 9ee8f1a..813787d 100644 --- a/composer.json +++ b/composer.json @@ -164,7 +164,7 @@ "mark-start": "printf '\\n!\\n!\\t\\033[0;36m%s\\033[0m\\n!\\n\\n' \"Started\"", "md-fix": "@md-lint --fix", "md-lint": "lint-md --config .lintmdrc ./*.md ./.github/ ./docs/", - "pest": "@php ./vendor/bin/pest -v", + "pest": "@php ./vendor/bin/pest", "pest-coverage": "@pest --coverage-html=./build/phpunit/ --coverage-clover=./clover.xml --coverage", "phpstan": "@php ./vendor/bin/phpstan analyse --ansi -v", "phpstan-baseline": "@phpstan --generate-baseline --allow-empty-baseline", diff --git a/config/soar.php b/config/soar.php index bf22d25..d7a100f 100644 --- a/config/soar.php +++ b/config/soar.php @@ -36,15 +36,15 @@ // soar 评分输出器 'outputs' => [ // Guanguans\LaravelSoar\Outputs\ClockworkOutput::class, - // Guanguans\LaravelSoar\Outputs\ConsoleOutput::class, + // Guanguans\LaravelSoar\Outputs\ConsoleOutput::class => ['method' => 'warn'], + // Guanguans\LaravelSoar\Outputs\DebugBarOutput::class => ['name' => 'Soar Scores', 'label' => 'warning'], // Guanguans\LaravelSoar\Outputs\DumpOutput::class => ['exit' => false], // Guanguans\LaravelSoar\Outputs\ErrorLogOutput::class => ['messageType' => 0, 'destination' => '', 'extraHeaders' => ''], // Guanguans\LaravelSoar\Outputs\RayOutput::class => ['label' => 'Soar Scores'], - // Guanguans\LaravelSoar\Outputs\SyslogOutput::class, + // Guanguans\LaravelSoar\Outputs\SyslogOutput::class => ['priority' => LOG_WARNING], Guanguans\LaravelSoar\Outputs\JsonOutput::class => ['key' => 'soar_scores'], - Guanguans\LaravelSoar\Outputs\LogOutput::class => ['channel' => 'daily'], - Guanguans\LaravelSoar\Outputs\DebugBarOutput::class, - Guanguans\LaravelSoar\Outputs\SoarBarOutput::class, + Guanguans\LaravelSoar\Outputs\LogOutput::class => ['channel' => 'daily', 'level' => 'warning'], + Guanguans\LaravelSoar\Outputs\SoarBarOutput::class => ['name' => 'Scores', 'label' => 'warning'], ], // +----------------------------------------------------------------------+// diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 2c0cd45..fb23034 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -61,15 +61,7 @@ $uris - - - clock() - - - - isCommandFinished - headers]]> @@ -82,15 +74,7 @@ headers]]> - - - __construct - - - - __construct - getData setData @@ -99,24 +83,11 @@ headers]]> - - - __construct - - $scores - - - __construct - - - headers]]> - - __construct diff --git a/psalm.xml.dist b/psalm.xml.dist index 35ccf23..129e619 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -39,6 +39,12 @@ + + + + + + diff --git a/src/Outputs/ClockworkOutput.php b/src/Outputs/ClockworkOutput.php index dbb8136..81c7f6f 100644 --- a/src/Outputs/ClockworkOutput.php +++ b/src/Outputs/ClockworkOutput.php @@ -22,6 +22,6 @@ public function output(Collection $scores, $dispatcher): void return; // @codeCoverageIgnore } - $scores->each(static fn (array $score) => clock()->warning($score)); + clock(...$scores); } } diff --git a/src/Outputs/ConsoleOutput.php b/src/Outputs/ConsoleOutput.php index 4a4b71a..31fdbd5 100644 --- a/src/Outputs/ConsoleOutput.php +++ b/src/Outputs/ConsoleOutput.php @@ -16,6 +16,13 @@ class ConsoleOutput extends Output { + protected string $method; + + public function __construct(string $method = 'warn') + { + $this->method = $method; + } + public function output(Collection $scores, $dispatcher): void { if (! $this->isHtmlResponse($dispatcher)) { @@ -37,8 +44,8 @@ public function output(Collection $scores, $dispatcher): void protected function toJs(Collection $scores): string { $js = $scores - ->map(static fn ($score): string => sprintf( - 'console.warn(`%s`);', + ->map(fn ($score): string => sprintf( + "console.{$this->method}(`%s`);", str_replace('`', '\`', to_pretty_json($score)) )) ->join(PHP_EOL); diff --git a/src/Outputs/DebugBarOutput.php b/src/Outputs/DebugBarOutput.php index 7b71bef..1390f74 100644 --- a/src/Outputs/DebugBarOutput.php +++ b/src/Outputs/DebugBarOutput.php @@ -18,10 +18,17 @@ class DebugBarOutput extends Output { - protected static ?MessagesCollector $messagesCollector = null; + protected string $name; + protected string $label; private static bool $outputted = false; + public function __construct(string $name = 'Soar Scores', string $label = 'warning') + { + $this->name = $name; + $this->label = $label; + } + /** * {@inheritDoc} * @@ -33,10 +40,15 @@ public function output(Collection $scores, $dispatcher): void return; } + $laravelDebugbar = app(LaravelDebugbar::class); + if (! $laravelDebugbar->hasCollector($this->name)) { + $laravelDebugbar->addCollector(new MessagesCollector($this->name)); + } + $scores - ->each(fn (array $score) => $this->getMessagesCollector()->addMessage( + ->each(fn (array $score) => $laravelDebugbar[$this->name]->addMessage( $score['Summary'].PHP_EOL.to_pretty_json($score), - 'warning', + $this->label, false )) ->tap(static fn (): bool => self::$outputted = true); @@ -50,20 +62,8 @@ public static function isOutputted(): bool protected function shouldOutput($dispatcher): bool { // app(LaravelDebugbar::class)->isEnabled() - return $this->isHtmlResponse($dispatcher) && class_exists(LaravelDebugbar::class); - } - - protected function getMessagesCollector(): MessagesCollector - { - if (self::$messagesCollector instanceof MessagesCollector) { - return self::$messagesCollector; - } - - $messagesCollector = new MessagesCollector('Soar Scores'); - if (! app(LaravelDebugbar::class)->hasCollector($messagesCollector->getName())) { - app(LaravelDebugbar::class)->addCollector($messagesCollector); - } - - return self::$messagesCollector = $messagesCollector; + return app()->has(LaravelDebugbar::class) + && class_exists(LaravelDebugbar::class) + && $this->isHtmlResponse($dispatcher); } } diff --git a/src/Outputs/DumpOutput.php b/src/Outputs/DumpOutput.php index 143f6a0..2a5be88 100644 --- a/src/Outputs/DumpOutput.php +++ b/src/Outputs/DumpOutput.php @@ -33,9 +33,7 @@ public function __construct(bool $exit = false) public function output(Collection $scores, $dispatcher): void { $scores - ->each(static function (array $score): void { - dump($score); - }) + ->each(static fn (array $score) => dump($score)) ->tap(function (): void { if ($this->exit) { exit(1); // @codeCoverageIgnore diff --git a/src/Outputs/LogOutput.php b/src/Outputs/LogOutput.php index 3e6ef07..46c7c2c 100644 --- a/src/Outputs/LogOutput.php +++ b/src/Outputs/LogOutput.php @@ -18,10 +18,12 @@ class LogOutput extends Output { protected string $channel; + protected string $level; - public function __construct(string $channel = 'daily') + public function __construct(string $channel = 'daily', string $level = 'warning') { $this->channel = $channel; + $this->level = $level; } /** @@ -31,7 +33,8 @@ public function __construct(string $channel = 'daily') */ public function output(Collection $scores, $dispatcher): void { - $scores->each(fn (array $score) => Log::channel($this->channel)->warning( + $scores->each(fn (array $score) => Log::channel($this->channel)->log( + $this->level, $score['Summary'].PHP_EOL.to_pretty_json($score) )); } diff --git a/src/Outputs/SoarBarOutput.php b/src/Outputs/SoarBarOutput.php index 87dae01..501de6b 100644 --- a/src/Outputs/SoarBarOutput.php +++ b/src/Outputs/SoarBarOutput.php @@ -12,20 +12,19 @@ namespace Guanguans\LaravelSoar\Outputs; -use DebugBar\JavascriptRenderer; +use DebugBar\DataCollector\MessagesCollector; use Guanguans\LaravelSoar\SoarBar; use Illuminate\Support\Collection; class SoarBarOutput extends Output { - private SoarBar $soarBar; + protected string $name; + protected string $label; - private JavascriptRenderer $javascriptRenderer; - - public function __construct(SoarBar $soarBar) + public function __construct(string $name = 'Scores', string $label = 'warning') { - $this->soarBar = $soarBar; - $this->javascriptRenderer = $soarBar->getJavascriptRenderer(); + $this->name = $name; + $this->label = $label; } /** @@ -39,24 +38,27 @@ public function output(Collection $scores, $dispatcher): void return; } - $scores->each(fn (array $score) => $this->soarBar['scores']->addMessage( + $soarBar = app(SoarBar::class); + if (! $soarBar->hasCollector($this->name)) { + $soarBar->addCollector(new MessagesCollector($this->name)); + } + + $scores->each(fn (array $score) => $soarBar[$this->name]->addMessage( $score['Summary'].PHP_EOL.to_pretty_json($score), - 'warning', + $this->label, false )); + /** @var \Symfony\Component\HttpFoundation\Response $dispatcher */ $content = $dispatcher->getContent(); - $head = $this->javascriptRenderer->renderHead(); - $widget = $this->javascriptRenderer->render(); + $head = $soarBar->getJavascriptRenderer()->renderHead(); + $widget = $soarBar->getJavascriptRenderer()->render(); // Try to put the js/css directly before the $pos = strripos($content, ''); - if (false !== $pos) { - $content = substr($content, 0, $pos).$head.substr($content, $pos); // @codeCoverageIgnore - } else { - // Append the head before the widget - $widget = $head.$widget; - } + false !== $pos + ? $content = substr($content, 0, $pos).$head.substr($content, $pos) // @codeCoverageIgnore + : $widget = $head.$widget; // Append the head before the widget // Try to put the widget at the end, directly before the $pos = strripos($content, ''); diff --git a/src/Outputs/SyslogOutput.php b/src/Outputs/SyslogOutput.php index d0db555..4500349 100644 --- a/src/Outputs/SyslogOutput.php +++ b/src/Outputs/SyslogOutput.php @@ -16,6 +16,13 @@ class SyslogOutput extends Output { + protected int $priority; + + public function __construct(int $priority = LOG_WARNING) + { + $this->priority = $priority; + } + /** * {@inheritDoc} * @@ -23,6 +30,6 @@ class SyslogOutput extends Output */ public function output(Collection $scores, $dispatcher): void { - $scores->each(fn (array $score) => syslog(LOG_WARNING, $score['Summary'].PHP_EOL.to_pretty_json($score))); + $scores->each(fn (array $score) => syslog($this->priority, $score['Summary'].PHP_EOL.to_pretty_json($score))); } } diff --git a/src/SoarBar.php b/src/SoarBar.php index 18a1ed5..79e073d 100644 --- a/src/SoarBar.php +++ b/src/SoarBar.php @@ -24,9 +24,9 @@ class SoarBar extends DebugBar */ public function __construct() { - $this->addCollector(new MessagesCollector('scores')) - ->addCollector(new MemoryCollector()) + $this->addCollector(new MemoryCollector()) ->addCollector(new PhpInfoCollector()) + // ->addCollector(new MessagesCollector('scores')) ->jsRenderer = new JavascriptRenderer($this); } }