Skip to content

Commit

Permalink
refactor: default options are class constants
Browse files Browse the repository at this point in the history
  • Loading branch information
audunru committed Nov 27, 2022
1 parent 6394ec3 commit 1350662
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 12 deletions.
49 changes: 42 additions & 7 deletions src/Listeners/LogMemoryUsage.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,48 @@

class LogMemoryUsage
{
/**
* Default paths where memory usage is ignored.
*/
private const DEFAULT_IGNORE_PATTERNS = [];

/**
* Default paths where memory usage logging is enabled.
*/
private const DEFAULT_PATTERNS = ['*'];

/**
* Default memory usage limit.
*/
private const DEFAULT_LIMIT = 100;

/**
* Default log channel.
*/
private const DEFAULT_CHANNEL = null;

/**
* Default log level.
*/
private const DEFAULT_LEVEL = 'warning';

/**
* Default environments where memory usage header is added to responses.
*/
private const DEFAULT_ENVIRONMENTS = [];

/**
* Default memory usage header name.
*/
private const DEFAULT_HEADER_NAME = 'memory-usage';

public function __construct(protected MemoryHelper $memoryHelper)
{
}

public function handle(RequestHandled $event)
{
$ignorePatterns = config('memory-usage.ignore_patterns', []);
$ignorePatterns = config('memory-usage.ignore_patterns', self::DEFAULT_IGNORE_PATTERNS);

if ($event->request->is($ignorePatterns)) {
return;
Expand All @@ -25,21 +60,21 @@ public function handle(RequestHandled $event)
$peakUsage = $this->memoryHelper->getPeakUsage();

foreach (config('memory-usage.paths', []) as $options) {
$patterns = Arr::get($options, 'patterns', []);
$limit = Arr::get($options, 'limit', 0);
$patterns = Arr::get($options, 'patterns', self::DEFAULT_PATTERNS);
$limit = Arr::get($options, 'limit', self::DEFAULT_LIMIT);

if ($peakUsage > $limit && $event->request->is($patterns)) {
$channel = Arr::get($options, 'channel', null);
$level = Arr::get($options, 'level', 'warning');
$channel = Arr::get($options, 'channel', self::DEFAULT_CHANNEL);
$level = Arr::get($options, 'level', self::DEFAULT_LEVEL);

Log::channel($channel)->log($level, sprintf('Maximum memory %01.2f MiB used during request for %s is greater than limit of %01.2f MiB', $peakUsage, $event->request->getPathInfo(), $limit));
}

$environments = Arr::get($options, 'header.environments', []);
$environments = Arr::get($options, 'header.environments', self::DEFAULT_ENVIRONMENTS);
$headerIsEnabledInEnvironment = App::environment($environments);

if ($event->request->is($patterns) && $headerIsEnabledInEnvironment) {
$headerName = config('memory-usage.header_name', 'memory-usage');
$headerName = config('memory-usage.header_name', self::DEFAULT_HEADER_NAME);

$event->response->headers->set($headerName, $peakUsage);
}
Expand Down
35 changes: 30 additions & 5 deletions src/Listeners/LogSlowResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,38 @@

class LogSlowResponse
{
/**
* Default paths where slow responses are ignored.
*/
private const DEFAULT_IGNORE_PATTERNS = [];

/**
* Default paths where memory usage logging is enabled.
*/
private const DEFAULT_PATTERNS = ['*'];

/**
* Default slow response limit.
*/
private const DEFAULT_SLOW_RESPONSE_LIMIT = 30;

/**
* Default log channel.
*/
private const DEFAULT_CHANNEL = null;

/**
* Default log level.
*/
private const DEFAULT_LEVEL = 'warning';

public function __construct(protected TimeHelper $timeHelper)
{
}

public function handle(RequestHandled $event)
{
$ignorePatterns = config('memory-usage.ignore_patterns', []);
$ignorePatterns = config('memory-usage.ignore_patterns', self::DEFAULT_IGNORE_PATTERNS);

if ($event->request->is($ignorePatterns)) {
return;
Expand All @@ -24,12 +49,12 @@ public function handle(RequestHandled $event)
$responseTime = $this->timeHelper->getResponseTime();

foreach (config('memory-usage.paths', []) as $options) {
$patterns = Arr::get($options, 'patterns', []);
$slowResponseLimit = Arr::get($options, 'slow_response_limit', 1);
$patterns = Arr::get($options, 'patterns', self::DEFAULT_PATTERNS);
$slowResponseLimit = Arr::get($options, 'slow_response_limit', self::DEFAULT_SLOW_RESPONSE_LIMIT);

if ($responseTime > $slowResponseLimit && $event->request->is($patterns)) {
$channel = Arr::get($options, 'channel', null);
$level = Arr::get($options, 'level', 'warning');
$channel = Arr::get($options, 'channel', self::DEFAULT_CHANNEL);
$level = Arr::get($options, 'level', self::DEFAULT_LEVEL);

Log::channel($channel)->log($level, sprintf('Response time %01.2f s for %s is greater than limit of %01.2f s', $responseTime, $event->request->getPathInfo(), $slowResponseLimit));
}
Expand Down

0 comments on commit 1350662

Please sign in to comment.