src/Controller/DefaultController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Document\Share;
  4. use App\Entity\Facture\Facturation;
  5. use App\Entity\Facture\FacturationItem;
  6. use App\Entity\Favorites\Category;
  7. use App\Entity\Favorites\Item;
  8. use App\Entity\Keyi;
  9. use App\Entity\Pdfdoc;
  10. use App\Entity\Postit;
  11. use App\Entity\Project\ClientUploadFile;
  12. use App\Entity\Statvps;
  13. use App\Entity\TMA\SiteToPing;
  14. use App\Entity\TMA\VPSdisk;
  15. use App\Entity\TodoTicket;
  16. use App\Form\TodoQuickTicketType;
  17. use App\Helper\Tools;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. use App\Entity\Facture\Facture;
  24. use App\Entity\Document\File;
  25. class DefaultController extends AbstractController
  26. {
  27.     /**
  28.      * @Route("/", name="homepage")
  29.      */
  30.     public function index(Request $request)
  31.     {
  32.         $em $this->getDoctrine()->getManager();
  33.         // quick todo
  34.         $todo = new TodoTicket();
  35.         $todo->setPriority(1);
  36.         $form $this->createForm(TodoQuickTicketType::class, $todo);
  37.         $form->handleRequest($request);
  38.         $allTodos $em->getRepository(TodoTicket::class)->findMyTodo($this->getUser()->getId());
  39.         if ($form->isSubmitted() && $form->isValid()) {
  40.             $newOrder = (int) count($allTodos) + 1;
  41.             $todo->setCreationDate(new \DateTime());
  42.             $todo->setUpdateDate(new \DateTime());
  43.             $todo->setUniqid(Tools::generateStrongPassword(30false'ld'));
  44.             $todo->setTorder($newOrder);
  45.             $todo->setTcolumn(1);
  46.             $todo->setSharecreated(0);
  47.             $todo->setUser($this->getUser());
  48.             $em->persist($todo);
  49.             $em->flush();
  50.             return $this->redirectToRoute('all_todo');
  51.         }
  52.         $factures $em->getRepository(Facture::class)->findAll();
  53.         $ftab = array();
  54.         $y date('Y')-2;
  55.         while ($y <= date('Y')) {
  56.             $m 1;
  57.             while ($m <= 12) {
  58.                 if($y == date('Y') && $m date('m')) {
  59.                     break;
  60.                 }
  61.                 if($m 10) {
  62.                     $mm '0'.$m;
  63.                 } else {
  64.                     $mm $m;
  65.                 }
  66.                 $ftab[$y.'-'.$mm] = array(
  67.                     'month' => $y.'-'.$mm,
  68.                     'total' => 0,
  69.                     'Kelkiicom' => 0,
  70.                     'Printfeu' => 0,
  71.                     'GeekEtBiocom' => 0,
  72.                     'NerdPixcom' => 0
  73.                 );
  74.                 $m++;
  75.             }
  76.             $y++;
  77.         }
  78.         $now = new \DateTime();
  79.         $tab = [];
  80.         $ytab = [];
  81.         $i6total 0;
  82.         $real6total 0;
  83.         $randmmonth rand(4,12);
  84.         $randmmonth 12;
  85.         $unpayed false;
  86.         /** @var Facture $facture */
  87.         foreach ($factures as $facture) {
  88.             // check for unpayed
  89.             if($facture->getStatus() == Facture::FACTURE_SENDED) {
  90.                 $interval date_diff($facture->getCreated(), new \DateTime());
  91.                 $intervalint $interval->format('%a');
  92.                 if($intervalint 40) {
  93.                     $unpayed[] = ['days' => $intervalint'facture' => $facture];
  94.                 }
  95.             }
  96.             $month $facture->getCreated()->format('Y-m');
  97.             if(isset($ftab[$month]) && ($facture->getStatus() == Facture::FACTURE_PAYED || $facture->getStatus() == Facture::FACTURE_SENDED)) {
  98.                 $companys = ['Kelkii.com''Printf.eu''GeekEtBio.com''NerdPix.com'];
  99.                 foreach ($companys as $company) {
  100.                     if ($facture->getCompany() == $company) {
  101.                         $sub $ftab[$month][str_replace('.'''$company)] + $facture->getPrice();
  102.                         $ftab[$month][str_replace('.'''$company)] = $sub;
  103.                     }
  104.                 }
  105.                 $total $ftab[$month]['total'] + $facture->getPrice();
  106.                 $ftab[$month]['total'] = $total;
  107.             }
  108.             if($facture->getFactureLink() && ($facture->getStatus() == Facture::FACTURE_PAYED || $facture->getStatus() == Facture::FACTURE_SENDED)) {
  109.                 $year date_format($facture->getCreated(), 'Y');
  110.                 $trimestre ceil(date_format($facture->getCreated(), 'n') / 3);
  111.                 if($facture->getFacturedOnFlo()) {
  112.                     if(isset($tab[$year.$trimestre]['f'])) {
  113.                         $tab[$year.$trimestre]['f'] = $tab[$year.$trimestre]['f'] + $facture->getPrice();
  114.                     } else {
  115.                         $tab[$year.$trimestre]['f'] = $facture->getPrice();
  116.                         $tab[$year.$trimestre]['year'] = $year;
  117.                         $tab[$year.$trimestre]['trimestre'] = $trimestre;
  118.                     }
  119.                 } else {
  120.                     if(isset($tab[$year.$trimestre]['v'])) {
  121.                         $tab[$year.$trimestre]['v'] = $tab[$year.$trimestre]['v'] + $facture->getPrice();
  122.                     } else {
  123.                         $tab[$year.$trimestre]['v'] = $facture->getPrice();
  124.                         $tab[$year.$trimestre]['year'] = $year;
  125.                         $tab[$year.$trimestre]['trimestre'] = $trimestre;
  126.                     }
  127.                 }
  128.                 if(isset($ytab[$year]['ca'])) {
  129.                     $ytab[$year]['ca'] = $ytab[$year]['ca'] + $facture->getPrice();
  130.                 } else {
  131.                     $ytab[$year]['ca'] = $facture->getPrice();
  132.                     $ytab[$year]['year'] = $year;
  133.                 }
  134.             }
  135.             // 6 total
  136.             if(($facture->getStatus() == Facture::FACTURE_PAYED || $facture->getStatus() == Facture::FACTURE_SENDED)) {
  137.                 $diff $facture->getCreated()->diff($now);
  138.                 if ($diff->=== && $diff->$randmmonth){
  139.                     $real6total $real6total $facture->getPrice();
  140.                     if($facture->getFactureLink()) {
  141.                         $i6total $i6total $facture->getPrice();
  142.                     }
  143.                 }
  144.             }
  145.         }
  146.         $files $em->getRepository(File::class)->findAll();
  147.         $filecount 0;
  148.         $size 0;
  149.         /** @var File $file */
  150.         foreach ($files as $file) {
  151.             $size += $file->getSize();
  152.             ++$filecount;
  153.         }
  154.         // get current stats
  155.         $now = new \DateTime("now");
  156.         $pings Tools::getFileContent('https://stats.kelkii.com/kelapi/v1/stats/ESDHSTUSFqsdqzQGTQGHSqDQsfQSDFQZEfqSGQgghQTQRGgQRGQRFDQHSRG'true);
  157.         $domains Tools::getFileContent('https://stats.kelkii.com/kelapi/v1/domains/ESDHSTUSFqsdqzQGTQGHSqDQsfQSDFQZEfqSGQgghQTQRGgQRGQRFDQHSRG'true);
  158.         $daysData = [];
  159.         $cities = [];
  160.         $weekData Tools::getFileContent('https://stats.kelkii.com/kelapi/v1/stats/week/stats/42ESDHSTUSdfghdfdfEfqSGQgghQTQRGgQRGQRFDQHSRG'true);
  161.         if($weekData) {
  162.             $weekData json_decode($weekDatatrue);
  163.             foreach ($weekData as $dateYmd => $dayDateData) {
  164.                 $daysData[$dateYmd]['day'] = date("d/m/Y"strtotime($dateYmd));
  165.                 if(isset($dayDateData['app.kelkii.com'])) {
  166.                     $appToday $dayDateData['app.kelkii.com'];
  167.                     foreach ($appToday as $ip => $dataApp) {
  168.                         $trackIp $dataApp['trackIp'];
  169.                         if(!$trackIp) {
  170.                             $query json_decode(file_get_contents('https://stats.kelkii.com/kelapi/v1/get-ip-infos/'.$ip.'/42ESDHSzea742QGHSqDQsfQSDFQZEfqSGQgghQTQRGgQRGQRFDQHSRG'), true);
  171.                             if(isset($query['city'])) {
  172.                                 $trackIp $query['city'].' - '$query['regionName'].' - '$query['isp'] . ' - calc';
  173.                             } else {
  174.                                 $trackIp 'No traking data';
  175.                             }
  176.                         }
  177.                         $daysData[$dateYmd]['data'][$ip] = [
  178.                             'count' => $dataApp['count'],
  179.                             'access' => $dataApp['access'],
  180.                             'location' => $trackIp
  181.                         ];
  182.                         if((bool) $dataApp['access']) {
  183.                             if(strlen($dataApp['trackIp']) > 5) {
  184.                                 $city explode(' - '$dataApp['trackIp']);
  185.                                 if(is_array($city)) {
  186.                                     if(isset($city[0])) {
  187.                                         $cityName strtolower($city[0]);
  188.                                         $cities[$cityName] = ucfirst($cityName);
  189.                                     }
  190.                                 }
  191.                             }
  192.                         }
  193.                     }
  194.                 } else {
  195.                     $daysData[$dateYmd]['data'] = false;
  196.                     $cities['error'] = 'Error VPS Stats !';
  197.                 }
  198.             }
  199.         }
  200.         $vps = ['vps1''vps2'];
  201.         $vpsValues = [];
  202.         foreach ($vps as $item) {
  203.             $file __DIR__ .'/../../../vps_stats_depot/' $item '.txt';
  204.             $value substr(file_get_contents($file), -6);
  205.             $value filter_var($value,FILTER_SANITIZE_NUMBER_INT);
  206.             $timevalue = new \DateTime(date("Y/m/d H:i"filemtime($file)));
  207.             $vpsValues[$item] = $value;
  208.             $vpsValues[$item.'time'] = $timevalue;
  209.             $vpsValues[$item.'ping'] = $now->diff($timevalue)->h;
  210.         }
  211.         $dockervps = ['dockervps1''dockervps2'];
  212.         $dockervpsValues = [];
  213.         foreach ($dockervps as $item) {
  214.             $file __DIR__ .'/../../../vps_stats_depot/' $item '.txt';
  215.             $timevalue = new \DateTime(date("Y/m/d H:i"filemtime($file)));
  216.             $dockervpsValues[$item] = file_get_contents($file);
  217.             $dockervpsValues[$item.'time'] = $timevalue;
  218.             $dockervpsValues[$item.'ping'] = $now->diff($timevalue)->h;
  219.         }
  220.         // dump
  221.         $yesterday $now->modify('-1 day')->format('Ymd');
  222.         $countDump 0;
  223.         $yesterdayDump false;
  224.         $yesterdayDumpSize 0;
  225.         foreach (scandir(__DIR__.'/../../dumps/') as $fileDump) {
  226.             if (strpos($fileDump".zip") !== false) {
  227.                 ++$countDump;
  228.                 if (!$yesterdayDump && strpos($fileDump$yesterday) !== false) {
  229.                     $yesterdayDump true;
  230.                     $yesterdayDumpSize filesize(__DIR__.'/../../dumps/'.$fileDump);
  231.                 }
  232.             }
  233.         }
  234.         // backup
  235. //        $zipBackupError = false;
  236. //        $zipBackupFile = realpath(__DIR__.'/../../').'/backup.zip';
  237. //        $zipBackupTime = new \DateTime(date("Y/m/d H:i", @filemtime($zipBackupFile)));
  238. //
  239. //        if($now->diff($zipBackupTime)->d > 1) {
  240. //            $zipBackupError = true;
  241. //        }
  242.         // dump mysql sur vps2
  243.         $dir __DIR__ .'/../../../vps_stats_depot/';
  244.         $dumps preg_grep('~^dump-bdds-vps2-.*\.sql.gz$~'scandir($dir));
  245.         $dumpsinfo = [];
  246.         foreach ($dumps as $dump) {
  247.             $key = new \DateTime(date("Y/m/d H:i"filemtime($dir.$dump)));
  248.             $dumpsinfo[$key->format('YmdHi')] = filesize($dir.$dump);
  249.         }
  250.         krsort($dumpsinfo);
  251.         $currentdumpsize array_shift($dumpsinfo);
  252.         $previousdumpsize array_shift($dumpsinfo);
  253.         $bddprogress 'eq';
  254.         if($currentdumpsize $previousdumpsize) {
  255.             $bddprogress 'more';
  256.         } elseif ($currentdumpsize $previousdumpsize) {
  257.             $bddprogress 'less';
  258.         }
  259.         // mysql uptime
  260.         $file __DIR__ .'/../../../vps_stats_depot/mysqlstatus.txt';
  261.         $uptimeMysql 0;
  262.         $uptimeinfo explode(' 'file_get_contents($file));
  263.         if(isset($uptimeinfo[1])) {
  264.             $uptimeMysql = (int) $uptimeinfo[1];
  265.         }
  266.         $timestampmysqluptime = new \DateTime(date("Y/m/d H:i"filemtime($file)));
  267.         $vpsinfos json_decode(Tools::getFileContent('https://stats.kelkii.com/vps/vpsinfo/42ESDHSTUSFqsdqzQGTQGHSqDQsfQSDFQZEfqSGQggTQRGgQRGQRFDQHSRG'true600), true);
  268.         $vpsinfosdata = [];
  269.         if (!empty($vpsinfos)) {
  270.             foreach ($vpsinfos as $vpsinfo) {
  271.                 if (isset($vpsinfo['vpsId']) && isset($vpsinfo['mem_usage'])) {
  272.                     $vpsinfosdata[$vpsinfo['vpsId']] = $vpsinfo['mem_usage'];
  273.                 }
  274.             }
  275.         }
  276.         return $this->render('default/index.html.twig', [
  277.             'pings' => json_decode($pingstrue),
  278.             'domains' => json_decode($domainstrue),
  279.             'daysData' => $daysData,
  280.             'myip' => $_SERVER['REMOTE_ADDR'],
  281.             'favorites' => $em->getRepository(Item::class)->findBy(['highlighted' => 1]),
  282.             'vpsValues' => $vpsValues,
  283.             'vpsinfos' => $vpsinfosdata,
  284.             'dockervpsValues' => $dockervpsValues,
  285. //            'vpsStats' => $vpsStats,
  286.             'unpayed' => $unpayed,
  287.             'bddprogress' => $bddprogress,
  288.             'timestampmysqluptime' => $timestampmysqluptime,
  289.             'uptimeMysql' => $uptimeMysql,
  290.             'cities' => $cities,
  291.             'size' => $size,
  292.             'count' => $filecount,
  293.             'countshare' => count($em->getRepository(Share::class)->findAll()),
  294.             'ftab' => array_reverse($ftab),
  295.             'factures' => $factures,
  296.             'trimestres' => array_reverse($tab),
  297.             'real6total' => $real6total/$randmmonth,
  298.             'i6total' => $i6total/$randmmonth,
  299.             'randmmonth' => $randmmonth,
  300.             'yesterdayDump' => $yesterdayDump,
  301.             'yesterdayDumpSize' => $yesterdayDumpSize,
  302.             'countDump' => $countDump,
  303. //            'zipBackupSize' => @filesize($zipBackupFile),
  304. //            'zipBackupError' => $zipBackupError,
  305.             'ca' => array_reverse($ytab),
  306.             'form' => $form->createView(),
  307.             'pageParams' => [
  308.                 'title' => 'Home',
  309.                 'size' => 5,
  310.                 'breadcrumbs' => []
  311.             ],
  312.         ]);
  313.     }
  314.     /**
  315.      * @Route("/demo")
  316.      */
  317.     public function demo()
  318.     {
  319.         $data 'ok';
  320.         return $this->render('default/demo.html.twig', [
  321.             'data' => $data,
  322.         ]);
  323.     }
  324.     public function notifications() {
  325.         return $this->render('notifications.html.twig');
  326.     }
  327.     public function catchinfos () {
  328.         return $this->render('default/error.html.twig');
  329.     }
  330.     public function bookmarks() {
  331.         $em $this->getDoctrine()->getManager();
  332.         $topBookmarksCategories $em->getRepository(Category::class)->findBy(['parent' => null'user' => $this->getUser()], ['title' => 'ASC']);
  333.         return $this->render('default/bookmarks.html.twig', [
  334.             'topBookmarksCategories' => $topBookmarksCategories
  335.         ]);
  336.     }
  337.     /**
  338.      * @Route("/search", name="search_page", methods={"POST"})
  339.      */
  340.     public function search(Request $request)
  341.     {
  342.         $em $this->getDoctrine()->getManager();
  343.         $search $request->request->get('search');
  344.         $postits $em->getRepository(Postit::class)->searchPostit($search$this->getUser()->getId());
  345.         $documents $em->getRepository(File::class)->searchFile($search);
  346.         $favoris $em->getRepository(Item::class)->searchItem($search);
  347.         $todos $em->getRepository(TodoTicket::class)->searchMyTodo($this->getUser()->getId(), $search);
  348.         $keyi $em->getRepository(Keyi::class)->findBy(['user' => $this->getUser()]);
  349.         $facturations $em->getRepository(Facturation::class)->findAll();
  350.         $documentsclient $em->getRepository(ClientUploadFile::class)->searchFile($search);
  351.         $pdfdocs $em->getRepository(Pdfdoc::class)->searchFile($search);
  352.         $resultKeys = [];
  353.         /**
  354.          * @var Keyi $onekey
  355.          */
  356.         foreach ($keyi as $onekey) {
  357.             if (strpos(strtolower($onekey->getEPData()), strtolower($search)) !== false) {
  358.                 $resultKeys[] = $onekey;
  359.             } elseif (strpos(strtolower($onekey->getName()), strtolower($search)) !== false) {
  360.                 $resultKeys[] = $onekey;
  361.             }
  362.         }
  363.         $resultsFacturation = [];
  364.         /**
  365.          * @var Facturation $facturation
  366.          */
  367.         foreach ($facturations as $facturation) {
  368.             $allItems '';
  369.             /**
  370.              * @var FacturationItem $item
  371.              */
  372.             foreach ($facturation->getItems() as $item) {
  373.                 $allItems .= $item->getDescription();
  374.             }
  375.             if (strpos(strtolower($facturation->getRealid()), strtolower($search)) !== false) {
  376.                 $resultsFacturation[] = $facturation;
  377.             } elseif (strpos(strtolower($facturation->getRealfactureid()), strtolower($search)) !== false) {
  378.                 $resultsFacturation[] = $facturation;
  379.             } elseif (strpos(strtolower($facturation->getName()), strtolower($search)) !== false) {
  380.                 $resultsFacturation[] = $facturation;
  381.             } elseif (strpos(strtolower($facturation->getHypotheses()), strtolower($search)) !== false) {
  382.                 $resultsFacturation[] = $facturation;
  383.             } elseif (strpos(strtolower($allItems), strtolower($search)) !== false) {
  384.                 $resultsFacturation[] = $facturation;
  385.             }
  386.         }
  387.         return $this->render('default/search.html.twig', array(
  388.             'postits' => $postits,
  389.             'documents' => $documents,
  390.             'documentsclient' => $documentsclient,
  391.             'pdfdocs' => $pdfdocs,
  392.             'todos' => $todos,
  393.             'favoris' => $favoris,
  394.             'facturations' => $resultsFacturation,
  395.             'resultKeys' => $resultKeys,
  396.             'pageParams' => [
  397.                 'title' => $search,
  398.                 'domain' => 'search',
  399.                 'breadcrumbs' => []
  400.             ],
  401.         ));
  402.     }
  403.     /**
  404.      * @Route("/ajax/vps_docker_popin/{vpsid}", name="vps_docker_popin")
  405.      */
  406.     public function vpsDockerPopin($vpsidEntityManagerInterface $entityManager)
  407.     {
  408.         $item 'dockervps'.$vpsid;
  409.         $dockervpsValues = [];
  410.         $dir __DIR__ .'/../../../vps_stats_depot/';
  411.         $file $dir $item '.txt';
  412.         $timevalue = new \DateTime(date("Y/m/d H:i"filemtime($file)));
  413.         // parse containers
  414.         $containers = [];
  415.         foreach (file($file) as $line) {
  416.             $linedata explode('_'$line);
  417.             $containers[$linedata[0]][] = str_replace($linedata[0].'_'''$line);
  418.         }
  419.         $dockervpsValues['containers'] = $containers;
  420.         $dockervpsValues['containerstime'] = $timevalue;
  421.         $backups preg_grep('~^backup-vps'.$vpsid.'-.*\.zip$~'scandir($dir));
  422.         $backupsinfo = [];
  423.         foreach ($backups as $backup) {
  424.             $key = new \DateTime(date("Y/m/d H:i"filemtime($dir.$backup)));
  425.             $backupsinfo[$key->format('YmdHi')] = [
  426.                 'name' => $backup,
  427.                 'time' => new \DateTime(date("Y/m/d H:i"filemtime($dir.$backup))),
  428.                 'size' => filesize($dir.$backup)
  429.             ];
  430.         }
  431.         krsort($backupsinfo);
  432.         $sizeinfo = [];
  433.         foreach (file($dir.'dockersizevps'.$vpsid.'.txt') as $line) {
  434.             $data explode('/'$line);
  435.             $sizeinfo[str_replace(array("\r\n""\r""\n""\t"," "), ''end($data))] = str_replace(array("\r\n""\r""\n""\t"," "), ''$data[0]);
  436.         }
  437.         $sizeinfoold = [];
  438.         foreach (file($dir.'dockersizevps'.$vpsid.'-old.txt') as $line) {
  439.             $data explode('/'$line);
  440.             $sizeinfoold[str_replace(array("\r\n""\r""\n""\t"," "), ''end($data))] = str_replace(array("\r\n""\r""\n""\t"," "), ''$data[0]);
  441.         }
  442.         $sizeinfooldold = [];
  443.         foreach (file($dir.'dockersizevps'.$vpsid.'-oldold.txt') as $line) {
  444.             $data explode('/'$line);
  445.             $sizeinfooldold[str_replace(array("\r\n""\r""\n""\t"," "), ''end($data))] = str_replace(array("\r\n""\r""\n""\t"," "), ''$data[0]);
  446.         }
  447.         $sizehisto = [];
  448.         foreach ($entityManager->getRepository(VPSdisk::class)->findBy(['vps' => $vpsid]) as $onehisto) {
  449.             $sizehisto[] = [
  450.                 'logDate' => $onehisto->getLogDate()->format('Y-m-d'),
  451.                 'percent' => $onehisto->getPercent(),
  452.             ];
  453.         }
  454.         $vpsinfo json_decode(file_get_contents('https://stats.kelkii.com/vps/get/42ESDHSTUSFqsdqzQGTQGHSqDQsfQSDFQZEfqSGQggTQRGgQRGQRFDQHSRG/'.$vpsid));
  455.         $vpsdockerinfo json_decode(file_get_contents('https://stats.kelkii.com/vpsdocker/get/42ESDHSTUSFqsdqzQGTQGHSqDQsfQSDFQZEfqSGQggTQRGgQRGQRFDQHSRG/'.$vpsid));
  456.         return $this->render('default/vpspopin.html.twig', array(
  457.             'vpsid' => $vpsid,
  458.             'sizehisto' => $sizehisto,
  459.             'backups' => $backupsinfo,
  460.             'sizeinfo' => $sizeinfo,
  461.             'vpsinfo' => $vpsinfo,
  462.             'vpsdockerinfo' => $vpsdockerinfo,
  463.             'vpsinfolastping' => end($vpsinfo),
  464.             'sizeinfoold' => $sizeinfoold,
  465.             'sizeinfooldold' => $sizeinfooldold,
  466.             'dockervpsValues' => $dockervpsValues,
  467.         ));
  468.     }
  469.     /**
  470.      * @Route("/ajax/bdd_docker_popin/{vpsid}", name="bdd_docker_popin")
  471.      */
  472.     public function bddDockerPopin($vpsid)
  473.     {
  474.         $dir __DIR__ .'/../../../vps_stats_depot/';
  475.         // dump de la bdd mysql sur vps2
  476.         $dumps preg_grep('~^dump-bdds-vps'.$vpsid.'-.*\.sql.gz$~'scandir($dir));
  477.         $dumpsinfo = [];
  478.         foreach ($dumps as $dump) {
  479.             $key = new \DateTime(date("Y/m/d H:i"filemtime($dir.$dump)));
  480.             $dumpsinfo[$key->format('YmdHi')] = [
  481.                 'name' => $dump,
  482.                 'time' => new \DateTime(date("Y/m/d H:i"filemtime($dir.$dump))),
  483.                 'size' => filesize($dir.$dump)
  484.             ];
  485.         }
  486.         krsort($dumpsinfo);
  487.         // bdd mysql size
  488.         $mysqlsize false;
  489.         $allbdds false;
  490.         $bddsizefile $dir.'vps'.$vpsid.'bddsize.txt';
  491.         if(file_exists($bddsizefile)) {
  492.             foreach (file($bddsizefile) as $line) {
  493.                 $linedata explode("\t"$line);
  494.                 $onesize $linedata[0];
  495.                 $bdd trim(preg_replace('/\s\s+/'' '$linedata[1]));
  496.                 if($bdd == "/var/lib/mysql") {
  497.                     $mysqlsize = (int) $onesize 1024;
  498.                 } elseif($bdd != '/var/lib/mysql/sys' && $bdd != '/var/lib/mysql/performance_schema' && $bdd != '/var/lib/mysql/mysql' && $bdd != '/var/lib/mysql/phpmyadmin') {
  499.                     $allbdds[str_replace('/var/lib/mysql/'''$bdd)] = (int) $onesize 1024;
  500.                 }
  501.             }
  502.         }
  503.         $timestamp = new \DateTime(date("Y/m/d H:i"filemtime($bddsizefile)));
  504.         // mysql uptime
  505.         $file __DIR__ .'/../../../vps_stats_depot/mysqlstatus.txt';
  506.         $uptimeMysql false;
  507.         $uptimeinfo explode(' 'file_get_contents($file));
  508.         if(isset($uptimeinfo[1])) {
  509.             $uptimeMysql Tools::secondsToTime($uptimeinfo[1]);
  510.         }
  511.         $timestampmysqluptime = new \DateTime(date("Y/m/d H:i"filemtime($file)));
  512.         $vpsqueriesinfo json_decode(file_get_contents('https://stats.kelkii.com/vpsqueries/getqueries/42ESDHSTUSFqsdqzQGTQGHSqDQsfQSDFQZEfqSGQggTQRGgQRGQRFDQHSRG'));
  513.         return $this->render('default/bddpopin.html.twig', array(
  514.             'vpsid' => $vpsid,
  515.             'allbdds' => $allbdds,
  516.             'bddsizefile' => $mysqlsize,
  517.             'dumps' => $dumpsinfo,
  518.             'timestamp' => $timestamp,
  519.             'uptimeMysql' => $uptimeMysql,
  520.             'timestampmysqluptime' => $timestampmysqluptime,
  521.             'vpsqueriesinfo' => $vpsqueriesinfo,
  522.         ));
  523.     }
  524.     /**
  525.      * @Route("/dumpmysql/onserver/dl/{file}", name="dl_dump_mysql")
  526.      */
  527.     public function dlDumpMysql(Request $request$file)
  528.     {
  529.         set_time_limit(300);
  530.         $file urldecode($file);
  531.         $chunksize * (1024 1024); //5 MB (= 5 242 880 bytes) per one chunk of file.
  532.         $filename __DIR__ .'/../../../vps_stats_depot/'.$file;
  533.         $size intval(sprintf("%u"filesize($filename)));
  534.         header('Content-Type: application/octet-stream');
  535.         header('Content-Transfer-Encoding: binary');
  536.         header('Content-Length: '.$size);
  537.         header('Content-Disposition: attachment;filename="'.basename($filename).'"');
  538.         if($size $chunksize)
  539.         {
  540.             $handle fopen($filename'rb');
  541.             while (!feof($handle))
  542.             {
  543.                 print(@fread($handle$chunksize));
  544.                 ob_flush();
  545.                 flush();
  546.             }
  547.             fclose($handle);
  548.         }
  549.         else readfile($filename);
  550.         exit;
  551.     }
  552. }