<?php
namespace App\Controller\BaseSite\Cronjobs;
use App\Entity\Shop\Log\TrafficLog;
use App\Repository\BaseSite\DomainRepository;
use App\Repository\Shop\Log\TrafficLogRepository;
use App\Repository\Shop\Shop\ShopRepository;
use App\Service\Util\ArvanCDN;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
class DomainCronjobsController extends AbstractController
{
#[Route('/base-site/cronjobs/domain/activation', name: 'app_base_site_cronjobs_domain_activation')]
public function app_base_site_cronjobs_domain_activation(ArvanCDN $arvanCDN, DomainRepository $domainRepository): JsonResponse
{
foreach ($arvanCDN->getDomains()['data'] as $datum) {
$domainObject = $domainRepository->findOneBy(['address' => $datum['domain']]);
if ($domainObject && $datum['status'] === 'active') {
$domainObject->setIsConnected(1);
$arvanCDN->setDomainDns($domainObject->getAddress());
$arvanCDN->setEdgeServers($domainObject->getAddress());
$arvanCDN->activateSSL($domainObject->getAddress());
$this->getDoctrine()->getManager()->flush();
}
}
return $this->json(['res' => true]);
}
#[Route('/base-site/cronjobs/domain/traffics', name: 'app_base_site_cronjobs_domain_traffics')]
public function app_base_site_cronjobs_domain_traffics(ArvanCDN $arvanCDN, ShopRepository $shopRepository, EntityManagerInterface $entityManager, TrafficLogRepository $trafficLogRepository): JsonResponse
{
$now = new \DateTimeImmutable('now', new \DateTimeZone('Asia/Tehran'));
$end = $now->setTime((int)$now->format('H'), 0);
$start = $end->modify('-1 hour');
foreach ($shopRepository->findAll() as $shopObject) {
if (!$trafficLogRepository->findOneBy(['shop' => $shopObject, 'startHour' => $start, 'endHour' => $end])) {
$log = new TrafficLog();
} else {
$log = $trafficLogRepository->findOneBy(['shop' => $shopObject, 'startHour' => $start, 'endHour' => $end]);
}
$log->setShop($shopObject);
$log->setStartHour($start);
$log->setEndHour($end);
$inByte = 0;
$outByte = 0;
$totalByte = 0;
$data = $arvanCDN->collectHourlyTraffic('poooshe.com', $start, $end, $shopObject->getSubdomain());
if ($data['res']) {
$totalByte = $totalByte + ($data['data']['statistics']['traffics']['total']);
}
foreach ($shopObject->getDomains() as $domainObject) {
$data = $arvanCDN->collectHourlyTraffic($domainObject->getAddress(), $start, $end);
if ($data['res']) {
$totalByte = $totalByte + ($data['data']['statistics']['traffics']['total']);
}
}
// $log->setInBytes((string) $data['data']['in']);
// var_dump($data['data']);die;
$log->setInBytes(0);
// $log->setOutBytes((string) $data['data']['out']);
$log->setOutBytes(0);
$log->setTotalBytes($totalByte);
$entityManager->persist($log);
$entityManager->flush();
// if ($shopObject->getId() === '1f068c36-03b6-60a4-ab8b-fb2ee65c3086'){
// var_dump($totalByte);die;
// var_dump($trafficLogRepository->getTotalByTime($shopObject->getPlanStartedAt() , $shopObject->getExpiredAt() , $shopObject));die;
// }
$shopObject->setTrafficUsage($trafficLogRepository->getTotalByTime($shopObject->getPlanStartedAt(), $shopObject->getExpiredAt(), $shopObject));
$entityManager->flush();
}
return $this->json(['res' => true]);
}
}