setName('generate:crontab') ->setDescription('Stats Crontab File') ->setHelp('El comando genera/actualiza el archivo crontab para realizar consultas a dispositivos') ->setDefinition(array( new InputOption('file-crontab', false, InputOption::VALUE_OPTIONAL, "File Crontab","/etc/cron.d/fd3_stats"), new InputOption('path-app', false, InputOption::VALUE_OPTIONAL, "Path App") )) ; } /** * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { $now = date("d-m-Y H:i:s"); $content = PHP_EOL . "# NO EDITAR este archivo, se autogenera con el comando stats:crontab:remote. Generado {$now}." . PHP_EOL; $fileCrontab = $input->getOption('file-crontab'); $pathApp = $input->getOption('path-app'); $file = $this->getContainer()->get('kernel')->getRootDir()."/Resources/stats_crontab"; $handle = fopen($file, "w"); $times = array(); $now = date("d-m-Y H:i:s"); fwrite($handle, PHP_EOL."# NO EDITAR este archivo, se autogenera con el comando generate:crontab. Generado {$now}.".PHP_EOL); $doctrine = $this->getContainer()->get('doctrine.orm.entity_manager'); if(is_null($pathApp)) { $pathApp = $this->getContainer()->getParameter('app_path'); } $pathConsole = "root $(which php) {$pathApp}/bin/console"; $serverDevices = $doctrine->getRepository('\StatsBundle\Entity\DeviceServer')->findAll(); $oltMarks = array('FiberHome','FiberLink','Huawei','ZTE','Calix'); $oltLibraries = array('OIDSFiberHomeV1','OIDSHuaweiV1','OIDSFiberLinkV1','OIDSZTEV1','OIDSCalixV1'); fwrite($handle, "*/5 * * * * {$pathConsole} generate:crontab".PHP_EOL); fwrite($handle, "*/30 * * * * {$pathConsole} stats:devices".PHP_EOL); foreach($serverDevices as $server) { fwrite($handle, PHP_EOL.PHP_EOL."# SERVER {$server->getName()} / {$server->getUrl()}".PHP_EOL); // APARTADO OLT $oltDevices = $doctrine->getRepository('\StatsBundle\Entity\Device')->findBy(array('deviceType' => 'FTTHBundle\Entity\OLT','deviceServer' => $server)); $serverId = $server->getId(); $saveHistoric = $server->getSaveHistoric(); ($saveHistoric)? $saveHistoric = 1 : $saveHistoric = 0; foreach($oltDevices as $device) { $commands = array(); $data = $device->jsonExtraData(); if($data['executeSnmp'] == 0) continue; if(!in_array($data['mark'],$oltMarks)) continue; if(!in_array($data['library'],$oltLibraries)) continue; $oltName = $data['name']; $mark = strtolower($data['mark']); $library = $data['library']; $snmpCommunity = $data['snmpCommunity']; $deviceIp = $device->getIp(); $deviceId = $device->getDeviceId(); $timeScan = $data['timeScan']; $timeOltScan = $data['timeOltScan']; $params = "--olt-ip={$deviceIp} --olt-community={$snmpCommunity} --olt-snmp-library={$library} --olt-device-id={$deviceId} --olt-server-id={$serverId} --save-historic={$saveHistoric}"; $commands[] = "*/{$timeScan} * * * * {$pathConsole} {$mark}:onu:scan {$params}"; $commands[] = "*/{$timeOltScan} * * * * {$pathConsole} {$mark}:olt:scan {$params}"; fwrite($handle, PHP_EOL."# OLT {$oltName} ({$deviceIp})".PHP_EOL); fwrite($handle, implode(PHP_EOL,$commands).PHP_EOL.PHP_EOL); } // APARTADO NAS $nasDevices = $doctrine->getRepository('\StatsBundle\Entity\Device')->findBy(array('deviceType' => 'RadiusBundle\Entity\NAS', 'deviceServer' => $server)); foreach ($nasDevices as $device) { $commands = array(); $data = $device->jsonExtraData(); $deviceId = $device->getDeviceId(); if($data['executeSnmp'] == 0) continue; if (is_null($data['snmpCommunity']) || empty($data['snmpCommunity'])){ continue; } if (!in_array($data['library'], array('OIDSBase'))){ continue; } if (!$saveHistoric){ continue; } $library = $data['library']; $snmpCommunity = $data['snmpCommunity']; $description = $data['description']; $deviceIp = $device->getIp(); $params = "--nas-ip={$deviceIp} --nas-community={$snmpCommunity} --nas-snmp-library={$library} --nas-device-id={$deviceId} --nas-server-id={$serverId} --save-historic=1"; $commands[] = "*/10 * * * * {$pathConsole} nas:onu:octets {$params}"; fwrite($handle, PHP_EOL.PHP_EOL."# NAS {$description} ({$deviceIp})".PHP_EOL); fwrite($handle, PHP_EOL); fwrite($handle, implode(PHP_EOL,$commands).PHP_EOL.PHP_EOL); } } fwrite($handle, PHP_EOL . PHP_EOL); fclose($handle); @unlink($fileCrontab); if(symlink ($file , $fileCrontab)) print_r("Creado link al crontab".PHP_EOL); print_r(@shell_exec("/etc/init.d/cron reload")); } }