trafficmonitor/app/Controllers/CLI/Collector.php
2025-11-13 14:20:48 +09:00

52 lines
2.2 KiB
PHP

<?php
namespace App\Controllers\CLI;
use App\Controllers\CommonController;
use App\DTOs\CollectorDTO;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Exceptions\ValidationException;
use Psr\Log\LoggerInterface;
class Collector extends CommonController
{
public const PATH = 'collector';
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
if ($this->service === null) {
$this->service = service('collectorservice');
$fields = ['trafficinfo_uid', 'in', 'out', 'raw_in', 'raw_out'];
$filters = ['trafficinfo_uid'];
$this->service->getFormService()->setFormFields($fields);
$this->service->getFormService()->setFormRules('create', $fields);
$this->service->getFormService()->setFormFilters($filters);
$this->service->getFormService()->setFormOptions($filters);
$this->service->getFormService()->setBatchjobFilters($filters);
}
$this->addActionPaths(self::PATH);
}
protected function createDTO(array $formDatas): CollectorDTO
{
return new CollectorDTO($formDatas);
}
public function execute(): void
{
try {
$trafficService = service('trafficservice');
foreach ($trafficService->getEntities(['status' => STATUS['AVAILABLE']]) as $trafficEntity) {
$data = $this->service->getCalculatedData($trafficEntity);
$entity = $this->service->create($this->createDTO($data));
$message = "트래픽 계산 및 저장 완료 (UID: {$entity->getTrafficInfoUID()}), In: {$entity->getIn()} Kb/s / Out: {$entity->getOut()} Kb/s";
log_message('info', $message);
echo $message . "\n";
}
} catch (ValidationException $e) {
log_message('error', "트래픽 계산 및 저장 검증오류:{$e->getMessage()}");
} catch (\Exception $e) {
log_message('error', "트래픽 계산 및 저장 실패오류:{$e->getMessage()}");
}
}
}