trafficmonitor/app/Controllers/CLI/Collector.php
2025-11-13 18:01:12 +09:00

59 lines
2.7 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);
}
public function execute(): void
{
try {
log_message('info', "트래픽 수집 완료");
$trafficService = service('trafficservice');
$total = 1;
$success = 0;
$error = 0;
foreach ($trafficService->getEntities(['status' => STATUS['AVAILABLE']]) as $trafficEntity) {
try {
$entity = $this->service->create(new CollectorDTO($this->service->getCalculatedData($trafficEntity)));
$success++;
$message = "{$trafficEntity->getServerIP()} 트래픽 수집데이터 저장 완료 In: {$entity->getIn()} Kb/s / Out: {$entity->getOut()} Kb/s";
log_message('info', $message);
} catch (ValidationException $e) {
$error++;
log_message('error', "{$trafficEntity->getServerIP()} 트래픽 수집데이터 검증오류:{$e->getMessage()}");
} catch (\Exception $e) {
$error++;
log_message('error', "{$trafficEntity->getServerIP()} 트래픽 수집데이터 저장 실패:{$e->getMessage()}");
}
$total++;
}
log_message('info', sprintf("트래픽 수집 성공:%s , 실패:%s 총:%s 작업완료", $success, $error, $total));
} catch (\Exception $e) {
log_message('error', "트래픽 수집 작업오류:{$e->getMessage()}");
}
}
}