AzuraCast/src/Controller/Admin/DebugController.php

131 lines
3.6 KiB
PHP

<?php
namespace App\Controller\Admin;
use App\Entity;
use App\Http\Response;
use App\Http\ServerRequest;
use App\Radio\AutoDJ;
use App\Radio\Backend\Liquidsoap;
use App\Sync\Runner;
use Doctrine\ORM\EntityManagerInterface;
use Monolog\Handler\TestHandler;
use Monolog\Logger;
use Psr\Http\Message\ResponseInterface;
class DebugController
{
protected Logger $logger;
protected TestHandler $testHandler;
public function __construct(Logger $logger)
{
$this->logger = $logger;
$this->testHandler = new TestHandler(Logger::DEBUG, false);
}
public function __invoke(
ServerRequest $request,
Response $response,
Entity\Repository\StationRepository $stationRepo,
Runner $sync
): ResponseInterface {
return $request->getView()->renderToResponse($response, 'admin/debug/index', [
'sync_times' => $sync->getSyncTimes(),
'stations' => $stationRepo->fetchArray(),
]);
}
public function syncAction(
ServerRequest $request,
Response $response,
Runner $sync,
$type
): ResponseInterface {
$this->logger->pushHandler($this->testHandler);
switch ($type) {
case 'long':
$sync->syncLong(true);
break;
case 'medium':
$sync->syncMedium(true);
break;
case 'short':
$sync->syncShort(true);
break;
case 'nowplaying':
default:
$sync->syncNowplaying(true);
break;
}
$this->logger->popHandler();
return $request->getView()->renderToResponse($response, 'system/log_view', [
'sidebar' => null,
'title' => __('Sync Task Output'),
'log_records' => $this->testHandler->getRecords(),
]);
}
public function nextsongAction(
ServerRequest $request,
Response $response,
EntityManagerInterface $em,
AutoDJ $autoDJ
): ResponseInterface {
$this->logger->pushHandler($this->testHandler);
$station = $request->getStation();
$em->createQuery(/** @lang DQL */ 'DELETE FROM App\Entity\SongHistory sh
WHERE sh.station = :station
AND sh.timestamp_cued != 0
AND sh.timestamp_start = 0')
->setParameter('station', $station)
->execute();
$this->logger->debug('Current queue cleared.');
$autoDJ->buildQueue($station);
$this->logger->popHandler();
return $request->getView()->renderToResponse($response, 'system/log_view', [
'sidebar' => null,
'title' => __('Debug Output'),
'log_records' => $this->testHandler->getRecords(),
]);
}
public function telnetAction(
ServerRequest $request,
Response $response
): ResponseInterface {
$this->logger->pushHandler($this->testHandler);
$station = $request->getStation();
$backend = $request->getStationBackend();
if ($backend instanceof Liquidsoap) {
$command = $request->getParam('command');
$telnetResponse = $backend->command($station, $command);
$this->logger->debug('Telnet Command Response', [
'response' => $telnetResponse,
]);
}
$this->logger->popHandler();
return $request->getView()->renderToResponse($response, 'system/log_view', [
'sidebar' => null,
'title' => __('Debug Output'),
'log_records' => $this->testHandler->getRecords(),
]);
}
}