src/Controller/Cronjob/Usage/Open/UsageController.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Cronjob\Usage\Open;
  3. use App\Entity\VPN\OpenVPN\Server;
  4. use App\Entity\VPN\Service\Service;
  5. use App\Entity\VPN\Service\ServiceUsage;
  6. use App\Repository\VPN\Service\ServiceUsageRepository;
  7. use App\Service\Util\Mikrotik;
  8. use App\Service\Util\NotificationService;
  9. use App\Service\Util\Telegram;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Exception;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class UsageController extends AbstractController
  16. {
  17.     #[Route('/cronjob/open'name'app_cronjob_usage_open')]
  18.     public function index(NotificationService $notificationService ,EntityManagerInterface $entityManagerTelegram $telegram ServiceUsageRepository $serviceUsageRepository): JsonResponse
  19.     {
  20.         $calculationVolume 1.5;
  21.         try {
  22.             foreach ($entityManager->getRepository(Server::class)->findBy(['active' => 1'deletedAt' => null]) as $server) {
  23.                 /**
  24.                  * @var Server $server
  25.                  */
  26.                 $serverContent null;
  27.                 try {
  28.                     $apiObject = new Mikrotik($server->getUMEndpoint(), $server->getUMUsername(), $server->getUMPassword(), $server->getUMProfileName(), $server->getUMSSHPort());
  29.                     $serverContent $apiObject->getUsersUsage();
  30.                 } catch (Exception $exception) {
  31.                     $notificationService->exception($exception);
  32.                     $telegram->exception($exception);
  33.                 }
  34.                 if ($serverContent) {
  35.                     foreach ($serverContent['data'] as $item) {
  36.                         $service $entityManager->getRepository(Service::class)->findOneBy(['clientId' => (int)$item['name']]);
  37.                         if ($service && !$service->getExpireAt() && (((int)$item['total-download']) + ((int)$item['total-upload']))!== 0)
  38.                         {
  39.                             $now = new \DateTimeImmutable();
  40.                             $expiredAt =  $now->add(new \DateInterval("P{$service->getPlan()->getDays()}D"));
  41.                             $service->setExpireAt($expiredAt);
  42.                             $entityManager->flush();
  43.                         }
  44.                         if ($service) {
  45.                             $service->setOpenVpnUsage(
  46.                                 $calculationVolume * (
  47.                                 (((int)$item['total-download']) + ((int)$item['total-upload']))
  48.                                 )
  49.                             );
  50.                             $now = new \DateTime();
  51.                             $todayUsageObject $serviceUsageRepository->findOneBy(['service' => $service 'date' => $now]);
  52.                             if (!$todayUsageObject) {
  53.                                 $todayUsageObject = new ServiceUsage();
  54.                                 $todayUsageObject->setService($service);
  55.                                 $todayUsageObject->setDate(new \DateTime());
  56.                                 $entityManager->persist($todayUsageObject);
  57.                             }
  58.                             $yesterday $now->modify('-1 day');
  59.                             $yesterdayUsageObject $serviceUsageRepository->findOneBy(['service' => $service 'date' => $yesterday]);
  60.                             if (!$yesterdayUsageObject) {
  61.                                 $yesterdayUsageObject = new ServiceUsage();
  62.                                 $yesterdayUsageObject->setService($service);
  63.                                 $yesterdayUsageObject->setDate($yesterday);
  64.                                 $entityManager->persist($todayUsageObject);
  65.                                 $entityManager->flush();
  66.                                 $yesterdayUsageWithCalculationVolume 0;
  67.                             }else{
  68.                                 $yesterdayUsageWithCalculationVolume $yesterdayUsageObject->getOpenUsage();
  69.                             }
  70.                             $add =  $calculationVolume * (
  71.                                 (((int)$item['total-download']) + ((int)$item['total-upload']))
  72.                                 ) - $yesterdayUsageWithCalculationVolume;
  73.                             $todayUsageObject->setOpenUsage($add);
  74.                             $entityManager->flush();
  75.                         }
  76.                     }
  77.                 }
  78.             }
  79.             $entityManager->clear();
  80.         } catch (Exception $exception) {
  81.             $notificationService->exception($exception);
  82. //            var_dump($exception->getMessage());die;
  83.             $telegram->exception($exception);
  84.         }
  85.         return $this->json(['res' => true]);
  86.     }
  87. }