Skip to content

Commit a2442a5

Browse files
committed
Implements #2 - use filesystem
1 parent 01334e0 commit a2442a5

File tree

19 files changed

+206
-53
lines changed

19 files changed

+206
-53
lines changed

Controller/Adminhtml/Reports/Delete.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
namespace Opengento\WebapiLogger\Controller\Adminhtml\Reports;
1010

1111
use Exception;
12-
use Magento\Framework\Controller\Result\Redirect;
13-
use Opengento\WebapiLogger\Model\Clean;
1412
use Magento\Backend\App\Action;
1513
use Magento\Backend\App\Action\Context;
1614
use Magento\Framework\App\Action\HttpGetActionInterface;
15+
use Magento\Framework\Controller\Result\Redirect;
16+
use Opengento\WebapiLogger\Model\Clean;
1717

1818
class Delete extends Action implements HttpGetActionInterface
1919
{

Model/Config.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010

1111
use Magento\Framework\App\Config\ScopeConfigInterface;
1212
use Magento\Store\Model\ScopeInterface;
13+
use Opengento\WebapiLogger\Model\Config\SaveMode;
14+
15+
use function array_map;
1316

1417
class Config
1518
{
1619
private const WEBAPI_LOGS_IS_ENABLED = 'webapi_logs/log/enabled';
20+
private const WEBAPI_LOGS_SAVE_MODES = 'webapi_logs/log/save_modes';
1721
private const WEBAPI_LOGS_LOG_SECRET_MODE = 'webapi_logs/log/secret_mode';
1822
private const WEBAPI_LOGS_LOG_SECRET_WORDS = 'webapi_logs/log/secret_words';
1923
private const WEBAPI_LOGS_LOG_CLEAN_OLDER_THAN_HOURS = 'webapi_logs/log/clean_older_than_hours';
@@ -25,6 +29,14 @@ public function isEnabled(): bool
2529
return $this->scopeConfig->isSetFlag(self::WEBAPI_LOGS_IS_ENABLED, ScopeInterface::SCOPE_WEBSITE);
2630
}
2731

32+
public function getSaveModes(): array
33+
{
34+
return array_map(
35+
static fn (string $saveMode): SaveMode => SaveMode::from($saveMode),
36+
$this->scopeConfig->getValue(self::WEBAPI_LOGS_SAVE_MODES)
37+
);
38+
}
39+
2840
public function isSecretMode(): bool
2941
{
3042
return $this->scopeConfig->isSetFlag(self::WEBAPI_LOGS_LOG_SECRET_MODE, ScopeInterface::SCOPE_WEBSITE);

Model/Config/SaveMode.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Opengento\WebapiLogger\Model\Config;
10+
11+
use Magento\Framework\Phrase;
12+
13+
use function array_map;
14+
15+
enum SaveMode: string
16+
{
17+
private const PSR = 'psr';
18+
private const DATABASE = 'database';
19+
20+
private const LABELS = [
21+
self::PSR => 'PSR Logger',
22+
self::DATABASE => 'Database'
23+
];
24+
25+
case Psr = self::PSR;
26+
case DataBase = self::DATABASE;
27+
28+
public function getLabel(): Phrase
29+
{
30+
return new Phrase(self::LABELS[$this->value] ?? $this->name);
31+
}
32+
33+
public static function toOptionArray(): array
34+
{
35+
return array_map(
36+
static fn (self $saveMode): array => ['label' => $saveMode->getLabel(), 'value' => $saveMode->value],
37+
self::cases()
38+
);
39+
}
40+
}

Model/Config/Source/Code.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
namespace Opengento\WebapiLogger\Model\Config\Source;
1010

11+
use Magento\Framework\Data\OptionSourceInterface;
1112
use Opengento\WebapiLogger\Model\ResourceModel\Entity\LogCollection;
1213
use Opengento\WebapiLogger\Model\ResourceModel\Entity\LogCollectionFactory;
13-
use Magento\Framework\Data\OptionSourceInterface;
1414

1515
class Code implements OptionSourceInterface
1616
{

Model/Config/Source/Methods.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
namespace Opengento\WebapiLogger\Model\Config\Source;
1010

11+
use Magento\Framework\Data\OptionSourceInterface;
1112
use Opengento\WebapiLogger\Model\ResourceModel\Entity\LogCollection;
1213
use Opengento\WebapiLogger\Model\ResourceModel\Entity\LogCollectionFactory;
13-
use Magento\Framework\Data\OptionSourceInterface;
1414

1515
class Methods implements OptionSourceInterface
1616
{

Model/Config/Source/RequestorIp.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
namespace Opengento\WebapiLogger\Model\Config\Source;
1010

11+
use Magento\Framework\Data\OptionSourceInterface;
1112
use Opengento\WebapiLogger\Model\ResourceModel\Entity\LogCollection;
1213
use Opengento\WebapiLogger\Model\ResourceModel\Entity\LogCollectionFactory;
13-
use Magento\Framework\Data\OptionSourceInterface;
1414

1515
class RequestorIp implements OptionSourceInterface
1616
{

Model/Config/Source/SaveModes.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Opengento\WebapiLogger\Model\Config\Source;
10+
11+
use Magento\Framework\Data\OptionSourceInterface;
12+
use Opengento\WebapiLogger\Model\Config\SaveMode;
13+
14+
class SaveModes implements OptionSourceInterface
15+
{
16+
private ?array $options = null;
17+
18+
public function toOptionArray(): array
19+
{
20+
return $this->options ??= SaveMode::toOptionArray();
21+
}
22+
}

Model/Log.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
namespace Opengento\WebapiLogger\Model;
1010

11-
use Opengento\WebapiLogger\Model\ResourceModel\LogResourceModel;
1211
use Magento\Framework\Model\AbstractModel;
12+
use Opengento\WebapiLogger\Model\ResourceModel\LogResourceModel;
1313

1414
class Log extends AbstractModel
1515
{

Model/LogHandle.php

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
namespace Opengento\WebapiLogger\Model;
1010

1111
use Exception;
12-
use Opengento\WebapiLogger\Model\ResourceModel\LogResourceModel;
1312
use Psr\Log\LoggerInterface;
1413

1514
class LogHandle
@@ -18,9 +17,9 @@ class LogHandle
1817

1918
public function __construct(
2019
private LogFactory $logFactory,
21-
private LogResourceModel $logResourceModel,
2220
private SecretParser $secretParser,
2321
private Config $config,
22+
private LoggerManager $loggerManager,
2423
private LoggerInterface $logger
2524
) {}
2625

@@ -31,7 +30,7 @@ public function before(
3130
string $requestHeaders,
3231
string $requestBody,
3332
string $requestDateTime
34-
) {
33+
): void {
3534
try {
3635
if ($this->config->isSecretMode()) {
3736
$requestorIp = $this->secretParser->parseIp();
@@ -41,40 +40,43 @@ public function before(
4140

4241
$log = $this->logFactory->create();
4342
$log->setData([
43+
'is_request' => true,
4444
'request_method' => $requestMethod,
4545
'requestor_ip' => $requestorIp,
4646
'request_url' => $requestPath,
4747
'request_headers' => $requestHeaders,
4848
'request_body' => $requestBody,
4949
'request_datetime' => $requestDateTime
5050
]);
51-
$this->logResourceModel->save($log);
51+
$this->loggerManager->log($log);
5252
$this->lastLog = $log;
5353
} catch (Exception $exception) {
54-
$this->logger->error(__('Cant complete webapi log save because of error: %1', $exception->getMessage()));
54+
$this->logger->error('Cant complete webapi log save because of error: ' . $exception->getMessage());
5555
}
5656
}
5757

5858
public function after(
5959
string $responseCode,
6060
string $responseBody,
6161
string $responseDateTime
62-
) {
63-
if (!$this->lastLog) {
64-
return;
65-
}
62+
): void {
63+
if ($this->lastLog) {
64+
try {
65+
if ($this->config->isSecretMode()) {
66+
$responseBody = $this->secretParser->parseBody($responseBody);
67+
}
6668

67-
try {
68-
if ($this->config->isSecretMode()) {
69-
$responseBody = $this->secretParser->parseBody($responseBody);
69+
$this->lastLog->unsetData('is_request');
70+
$this->lastLog->addData([
71+
'is_response' => true,
72+
'response_body' => $responseBody,
73+
'response_code' => $responseCode,
74+
'response_datetime' => $responseDateTime
75+
]);
76+
$this->loggerManager->log($log);
77+
} catch (Exception $exception) {
78+
$this->logger->error('Cant complete webapi log save because of error: ' . $exception->getMessage());
7079
}
71-
72-
$this->lastLog->setResponseBody($responseBody);
73-
$this->lastLog->setResponseCode($responseCode);
74-
$this->lastLog->setResponseDatetime($responseDateTime);
75-
$this->logResourceModel->save($this->lastLog);
76-
} catch (Exception $exception) {
77-
$this->logger->error(__('Cant complete webapi log save because of error: %1', $exception->getMessage()));
7880
}
7981
}
8082
}

Model/LoggerManager.php

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Opengento\WebapiLogger\Model;
10+
11+
use Magento\Framework\Exception\AlreadyExistsException;
12+
use Opengento\WebapiLogger\Model\Config\SaveMode;
13+
use Opengento\WebapiLogger\Model\ResourceModel\LogResourceModel;
14+
use Psr\Log\LoggerInterface;
15+
16+
use function in_array;
17+
18+
class LoggerManager
19+
{
20+
public function __construct(
21+
private LogResourceModel $logResourceModel,
22+
private Config $config,
23+
private LoggerInterface $logger
24+
) {}
25+
26+
/**
27+
* @throws AlreadyExistsException
28+
*/
29+
public function log(Log $log): void
30+
{
31+
$saveModes = $this->config->getSaveModes();
32+
33+
if (in_array(SaveMode::Psr, $saveModes, true)) {
34+
$this->savePsr($log);
35+
}
36+
if (in_array(SaveMode::DataBase, $saveModes, true)) {
37+
$this->saveDb($log);
38+
}
39+
}
40+
41+
private function savePsr(Log $log): void
42+
{
43+
$this->logger->debug(
44+
match(true) {
45+
$log->getData('is_response') => 'Logged WEBAPI Response',
46+
$log->getData('is_request') => 'Logged WEBAPI Request',
47+
default => 'n/a',
48+
},
49+
$log->toArray()
50+
);
51+
}
52+
53+
/**
54+
* @throws AlreadyExistsException
55+
*/
56+
private function saveDb(Log $log): void
57+
{
58+
$this->logResourceModel->save($log);
59+
}
60+
}

0 commit comments

Comments
 (0)