src/Controller/DebugController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\Features;
  4. use Symfony\Bundle\FrameworkBundle\Console\Application;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\Console\Input\ArrayInput;
  7. use Symfony\Component\Console\Output\BufferedOutput;
  8. use Symfony\Component\Console\Output\NullOutput;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  11. use Symfony\Component\HttpKernel\KernelInterface;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class DebugController extends AbstractController
  14. {
  15.     private KernelInterface $kernel;
  16.     private Application $application;
  17.     public function __construct(KernelInterface $kernel)
  18.     {
  19.         $this->kernel $kernel;
  20.         $this->application = new Application($this->kernel);
  21.         $this->application->setAutoExit(false);
  22.     }
  23.     #[Route(path'/debug-features/'name'debug.task.debug_features')]
  24.     public function debugFeatures(Features $features): Response
  25.     {
  26.         $this->assertAvailable();
  27.         $features = [];
  28.         foreach ($_ENV as $k => $v) {
  29.             if(str_starts_with($k'FEATURE'))
  30.                 $features[$k] = $v;
  31.         }
  32.         ksort($features);
  33.         return $this->json($features);
  34.     }
  35.     #[Route(path'/task-charge-placed/'name'debug.task.charge_placements')]
  36.     public function taskChargePlacements(): Response
  37.     {
  38.         return $this->getResponse($this->runCommand('sales:profile-saloon:adboard:charge'));
  39.     }
  40.     #[Route(path'/task-charge-hidden/'name'debug.task.charge_hidings')]
  41.     public function taskChargeHidings(): Response
  42.     {
  43.         return $this->getResponse($this->runCommand('sales:profile:hiding:charge'));
  44.     }
  45.     #[Route(path'/task-profiles-rotate/'name'debug.task.profiles.rotate')]
  46.     public function taskProfilesRotate(): Response
  47.     {
  48.         $output $this->runCommand('sales:profile:adboard:rotate');
  49.         return $this->getResponse($output);
  50.     }
  51.     #[Route(path'/task-saloons-rotate/'name'debug.task.saloons.rotate')]
  52.     public function taskSaloonsRotate(): Response
  53.     {
  54.         $output $this->runCommand('sales:saloon:adboard:rotate');
  55.         return $this->getResponse($output);
  56.     }
  57.     #[Route(path'/task-rotate/'name'debug.task.rotate')]
  58.     public function taskRotate(): Response
  59.     {
  60.         $output $this->runCommand('sales:profile:adboard:rotate');
  61.         $output .= $this->runCommand('sales:saloon:adboard:rotate');
  62.         return $this->getResponse($output);
  63.     }
  64.     #[Route(path'/task-profiles-rotate-free/'name'debug.task.profiles.rotate_free')]
  65.     public function taskProfilesRotateFree(): Response
  66.     {
  67.         return $this->getResponse($this->runCommand('sales:profile:adboard:rotate-free'));
  68.     }
  69.     #[Route(path'/task-profiles-align/'name'debug.task.profiles.align')]
  70.     public function taskProfilesAlign(): Response
  71.     {
  72.         $output $this->runCommand('sales:profile:adboard:align-positions');
  73.         return $this->getResponse($output);
  74.     }
  75.     #[Route(path'/task-profiles-delete-rejected-on-moderation/'name'debug.task.profiles.delete_rejected_on_moderation')]
  76.     public function taskProfilesDeleteRejectedOnModeration(): Response
  77.     {
  78.         return $this->getResponse($this->runCommand('update:profiles:delete-rejected-on-moderation', [], ['interval' => '5 MINUTE']));
  79.     }
  80.     #[Route(path'/task-users-set-trusted/'name'debug.task.users.set_trusted')]
  81.     public function taskUsersSetTrusted(): Response
  82.     {
  83.         return $this->getResponse($this->runCommand('update:users:set-trusted'));
  84.     }
  85.     #[Route(path'/task-users-low-balance-notification/'name'debug.task.users.low_balance_notification')]
  86.     public function taskUsersLowBalanceNotification(): Response
  87.     {
  88.         return $this->getResponse($this->runCommand('sales:user:low-balance:notify'));
  89.     }
  90.     #[Route(path'/task-persist-ctr-values-permanent/'name'debug.task.profile_ctr.persist_permanent')]
  91.     public function taskPersistCtrValuesPermanent(): Response
  92.     {
  93.         return $this->getResponse($this->runCommand('maintenance:profile-ctr:persist-permanent'));
  94.     }
  95.     #[Route(path'/task-clear-ctr-values-cache/'name'debug.task.profile_ctr.clear_cache')]
  96.     public function taskClearCtrValuesCache(): Response
  97.     {
  98.         return $this->getResponse($this->runCommand('maintenance:profile-ctr:clear-cache'));
  99.     }
  100.     #[Route(path'/task-top-100-refresh/'name'debug.task.top_100.refresh')]
  101.     public function taskTop100Refresh(): Response
  102.     {
  103.         return $this->getResponse($this->runCommand('maintenance:top-100:refresh'));
  104.     }
  105.     #[Route(path'/process-bulk-background-actions/'name'debug.task.background.bulk.process_actions')]
  106.     public function taskProcessBulkBackgroundAction(): Response
  107.     {
  108.         set_time_limit(300);
  109.         $this->runCommand('account:bulk-queue:process');
  110.         return $this->getResponse('OK');
  111.     }
  112.     #[Route(path'/process-bulk-background-actions-via-consumer/'name'debug.task.background.bulk.process_actions_via_consumer')]
  113.     public function taskProcessBulkBackgroundActionViaConsumer(): Response
  114.     {
  115.         set_time_limit(600);
  116.         $this->runCommand('messenger:consume');
  117.         return $this->getResponse('OK');
  118.     }
  119.     #[Route(path'/process-video-transcoding/'name'debug.task.background.process_video_transcoding')]
  120.     public function taskProcessVideoTranscoding(): Response
  121.     {
  122.         set_time_limit(600);
  123.         $this->runCommand('messenger:consume', ['receivers' => ['transcoding']], ['limit' => 1]);
  124.         return $this->getResponse('OK');
  125.     }
  126.     #[Route(path'/process-test-data-dummy-profiles-create/'name'debug.task.test-data.dummy-profiles.create')]
  127.     public function taskCreateDummyProfiles(): Response
  128.     {
  129.         set_time_limit(600);
  130.         return $this->getResponse($this->runCommand('test-data:dummy-profiles:create', ['default_user' => true]));
  131.     }
  132.     #[Route(path'/task-hide-free-unapproved-placements/'name'debug.task.hide_free_unapproved_placements')]
  133.     public function taskHideFreeUnapprovedPlacements(): Response
  134.     {
  135.         return $this->getResponse($this->runCommand('update:profiles:hide-free-unapproved-placements'));
  136.     }
  137.     #[Route(path'/genereate-profiles-export/'name'debug.task.export.create')]
  138.     public function taskCreateProfilesExport(): Response
  139.     {
  140.         set_time_limit(600);
  141.         return $this->getResponse($this->runCommand('export:profiles', [], [
  142.             'city' => 'moscow',
  143.             'price_gte' => 15000,
  144.         ]));
  145.     }
  146.     #[Route(path'/task-stations-update/'name'debug.task.stations_update')]
  147.     public function taskStationsUpdate(): Response
  148.     {
  149.         return $this->getResponse($this->runCommand('stations:update'));
  150.     }
  151.     #[Route(path'/task-set-seo-phone-numbers-to-profiles/'name'debug.task.set_seo_phone_numbers_to_profiles')]
  152.     public function taskSetSeoPhoneNumbersToProfiles(): Response
  153.     {
  154.         return $this->getResponse($this->runCommand('maintenance:seo:set-phones-to-profiles'));
  155.     }
  156.     #[Route(path'/task-set-seo-phone-numbers-to-saloons/'name'debug.task.set_seo_phone_numbers_to_saloons')]
  157.     public function taskSetSeoPhoneNumbersToSaloons(): Response
  158.     {
  159.         return $this->getResponse($this->runCommand('maintenance:seo:set-phones-to-saloons'));
  160.     }
  161.     protected function assertAvailable()
  162.     {
  163.         if($this->kernel->getEnvironment() != 'dev'
  164.             && $this->kernel->getEnvironment() != 'review')
  165.             throw new UnauthorizedHttpException('Not available');
  166.     }
  167.     protected function runCommand(string $command, array $arguments = [], array $options = []): string
  168.     {
  169.         $this->assertAvailable();
  170.         $arrayInput = [
  171.             'command' => $command,
  172.         ];
  173.         foreach ($arguments as $k => $v)
  174.             $arrayInput[$k] = $v;
  175.         foreach ($options as $k => $v)
  176.             $arrayInput['--'.$k] = $v;
  177.         $input = new ArrayInput($arrayInput);
  178.         $output = new BufferedOutput();
  179.         $this->application->run($input$output);
  180.         return $output->fetch();
  181.     }
  182.     protected function getResponse(string $output): Response
  183.     {
  184.         return new Response($outputheaders: ['Content-Type' => 'text/plain; charset=utf-8']);
  185.     }
  186. }