src/Controller/Cronjob/Server/Hetzner/ServerController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Cronjob\Server\Hetzner;
  3. use App\Entity\SAAS\Server\Hetzner\DataCenter;
  4. use App\Entity\SAAS\Server\Hetzner\DataCenterSupportedServerTypes;
  5. use App\Entity\SAAS\Server\Hetzner\Ip;
  6. use App\Repository\SAAS\Server\Hetzner\ImageRepository;
  7. use App\Repository\SAAS\Server\Hetzner\IpRepository;
  8. use App\Repository\SAAS\Server\Hetzner\ServerRepository;
  9. use App\Service\Server\Hetzner\ServerService;
  10. use App\Service\Util\HetznerApi;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class ServerController extends AbstractController
  16. {
  17.     public EntityManagerInterface $em ;
  18.     public ServerService $service;
  19.     public function __construct(EntityManagerInterface $em ServerService $service)
  20.     {
  21.         $this->em $em;
  22.         $this->service $service;
  23.     }
  24.     #[Route('/cronjobs/hetzner/server'name'app_cronjobs_hetzner_server')]
  25.     public function index(ServerRepository $serverRepository ImageRepository $imageRepository IpRepository $ipRepository): Response
  26.     {
  27.         $hetznerApi = new HetznerApi($_ENV['HETZNERAPITOKEN']);
  28.         $servers $hetznerApi->getServers();
  29.         foreach ($servers as $server) {
  30.             if ($serverRepository->findOneBy(['systemId' => $server['id']])){
  31.                 $serverObject $serverRepository->findOneBy(['systemId' => $server['id']]);
  32.                 if ($serverObject->isActive()){
  33.                     $serverObject->setStatus($server['status']);
  34.                     if ($serverObject->getStatus() == 'off'){
  35.                         $serverObject->setIsPowerOn(false);
  36.                     }else{
  37.                         $serverObject->setIsPowerOn(true);
  38.                     }
  39.                     $serverObject->setRescueEnabled((bool)$server['rescue_enabled']);
  40.                     $serverObject->setName($server['name']);
  41.                     if (isset($server['included_traffic']) ){
  42.                         $serverObject->setIncludedTraffic($server['included_traffic']);
  43.                     }else{
  44.                         $serverObject->setIncludedTraffic(21990232555520);
  45.                     }
  46.                     $serverObject->setOutgoingTraffic($server['outgoing_traffic']);
  47.                     $serverObject->setIngoingTraffic($server['ingoing_traffic']);
  48.                     $serverObject->setAnalytics(json_encode($this->service->getServerMetrics($serverObject)));
  49.                     $serverObject->setActions(json_encode($this->service->getServerActions($serverObject)));
  50.                     $imageObject $imageRepository->findOneBy(['systemId' => $server['image']['id']]);
  51.                     if ($imageObject) {
  52.                         $serverObject->setimage($imageObject);
  53.                     }
  54.                     foreach ($server['public_net'] as $ipType => $ipArray) {
  55.                         if ($ipType === 'ipv4' || $ipType === 'ipv6') {
  56.                             $ipObject $ipRepository->findOneBy(['ip' => $ipArray['ip']  , 'server' => $serverObject 'active' => 'deletedAt' => null]);
  57.                             if (!$ipObject) {
  58.                                 $ipObject = new Ip();
  59.                                 $ipObject->setIp($ipArray['ip']);
  60.                                 $ipObject->setType($ipType);
  61.                                 $ipObject->setOwner($this->getUser());
  62.                                 $ipObject->setServer($serverObject);
  63.                                 if (is_array($ipArray['dns_ptr'])){
  64.                                     $ipObject->setName($ipArray['ip']);
  65.                                 }else{
  66.                                     $ipObject->setName($ipArray['dns_ptr']);
  67.                                 }
  68.                                 $ipObject->setIsLocked((bool)$ipArray['blocked']);
  69.                                 $ipObject->setSystemId($ipArray['id']);
  70.                                 $this->em->persist($ipObject);
  71.                             }
  72.                         }
  73.                     }
  74.                     $this->em->flush();
  75.                 }else{
  76.                     $hetznerApi->deleteServer($serverObject);
  77.                 }
  78.             }else{
  79.                 $hetznerApi->deleteServer($server['id']);
  80.             }
  81.         }
  82.         $this->em->clear();
  83.         return $this->json([
  84.             'res' => true,
  85.         ]);
  86.     }
  87. }