|
@@ -10,94 +10,97 @@ use Symfony\Component\Console\Output\OutputInterface;
|
|
|
class GenerateRemoteCrontabCommand extends ContainerAwareCommand
|
|
|
{
|
|
|
|
|
|
- protected function configure()
|
|
|
- {
|
|
|
- $this
|
|
|
- ->setName('stats:crontab:remote')
|
|
|
- ->setDescription('Generate Remote Stats Crontab File')
|
|
|
- ->setHelp('El comando genera/actualiza el archivo crontab de manera remota 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", "/opt/stats"),
|
|
|
- new InputOption('url', false, InputOption::VALUE_OPTIONAL, "Crontab webservice url"),
|
|
|
- new InputOption('amqp', false, InputOption::VALUE_OPTIONAL, "Execute the commands via amqp", true),
|
|
|
- new InputOption('routing_key', false, InputOption::VALUE_OPTIONAL, "AMQP Routing key"),
|
|
|
- ))
|
|
|
- ;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param InputInterface $input
|
|
|
- * @param OutputInterface $output
|
|
|
- */
|
|
|
- protected function execute(InputInterface $input, OutputInterface $output)
|
|
|
- {
|
|
|
- $this->output = $output;
|
|
|
- $fileCrontab = $input->getOption('file-crontab');
|
|
|
- $pathApp = $input->getOption('path-app');
|
|
|
- $url = $input->getOption('url');
|
|
|
- if (is_null($url)) {
|
|
|
- if ($this->getContainer()->hasParameter('url_crontab')) {
|
|
|
- $url = $this->getContainer()->getParameter('url_crontab');
|
|
|
- } else {
|
|
|
- $output->writeln('<error>ERROR:</error> Debe definir una url para generar el crontab.');
|
|
|
- $output->writeln($this->getSynopsis());
|
|
|
-
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- $times = array();
|
|
|
- $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;
|
|
|
-
|
|
|
- $doctrine = $this->getContainer()->get('doctrine.orm.entity_manager');
|
|
|
-
|
|
|
- if(is_null($pathApp)) {
|
|
|
- $pathApp = $this->getContainer()->getParameter('app_path');
|
|
|
- }
|
|
|
- $pathConsole = "root $(wich php) {$pathApp}/bin/console";
|
|
|
-
|
|
|
- $serverDevices = $doctrine->getRepository('\StatsBundle\Entity\DeviceServer')->findAll();
|
|
|
-
|
|
|
- $oltMarks = array('FiberHome','FiberLink','Huawei');
|
|
|
- $oltLibraries = array('OIDSFiberHomeV1','OIDSHuaweiV1');
|
|
|
-
|
|
|
- $amqp = $input->getOption('amqp');
|
|
|
- $amqpRemote = '';
|
|
|
- $routing_key = '';
|
|
|
- if ($amqp) {
|
|
|
- $amqpRemote = 'amqp:remote';
|
|
|
-
|
|
|
- // Verifico la routing key si se pasa como parametro o variable de entorno
|
|
|
- // default routing_key = stats
|
|
|
- $routing_key = $input->getOption('routing_key');
|
|
|
- if (!$routing_key) {
|
|
|
- $routing_key = getenv('AMQP_KEY') !== false ? getenv('AMQP_KEY') : 'stats';
|
|
|
- }
|
|
|
- $routing_key = "--route={$routing_key}";
|
|
|
- }
|
|
|
-
|
|
|
- $content .= "*/5 * * * * {$pathConsole} {$amqpRemote} {$routing_key} generate:crontab".PHP_EOL;
|
|
|
-
|
|
|
- foreach($serverDevices as $server) {
|
|
|
-
|
|
|
- $content .= 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();
|
|
|
-
|
|
|
- foreach($oltDevices as $device) {
|
|
|
+ protected function configure()
|
|
|
+ {
|
|
|
+ $this
|
|
|
+ ->setName('stats:crontab:remote')
|
|
|
+ ->setDescription('Generate Remote Stats Crontab File')
|
|
|
+ ->setHelp('El comando genera/actualiza el archivo crontab de manera remota 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", "/opt/stats"),
|
|
|
+ new InputOption('url', false, InputOption::VALUE_OPTIONAL, "Crontab webservice url"),
|
|
|
+ new InputOption('amqp', false, InputOption::VALUE_OPTIONAL, "Execute the commands via amqp", true),
|
|
|
+ new InputOption('routing_key', false, InputOption::VALUE_OPTIONAL, "AMQP Routing key"),
|
|
|
+ ))
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param InputInterface $input
|
|
|
+ * @param OutputInterface $output
|
|
|
+ */
|
|
|
+ protected function execute(InputInterface $input, OutputInterface $output)
|
|
|
+ {
|
|
|
+ $this->output = $output;
|
|
|
+ $fileCrontab = $input->getOption('file-crontab');
|
|
|
+ $pathApp = $input->getOption('path-app');
|
|
|
+ $url = $input->getOption('url');
|
|
|
+ if (is_null($url)) {
|
|
|
+ if ($this->getContainer()->hasParameter('url_crontab')) {
|
|
|
+ $url = $this->getContainer()->getParameter('url_crontab');
|
|
|
+ } else {
|
|
|
+ $output->writeln('<error>ERROR:</error> Debe definir una url para generar el crontab.');
|
|
|
+ $output->writeln($this->getSynopsis());
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $times = array();
|
|
|
+ $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;
|
|
|
+
|
|
|
+ $doctrine = $this->getContainer()->get('doctrine.orm.entity_manager');
|
|
|
+
|
|
|
+ if (is_null($pathApp)) {
|
|
|
+ $pathApp = $this->getContainer()->getParameter('app_path');
|
|
|
+ }
|
|
|
+ $pathConsole = "root $(wich php) {$pathApp}/bin/console";
|
|
|
+
|
|
|
+ $serverDevices = $doctrine->getRepository('\StatsBundle\Entity\DeviceServer')->findAll();
|
|
|
+
|
|
|
+ $oltMarks = array('FiberHome', 'FiberLink', 'Huawei');
|
|
|
+ $oltLibraries = array('OIDSFiberHomeV1', 'OIDSHuaweiV1');
|
|
|
+
|
|
|
+ $amqp = $input->getOption('amqp');
|
|
|
+ $amqpRemote = '';
|
|
|
+ $routing_key = '';
|
|
|
+ if ($amqp) {
|
|
|
+ $amqpRemote = 'amqp:remote';
|
|
|
+
|
|
|
+ // Verifico la routing key si se pasa como parametro o variable de entorno
|
|
|
+ // default routing_key = stats
|
|
|
+ $routing_key = $input->getOption('routing_key');
|
|
|
+ if (!$routing_key) {
|
|
|
+ $routing_key = getenv('AMQP_KEY') !== false ? getenv('AMQP_KEY') : 'stats';
|
|
|
+ }
|
|
|
+ $routing_key = "--route={$routing_key}";
|
|
|
+ }
|
|
|
+
|
|
|
+ $content .= "*/5 * * * * {$pathConsole} {$amqpRemote} {$routing_key} generate:crontab" . PHP_EOL;
|
|
|
+
|
|
|
+ foreach ($serverDevices as $server) {
|
|
|
+
|
|
|
+ $content .= 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();
|
|
|
+
|
|
|
+ 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;
|
|
|
+ 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']);
|
|
@@ -118,42 +121,42 @@ class GenerateRemoteCrontabCommand extends ContainerAwareCommand
|
|
|
|
|
|
$commands[] = "*/{$timeScan} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:pon:scan {$params}";
|
|
|
$commands[] = "*/{$timeScan} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:onu:scan {$params}";
|
|
|
-
|
|
|
+
|
|
|
$commands[] = "*/{$timeOnuStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:onu:stats {$params}";
|
|
|
$commands[] = "*/{$timePonStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:pon:stats {$params}";
|
|
|
$commands[] = "*/{$timeOltOctets} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:pon:octets {$params}";
|
|
|
-
|
|
|
+
|
|
|
$params = "--olt-device-id={$deviceId} --olt-server-id={$serverId}";
|
|
|
if ($amqp) {
|
|
|
$params = "--args=--olt-device-id:{$deviceId} --args=--olt-server-id:{$serverId}";
|
|
|
}
|
|
|
$commands[] = "*/{$timeOnuStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:onu {$params}";
|
|
|
$commands[] = "*/{$timeOnuStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:ponport {$params}";
|
|
|
-
|
|
|
- $content .= PHP_EOL."# OLT {$oltName} ({$deviceIp})".PHP_EOL;
|
|
|
-
|
|
|
+
|
|
|
+ $content .= PHP_EOL . "# OLT {$oltName} ({$deviceIp})" . PHP_EOL;
|
|
|
+
|
|
|
$content .= implode(PHP_EOL, $commands);
|
|
|
}
|
|
|
-
|
|
|
- if($this->getContainer()->getParameter('geoserver_service')) {
|
|
|
- $content .= PHP_EOL.PHP_EOL."# MAPAS".PHP_EOL;
|
|
|
-
|
|
|
+
|
|
|
+ if ($this->getContainer()->getParameter('geoserver_service')) {
|
|
|
+ $content .= PHP_EOL . PHP_EOL . "# MAPAS" . PHP_EOL;
|
|
|
+
|
|
|
$params = "--olt-server-id={$serverId}";
|
|
|
if ($amqp) {
|
|
|
$params = "--args=--olt-server-id:{$serverId}";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
$commands = array();
|
|
|
$commands[] = "*/5 * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:onu:geo {$params}";
|
|
|
$commands[] = "*/10 * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:ponport:geo {$params}";
|
|
|
-
|
|
|
+
|
|
|
$content .= implode(PHP_EOL, $commands);
|
|
|
$content .= PHP_EOL;
|
|
|
}
|
|
|
}
|
|
|
- file_put_contents("/etc/cron.d/fd3_stats" , $content);
|
|
|
+ file_put_contents($fileCrontab, $content);
|
|
|
|
|
|
print_r(shell_exec("/etc/init.d/cron reload"));
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
}
|