mirror of
https://github.com/bitinflow/expose.git
synced 2026-03-13 13:35:54 +00:00
wip
This commit is contained in:
55
app/Logger/CliRequestLogger.php
Normal file
55
app/Logger/CliRequestLogger.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Logger;
|
||||
|
||||
use Illuminate\Console\OutputStyle;
|
||||
use Illuminate\Support\Collection;
|
||||
use Symfony\Component\Console\Helper\Table;
|
||||
use Symfony\Component\Console\Output\ConsoleOutputInterface;
|
||||
|
||||
class CliRequestLogger extends Logger
|
||||
{
|
||||
/** @var Table */
|
||||
protected $table;
|
||||
|
||||
/** @var Collection */
|
||||
protected $requests;
|
||||
|
||||
/** @var \Symfony\Component\Console\Output\ConsoleSectionOutput */
|
||||
protected $section;
|
||||
|
||||
public function __construct(ConsoleOutputInterface $consoleOutput)
|
||||
{
|
||||
parent::__construct($consoleOutput);
|
||||
|
||||
$this->section = $this->output->section();
|
||||
|
||||
$this->table = new Table($this->section);
|
||||
$this->table->setHeaders(['Method', 'URI', 'Response', 'Duration']);
|
||||
|
||||
$this->requests = new Collection();
|
||||
}
|
||||
|
||||
public function logRequest(LoggedRequest $loggedRequest)
|
||||
{
|
||||
if ($this->requests->has($loggedRequest->id())) {
|
||||
$this->requests[$loggedRequest->id()] = $loggedRequest;
|
||||
} else {
|
||||
$this->requests->prepend($loggedRequest, $loggedRequest->id());
|
||||
}
|
||||
$this->requests = $this->requests->slice(0, 10);
|
||||
|
||||
$this->section->clear();
|
||||
|
||||
$this->table->setRows($this->requests->map(function (LoggedRequest $loggedRequest) {
|
||||
return [
|
||||
$loggedRequest->getRequest()->getMethod(),
|
||||
$loggedRequest->getRequest()->getUri(),
|
||||
optional($loggedRequest->getResponse())->getStatusCode() . ' ' . optional($loggedRequest->getResponse())->getReasonPhrase(),
|
||||
$loggedRequest->getDuration().'ms'
|
||||
];
|
||||
})->toArray());
|
||||
|
||||
$this->table->render();
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,7 @@ class LoggedRequest implements \JsonSerializable
|
||||
$data = [
|
||||
'id' => $this->id,
|
||||
'performed_at' => $this->startTime->toDateTimeString(),
|
||||
'duration' => $this->startTime->diffInMilliseconds($this->stopTime, false),
|
||||
'duration' => $this->getDuration(),
|
||||
'subdomain' => $this->detectSubdomain(),
|
||||
'request' => [
|
||||
'raw' => $this->isBinary($this->rawRequest) ? 'BINARY' : $this->rawRequest,
|
||||
@@ -132,6 +132,11 @@ class LoggedRequest implements \JsonSerializable
|
||||
return $this->rawRequest;
|
||||
}
|
||||
|
||||
public function getResponse()
|
||||
{
|
||||
return $this->parsedResponse;
|
||||
}
|
||||
|
||||
protected function getResponseBody()
|
||||
{
|
||||
return \Laminas\Http\Response::fromString($this->rawResponse)->getBody();
|
||||
@@ -198,4 +203,9 @@ class LoggedRequest implements \JsonSerializable
|
||||
{
|
||||
return Arr::get($this->parsedRequest->getHeaders()->toArray(), 'X-Expose-Request-ID', (string)Str::uuid());
|
||||
}
|
||||
|
||||
public function getDuration()
|
||||
{
|
||||
return $this->startTime->diffInMilliseconds($this->stopTime, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,64 +2,21 @@
|
||||
|
||||
namespace App\Logger;
|
||||
|
||||
use Illuminate\Console\Concerns\InteractsWithIO;
|
||||
use Illuminate\Console\OutputStyle;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
||||
use Symfony\Component\Console\Output\ConsoleOutputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class Logger
|
||||
{
|
||||
/** @var \Symfony\Component\Console\Output\OutputInterface */
|
||||
protected $consoleOutput;
|
||||
use InteractsWithIO;
|
||||
|
||||
/** @var bool */
|
||||
protected $enabled = false;
|
||||
/** @var ConsoleOutputInterface */
|
||||
protected $output;
|
||||
|
||||
/** @var bool */
|
||||
protected $verbose = false;
|
||||
|
||||
public function __construct(OutputInterface $consoleOutput)
|
||||
public function __construct(ConsoleOutputInterface $consoleOutput)
|
||||
{
|
||||
$this->consoleOutput = $consoleOutput;
|
||||
}
|
||||
|
||||
public function enable($enabled = true)
|
||||
{
|
||||
$this->enabled = $enabled;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function verbose($verbose = false)
|
||||
{
|
||||
$this->verbose = $verbose;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function info(string $message)
|
||||
{
|
||||
$this->line($message, 'info');
|
||||
}
|
||||
|
||||
protected function warn(string $message)
|
||||
{
|
||||
if (! $this->consoleOutput->getFormatter()->hasStyle('warning')) {
|
||||
$style = new OutputFormatterStyle('yellow');
|
||||
|
||||
$this->consoleOutput->getFormatter()->setStyle('warning', $style);
|
||||
}
|
||||
|
||||
$this->line($message, 'warning');
|
||||
}
|
||||
|
||||
protected function error(string $message)
|
||||
{
|
||||
$this->line($message, 'error');
|
||||
}
|
||||
|
||||
protected function line(string $message, string $style)
|
||||
{
|
||||
$styled = $style ? "<$style>$message</$style>" : $message;
|
||||
|
||||
$this->consoleOutput->writeln($styled);
|
||||
$this->output = $consoleOutput;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,12 +10,19 @@ use function GuzzleHttp\Psr7\stream_for;
|
||||
|
||||
class RequestLogger
|
||||
{
|
||||
/** @var array */
|
||||
protected $requests = [];
|
||||
|
||||
/** @var array */
|
||||
protected $responses = [];
|
||||
|
||||
public function __construct(Browser $browser)
|
||||
/** @var CliRequestLogger */
|
||||
protected $cliRequestLogger;
|
||||
|
||||
public function __construct(Browser $browser, CliRequestLogger $cliRequestLogger)
|
||||
{
|
||||
$this->client = $browser;
|
||||
$this->cliRequestLogger = $cliRequestLogger;
|
||||
}
|
||||
|
||||
public function findLoggedRequest(string $id): ?LoggedRequest
|
||||
@@ -27,10 +34,14 @@ class RequestLogger
|
||||
|
||||
public function logRequest(string $rawRequest, Request $request)
|
||||
{
|
||||
array_unshift($this->requests, new LoggedRequest($rawRequest, $request));
|
||||
$loggedRequest = new LoggedRequest($rawRequest, $request);
|
||||
|
||||
array_unshift($this->requests, $loggedRequest);
|
||||
|
||||
$this->requests = array_slice($this->requests, 0, 10);
|
||||
|
||||
$this->cliRequestLogger->logRequest($loggedRequest);
|
||||
|
||||
$this->pushLogs();
|
||||
}
|
||||
|
||||
@@ -42,6 +53,8 @@ class RequestLogger
|
||||
if ($loggedRequest) {
|
||||
$loggedRequest->setResponse($rawResponse, Response::fromString($rawResponse));
|
||||
|
||||
$this->cliRequestLogger->logRequest($loggedRequest);
|
||||
|
||||
$this->pushLogs();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user