Add message queue length and per-queue clear buttons to Debugger page.
This commit is contained in:
parent
0a8c41542d
commit
97e1fab14e
|
@ -108,7 +108,7 @@ return function (Application $console) {
|
|||
)->setDescription(__('Process the message queue.'));
|
||||
|
||||
$console->command(
|
||||
'queue:clear',
|
||||
'queue:clear [queue]',
|
||||
Command\MessageQueue\ClearCommand::class
|
||||
)->setDescription(__('Clear the contents of the message queue.'));
|
||||
|
||||
|
|
|
@ -19,7 +19,8 @@ return function (App $app) {
|
|||
$group->get('/clear-cache', Controller\Admin\DebugController::class . ':clearCacheAction')
|
||||
->setName('admin:debug:clear-cache');
|
||||
|
||||
$group->get('/clear-queue', Controller\Admin\DebugController::class . ':clearQueueAction')
|
||||
$group->get('/clear-queue[/{queue}]',
|
||||
Controller\Admin\DebugController::class . ':clearQueueAction')
|
||||
->setName('admin:debug:clear-queue');
|
||||
|
||||
$group->get('/sync/{type}', Controller\Admin\DebugController::class . ':syncAction')
|
||||
|
|
|
@ -31,6 +31,8 @@ class Application extends \Silly\Edition\PhpDi\Application
|
|||
$result_output = stream_get_contents($temp_stream);
|
||||
fclose($temp_stream);
|
||||
|
||||
$result_output = trim($result_output);
|
||||
|
||||
return [
|
||||
$result_code,
|
||||
$result_output,
|
||||
|
|
|
@ -10,14 +10,27 @@ class ClearCommand extends CommandAbstract
|
|||
{
|
||||
public function __invoke(
|
||||
SymfonyStyle $io,
|
||||
QueueManager $queueManager
|
||||
QueueManager $queueManager,
|
||||
?string $queue = null
|
||||
): int {
|
||||
$connections = $queueManager->getConnections();
|
||||
foreach ($connections as $connection) {
|
||||
$connection->cleanup();
|
||||
$allQueues = QueueManager::getAllQueues();
|
||||
|
||||
if (!empty($queue)) {
|
||||
if (in_array($queue, $allQueues, true)) {
|
||||
$queueManager->clearQueue($queue);
|
||||
$io->success(sprintf('Message queue "%s" cleared.', $queue));
|
||||
} else {
|
||||
$io->error(sprintf('Message queue "%s" does not exist.', $queue));
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
foreach ($allQueues as $queueName) {
|
||||
$queueManager->clearQueue($queueName);
|
||||
}
|
||||
|
||||
$io->success('All message queues cleared.');
|
||||
}
|
||||
|
||||
$io->success('Message queue cleared.');
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ use App\File;
|
|||
use App\Http\Response;
|
||||
use App\Http\ServerRequest;
|
||||
use App\Message\RunSyncTaskMessage;
|
||||
use App\MessageQueue\QueueManager;
|
||||
use App\Radio\AutoDJ;
|
||||
use App\Radio\Backend\Liquidsoap;
|
||||
use App\Session\Flash;
|
||||
|
@ -42,10 +43,19 @@ class DebugController extends AbstractLogViewerController
|
|||
ServerRequest $request,
|
||||
Response $response,
|
||||
Entity\Repository\StationRepository $stationRepo,
|
||||
Runner $sync
|
||||
Runner $sync,
|
||||
QueueManager $queueManager
|
||||
): ResponseInterface {
|
||||
$queues = QueueManager::getAllQueues();
|
||||
|
||||
$queueTotals = [];
|
||||
foreach ($queues as $queue) {
|
||||
$queueTotals[$queue] = $queueManager->getQueueCount($queue);
|
||||
}
|
||||
|
||||
return $request->getView()->renderToResponse($response, 'admin/debug/index', [
|
||||
'sync_times' => $sync->getSyncTimes(),
|
||||
'queue_totals' => $queueTotals,
|
||||
'stations' => $stationRepo->fetchArray(),
|
||||
]);
|
||||
}
|
||||
|
@ -152,11 +162,15 @@ class DebugController extends AbstractLogViewerController
|
|||
|
||||
public function clearQueueAction(
|
||||
ServerRequest $request,
|
||||
Response $response
|
||||
Response $response,
|
||||
?string $queue = null
|
||||
): ResponseInterface {
|
||||
[$resultCode, $resultOutput] = $this->console->runCommandWithArgs(
|
||||
'queue:clear'
|
||||
);
|
||||
$args = [];
|
||||
if (!empty($queue)) {
|
||||
$args['queue'] = $queue;
|
||||
}
|
||||
|
||||
[$resultCode, $resultOutput] = $this->console->runCommandWithArgs('queue:clear', $args);
|
||||
|
||||
// Flash an update to ensure the session is recreated.
|
||||
$request->getFlash()->addMessage($resultOutput, Flash::SUCCESS);
|
||||
|
|
|
@ -62,6 +62,7 @@ class QueueManager implements SendersLocatorInterface
|
|||
'delete_after_ack' => true,
|
||||
'redeliver_timeout' => 43200,
|
||||
'claim_interval' => 86400,
|
||||
'dbindex' => $this->redis->getDbNum(),
|
||||
],
|
||||
array_filter([
|
||||
'host' => $this->redis->getHost(),
|
||||
|
@ -115,6 +116,11 @@ class QueueManager implements SendersLocatorInterface
|
|||
$connection->setup();
|
||||
}
|
||||
|
||||
public function getQueueCount(string $queueName): int
|
||||
{
|
||||
return $this->redis->xLen('messages_' . $queueName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
|
|
|
@ -26,13 +26,13 @@ $this->layout('main', [
|
|||
<div class="col-md-6">
|
||||
<div class="card mb-3">
|
||||
<div class="card-header bg-primary-dark">
|
||||
<h2 class="card-title"><?=__('Clear Message Queue')?></h2>
|
||||
<h2 class="card-title"><?=__('Clear All Message Queues')?></h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p><?=__('This will clear any pending unprocessed messages in the message queue.')?></p>
|
||||
<p><?=__('This will clear any pending unprocessed messages in all message queues.')?></p>
|
||||
<div class="buttons">
|
||||
<a class="btn btn-sm btn-primary" role="button" href="<?=$router->named('admin:debug:clear-queue')?>">
|
||||
<?=__('Clear Message Queue')?>
|
||||
<?=__('Clear All Message Queues')?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -63,6 +63,29 @@ $this->layout('main', [
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-header bg-primary-dark">
|
||||
<h2 class="card-title"><?=__('Message Queues')?></h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<?php foreach ($queue_totals as $queueType => $queueTotal): ?>
|
||||
<div class="col">
|
||||
<h5 class="mb-0"><?=$queueType?></h5>
|
||||
<p><?=__('%d queued messages', $queueTotal)?></p>
|
||||
|
||||
<div class="buttons">
|
||||
<a class="btn btn-sm btn-primary" role="button" href="<?=$router->named('admin:debug:clear-queue',
|
||||
['queue' => $queueType])?>">
|
||||
<?=__('Clear Queue')?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header bg-primary-dark">
|
||||
<h2 class="card-title"><?=__('Station-Specific Debugging')?></h2>
|
||||
|
|
Loading…
Reference in New Issue