Move getCountsPerStatus to ScheduledTasksRepository

- Move getCountsPerStatus
- Defined test for getCountsPerStatus
- Update usage

[MAILPOET-4355]
This commit is contained in:
Sam Najian
2022-08-12 11:27:49 +02:00
committed by Veljko V
parent 4687fcd44f
commit bf1ddbedbc
3 changed files with 54 additions and 2 deletions

View File

@@ -8,6 +8,7 @@ use MailPoet\Cron\ActionScheduler\Actions\DaemonTrigger;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
use MailPoet\Helpscout\Beacon; use MailPoet\Helpscout\Beacon;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Router\Endpoints\CronDaemon; use MailPoet\Router\Endpoints\CronDaemon;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
use MailPoet\Tasks\Sending; use MailPoet\Tasks\Sending;
@@ -29,18 +30,23 @@ class Help {
/** @var Bridge $bridge */ /** @var Bridge $bridge */
private $bridge; private $bridge;
/*** @var ScheduledTasksRepository */
private $scheduledTasksRepository;
public function __construct( public function __construct(
PageRenderer $pageRenderer, PageRenderer $pageRenderer,
State $tasksState, State $tasksState,
CronHelper $cronHelper, CronHelper $cronHelper,
Beacon $helpscoutBeacon, Beacon $helpscoutBeacon,
Bridge $bridge Bridge $bridge,
ScheduledTasksRepository $scheduledTasksRepository
) { ) {
$this->pageRenderer = $pageRenderer; $this->pageRenderer = $pageRenderer;
$this->tasksState = $tasksState; $this->tasksState = $tasksState;
$this->cronHelper = $cronHelper; $this->cronHelper = $cronHelper;
$this->helpscoutBeacon = $helpscoutBeacon; $this->helpscoutBeacon = $helpscoutBeacon;
$this->bridge = $bridge; $this->bridge = $bridge;
$this->scheduledTasksRepository = $scheduledTasksRepository;
} }
public function render() { public function render() {
@@ -69,7 +75,7 @@ class Help {
'queueStatus' => $mailerLog, 'queueStatus' => $mailerLog,
]; ];
$systemStatusData['cronStatus']['accessible'] = $this->cronHelper->isDaemonAccessible(); $systemStatusData['cronStatus']['accessible'] = $this->cronHelper->isDaemonAccessible();
$systemStatusData['queueStatus']['tasksStatusCounts'] = $this->tasksState->getCountsPerStatus(); $systemStatusData['queueStatus']['tasksStatusCounts'] = $this->scheduledTasksRepository->getCountsPerStatus();
$systemStatusData['queueStatus']['latestTasks'] = $this->tasksState->getLatestTasks(Sending::TASK_TYPE); $systemStatusData['queueStatus']['latestTasks'] = $this->tasksState->getLatestTasks(Sending::TASK_TYPE);
$this->pageRenderer->displayPage( $this->pageRenderer->displayPage(
'help.html', 'help.html',

View File

@@ -126,6 +126,34 @@ class ScheduledTasksRepository extends Repository {
return $this->findByTypeAndStatus($type, ScheduledTaskEntity::STATUS_SCHEDULED, $limit, true); return $this->findByTypeAndStatus($type, ScheduledTaskEntity::STATUS_SCHEDULED, $limit, true);
} }
public function getCountsPerStatus(string $type = 'sending') {
$stats = [
ScheduledTaskEntity::STATUS_COMPLETED => 0,
ScheduledTaskEntity::STATUS_PAUSED => 0,
ScheduledTaskEntity::STATUS_SCHEDULED => 0,
ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING => 0,
];
$counts = $this->doctrineRepository->createQueryBuilder('st')
->select('COUNT(st.id) as value')
->addSelect('st.status')
->where('st.deletedAt IS NULL')
->andWhere('st.type = :type')
->setParameter('type', $type)
->addGroupBy('st.status')
->getQuery()
->getResult();
foreach ($counts as $count) {
if ($count['status'] === null) {
$stats[ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING] = (int)$count['value'];
continue;
}
$stats[$count['status']] = (int)$count['value'];
}
return $stats;
}
/** /**
* @return ScheduledTaskEntity[] * @return ScheduledTaskEntity[]
*/ */

View File

@@ -90,6 +90,24 @@ class ScheduledTasksRepositoryTest extends \MailPoetTest {
$this->assertSame($expectedResult, $tasks); $this->assertSame($expectedResult, $tasks);
} }
public function testCanCountByStatus(){
$this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_SCHEDULED, Carbon::now()->addDay());
$this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_SCHEDULED, Carbon::now()->addDays(20));
$this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_PAUSED, Carbon::now()->addDay());
$this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_PAUSED, Carbon::now()->addDays(3));
$this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_PAUSED, Carbon::now()->addDays(5));
$this->scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_INVALID, Carbon::now()->addDays(4));
$this->scheduledTaskFactory->create('sending', NULL, Carbon::now()->addDays(4));
$counts = $this->repository->getCountsPerStatus();
$this->assertEquals([
ScheduledTaskEntity::STATUS_SCHEDULED => 2,
ScheduledTaskEntity::STATUS_PAUSED => 3,
ScheduledTaskEntity::STATUS_INVALID => 1,
ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING => 1,
ScheduledTaskEntity::STATUS_COMPLETED => 0,
], $counts);
}
public function cleanup() { public function cleanup() {
$this->truncateEntity(ScheduledTaskEntity::class); $this->truncateEntity(ScheduledTaskEntity::class);
} }