Skip to content

Commit 7efbed2

Browse files
improve: add cleaner functionality via cron and command
1 parent 154b2cd commit 7efbed2

File tree

13 files changed

+238
-48
lines changed

13 files changed

+238
-48
lines changed

Console/Command/CleanCommand.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
/*
3+
* Copyright © Ghost Unicorns snc. All rights reserved.
4+
* See LICENSE for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace GhostUnicorns\WebapiLogs\Console\Command;
10+
11+
use GhostUnicorns\WebapiLogs\Model\Clean;
12+
use Symfony\Component\Console\Command\Command;
13+
use Symfony\Component\Console\Input\InputInterface;
14+
use Symfony\Component\Console\Output\OutputInterface;
15+
16+
class CleanCommand extends Command
17+
{
18+
/**
19+
* @var Clean
20+
*/
21+
private $clean;
22+
23+
/**
24+
* @param Clean $clean
25+
* @param string $name
26+
*/
27+
public function __construct(
28+
Clean $clean,
29+
string $name = 'webapilogs:clean'
30+
) {
31+
$this->clean = $clean;
32+
parent::__construct($name);
33+
}
34+
35+
/**
36+
* @inheritDoc
37+
*/
38+
protected function configure()
39+
{
40+
$this->setDescription('WebapiLogs Cleaner');
41+
parent::configure();
42+
}
43+
44+
/**
45+
* @param InputInterface $input
46+
* @param OutputInterface $output
47+
* @throws \Exception
48+
*/
49+
protected function execute(InputInterface $input, OutputInterface $output)
50+
{
51+
$this->clean->execute();
52+
}
53+
}

Controller/Adminhtml/Reports/Delete.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
namespace GhostUnicorns\WebapiLogs\Controller\Adminhtml\Reports;
1010

1111
use Exception;
12+
use GhostUnicorns\WebapiLogs\Model\Log\Logger;
1213
use GhostUnicorns\WebapiLogs\Model\ResourceModel\Entity\LogCollectionFactory;
1314
use Magento\Backend\App\Action;
1415
use Magento\Backend\App\Action\Context;
1516
use Magento\Framework\App\Action\HttpGetActionInterface as HttpGetActionInterface;
1617
use Magento\Framework\View\Result\PageFactory;
17-
use Psr\Log\LoggerInterface;
1818

1919
class Delete extends Action implements HttpGetActionInterface
2020
{
@@ -34,21 +34,21 @@ class Delete extends Action implements HttpGetActionInterface
3434
private $logCollectionFactory;
3535

3636
/**
37-
* @var LoggerInterface
37+
* @var Logger
3838
*/
3939
private $logger;
4040

4141
/**
4242
* @param Context $context
4343
* @param PageFactory $resultPageFactory
4444
* @param LogCollectionFactory $logCollectionFactory
45-
* @param LoggerInterface $logger
45+
* @param Logger $logger
4646
*/
4747
public function __construct(
4848
Context $context,
4949
PageFactory $resultPageFactory,
5050
LogCollectionFactory $logCollectionFactory,
51-
LoggerInterface $logger
51+
Logger $logger
5252
) {
5353
parent::__construct($context);
5454
$this->resultPageFactory = $resultPageFactory;

Cron/CleanCron.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/*
3+
* Copyright © Ghost Unicorns snc. All rights reserved.
4+
* See LICENSE for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace GhostUnicorns\WebapiLogs\Cron;
10+
11+
use Exception;
12+
use GhostUnicorns\WebapiLogs\Model\Clean;
13+
14+
class CleanCron
15+
{
16+
/**
17+
* @var Clean
18+
*/
19+
private $clean;
20+
21+
/**
22+
* @param Clean $clean
23+
*/
24+
public function __construct(
25+
Clean $clean
26+
) {
27+
$this->clean = $clean;
28+
}
29+
30+
/**
31+
* @throws Exception
32+
*/
33+
public function execute()
34+
{
35+
$this->clean->execute();
36+
}
37+
}

Model/Clean.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
/*
3+
* Copyright © Ghost Unicorns snc. All rights reserved.
4+
* See LICENSE for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace GhostUnicorns\WebapiLogs\Model;
10+
11+
use DateTime;
12+
use Exception;
13+
use GhostUnicorns\WebapiLogs\Model\Log\Logger;
14+
use GhostUnicorns\WebapiLogs\Model\ResourceModel\Entity\LogCollectionFactory;
15+
use GhostUnicorns\WebapiLogs\Model\ResourceModel\LogResourceModel;
16+
17+
class Clean
18+
{
19+
/**
20+
* @var Config
21+
*/
22+
private $config;
23+
24+
/**
25+
* @var Logger
26+
*/
27+
private $logger;
28+
29+
/**
30+
* @var LogCollectionFactory
31+
*/
32+
private $logCollectionFactory;
33+
34+
/**
35+
* @var ResourceModel\LogResourceModel
36+
*/
37+
private $logResourceModel;
38+
39+
/**
40+
* @param Config $config
41+
* @param Logger $logger
42+
* @param LogCollectionFactory $logCollectionFactory
43+
* @param LogResourceModel $logResourceModel
44+
*/
45+
public function __construct(
46+
Config $config,
47+
Logger $logger,
48+
LogCollectionFactory $logCollectionFactory,
49+
LogResourceModel $logResourceModel
50+
) {
51+
$this->config = $config;
52+
$this->logger = $logger;
53+
$this->logCollectionFactory = $logCollectionFactory;
54+
$this->logResourceModel = $logResourceModel;
55+
}
56+
57+
/**
58+
* @throws Exception
59+
*/
60+
public function execute()
61+
{
62+
if (!$this->config->isEnabled()) {
63+
return;
64+
}
65+
66+
$this->logger->info(__('Start webapi logs clean'));
67+
$hours = $this->config->getCleanOlderThanHours();
68+
$datetime = new DateTime('-' . $hours . ' hour');
69+
70+
$collection = $this->logCollectionFactory->create();
71+
$rows = $collection->addFieldToFilter(LogResourceModel::CREATED_AT, ['lt' => $datetime])
72+
->getItems();
73+
74+
$tot = $collection->count();
75+
76+
/** @var LogResourceModel $row */
77+
foreach ($rows as $row) {
78+
$this->logResourceModel->delete($row);
79+
}
80+
81+
$this->logger->info(__('End webapi logs clean. Deleted %1 elements.', $tot));
82+
}
83+
}

Model/Config.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class Config
3131
/**
3232
* string
3333
*/
34-
protected const WEBAPI_LOGS_LOG_CLEANER_CRON_EXPRESSION = 'webapi_logs/log/cleaner_cron_expression';
34+
protected const WEBAPI_LOGS_LOG_CLEAN_OLDER_THAN_HOURS = 'webapi_logs/log/clean_older_than_hours';
3535

3636
/**
3737
* @var ScopeConfigInterface
@@ -82,12 +82,12 @@ public function getSecrets(): array
8282
}
8383

8484
/**
85-
* @return string
85+
* @return int
8686
*/
87-
public function getCleanerCronExpression(): string
87+
public function getCleanOlderThanHours(): int
8888
{
89-
return $this->scopeConfig->getValue(
90-
self::WEBAPI_LOGS_LOG_CLEANER_CRON_EXPRESSION,
89+
return (int)$this->scopeConfig->getValue(
90+
self::WEBAPI_LOGS_LOG_CLEAN_OLDER_THAN_HOURS,
9191
ScopeInterface::SCOPE_WEBSITE
9292
);
9393
}

Model/Log/Logger.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/*
3+
* Copyright © Ghost Unicorns snc. All rights reserved.
4+
* See LICENSE for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace GhostUnicorns\WebapiLogs\Model\Log;
10+
11+
class Logger extends \Monolog\Logger
12+
{
13+
}

Model/LogHandle.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
namespace GhostUnicorns\WebapiLogs\Model;
1010

1111
use Exception;
12+
use GhostUnicorns\WebapiLogs\Model\Log\Logger;
1213
use GhostUnicorns\WebapiLogs\Model\ResourceModel\LogResourceModel;
13-
use Psr\Log\LoggerInterface;
1414

1515
class LogHandle
1616
{
@@ -27,7 +27,7 @@ class LogHandle
2727
private $logResourceModel;
2828

2929
/**
30-
* @var LoggerInterface
30+
* @var Logger
3131
*/
3232
private $logger;
3333

@@ -46,14 +46,14 @@ class LogHandle
4646
* @param LogResourceModel $logResourceModel
4747
* @param SecretParser $secretParser
4848
* @param Config $config
49-
* @param LoggerInterface $logger
49+
* @param Logger $logger
5050
*/
5151
public function __construct(
5252
LogFactory $logFactory,
5353
LogResourceModel $logResourceModel,
5454
SecretParser $secretParser,
5555
Config $config,
56-
LoggerInterface $logger
56+
Logger $logger
5757
) {
5858
$this->logFactory = $logFactory;
5959
$this->logResourceModel = $logResourceModel;

Model/ResourceModel/LogResourceModel.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212

1313
class LogResourceModel extends AbstractDb
1414
{
15+
/** @var string */
16+
const CREATED_AT = 'created_at';
17+
1518
protected function _construct()
1619
{
1720
$this->_init('webapi_logs', 'log_id');

composer.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
"type": "magento2-module",
55
"require": {
66
"magento/framework": "*",
7-
"magento/module-webapi": "*",
8-
"ghostunicorns/module-cron-string-validator": "^1.0"
7+
"magento/module-webapi": "*"
98
},
109
"authors": [
1110
{

etc/adminhtml/system.xml

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,8 @@
3232
<field id="webapi_logs/log/secret_mode">1</field>
3333
</depends>
3434
</field>
35-
<field id="cleaner_cron_expression" translate="Cleaner Cron Expression" type="text" sortOrder="40" showInDefault="1" showInWebsite="0" showInStore="0">
36-
<label>Cleaner Cron Expression</label>
37-
<comment><![CDATA[
38-
<pre>
39-
* * * * *
40-
| | | | |
41-
| | | | +---- Day of the Week (range: 0-6, 1 standing for Monday)
42-
| | | +------ Month of the Year (range: 1-12)
43-
| | +-------- Day of the Month (range: 1-31)
44-
| +---------- Hour (range: 0-23)
45-
+------------ Minute (range: 0-59)
46-
Example: 0 0 * * * Daily at midnight
47-
</pre>
48-
]]></comment>
49-
<validate>required-entry cronexpression</validate>
35+
<field id="clean_older_than_hours" translate="label" type="text" sortOrder="40" showInDefault="1" showInWebsite="0" showInStore="0">
36+
<label>Clean older than hours</label>
5037
<depends>
5138
<field id="webapi_logs/log/enabled">1</field>
5239
</depends>

0 commit comments

Comments
 (0)