Commit d82d33739f2234e886c2427730ccde310ad41791
Committed by
Eduardo Santos
1 parent
2a9d2441
Exists in
master
and in
1 other branch
Corrige coleta de software e insere subrede padrão para armazenamento das estaçõ…
…es de trabalho onde a subrede não é enoontrada
Showing
6 changed files
with
275 additions
and
8 deletions
Show diff stats
app/config/config.yml
| @@ -169,3 +169,7 @@ services: | @@ -169,3 +169,7 @@ services: | ||
| 169 | class: Cacic\CommonBundle\Command\DemoCommand | 169 | class: Cacic\CommonBundle\Command\DemoCommand |
| 170 | tags: | 170 | tags: |
| 171 | - { name: console.command } | 171 | - { name: console.command } |
| 172 | + cacic_demo.command.upgrade_command: | ||
| 173 | + class: Cacic\CommonBundle\Command\UpgradeCommand | ||
| 174 | + tags: | ||
| 175 | + - { name: console.command } | ||
| 172 | \ No newline at end of file | 176 | \ No newline at end of file |
| @@ -0,0 +1,150 @@ | @@ -0,0 +1,150 @@ | ||
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * Created by PhpStorm. | ||
| 4 | + * User: eduardo | ||
| 5 | + * Date: 14/04/14 | ||
| 6 | + * Time: 12:47 | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +namespace Cacic\CommonBundle\Command; | ||
| 10 | + | ||
| 11 | +use Cacic\CommonBundle\Entity\Rede; | ||
| 12 | +use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; | ||
| 13 | +use Symfony\Component\Console\Input\InputArgument; | ||
| 14 | +use Symfony\Component\Console\Input\InputInterface; | ||
| 15 | +use Symfony\Component\Console\Input\InputOption; | ||
| 16 | +use Symfony\Component\Console\Output\OutputInterface; | ||
| 17 | + | ||
| 18 | + | ||
| 19 | +class UpgradeCommand extends ContainerAwareCommand { | ||
| 20 | + protected function configure() | ||
| 21 | + { | ||
| 22 | + $this | ||
| 23 | + ->setName('cacic:upgrade') | ||
| 24 | + ->setDescription('Atualiza Cacic') | ||
| 25 | + ->addArgument('component', InputArgument::OPTIONAL, 'Nome de quem está executando o comando, só para não perder o atributo') | ||
| 26 | + ->addOption('force', null, InputOption::VALUE_NONE, 'Prossegue com a carga mesmo se acontecer algum erro') | ||
| 27 | + ; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + protected function execute(InputInterface $input, OutputInterface $output) | ||
| 31 | + { | ||
| 32 | + $component = $input->getArgument('component'); | ||
| 33 | + $text = "Executando operação de atualização para o componente $component"; | ||
| 34 | + | ||
| 35 | + $force = ($input->getOption('force')); | ||
| 36 | + | ||
| 37 | + // Atualiza Software | ||
| 38 | + if ($component =='software') { | ||
| 39 | + $this->upgradeSoftware(); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + $output->writeln($text); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * Atualiza software impedindo que haja entradas repetidas na tabela | ||
| 47 | + */ | ||
| 48 | + private function upgradeSoftware() { | ||
| 49 | + $logger = $this->getContainer()->get('logger'); | ||
| 50 | + $em = $this->getContainer()->get('doctrine')->getManager(); | ||
| 51 | + | ||
| 52 | + $softwaresRepetidos = $em->getRepository('CacicCommonBundle:Software')->getNomesRepetidos(); | ||
| 53 | + $arrSoftware = array(); | ||
| 54 | + foreach ($softwaresRepetidos as $softwareElement) { | ||
| 55 | + // Pega o primeiro elemento como resultado | ||
| 56 | + $nmSoftware = $softwareElement['nmSoftware']; | ||
| 57 | + $logger->debug("O seguinte software possui entradas repetidas: $nmSoftware"); | ||
| 58 | + | ||
| 59 | + $this->processaRepetido($nmSoftware); | ||
| 60 | + | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + // Limpa memória | ||
| 64 | + $propriedadeSoftware = null; | ||
| 65 | + | ||
| 66 | + // Finalmente limpa todas as entradas de software que não possuem informação de coleta | ||
| 67 | + $softwareList = $em->getRepository('CacicCommonBundle:Software')->semColeta(); | ||
| 68 | + foreach($softwareList as $software) { | ||
| 69 | + try { | ||
| 70 | + $em->remove($software); | ||
| 71 | + $em->flush(); | ||
| 72 | + } catch(\Exception $e) { | ||
| 73 | + $message = $e->getMessage(); | ||
| 74 | + $idSoftware = $software->getIdSoftware(); | ||
| 75 | + | ||
| 76 | + $logger->error("Falha ao remover o software $idSoftware\n$message"); | ||
| 77 | + } | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + // Limpa memória | ||
| 81 | + $em->clear(); | ||
| 82 | + | ||
| 83 | + $logger->debug("Adiciona rede padrão"); | ||
| 84 | + $this->redePadrao(); | ||
| 85 | + | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + /** | ||
| 89 | + * Processa um software repetido | ||
| 90 | + * | ||
| 91 | + * @param $nmSoftware | ||
| 92 | + */ | ||
| 93 | + | ||
| 94 | + private function processaRepetido($nmSoftware) { | ||
| 95 | + $logger = $this->getContainer()->get('logger'); | ||
| 96 | + $em = $this->getContainer()->get('doctrine')->getManager(); | ||
| 97 | + $software = $em->getRepository('CacicCommonBundle:Software')->porNome($nmSoftware); | ||
| 98 | + | ||
| 99 | + $propriedade = $em->getRepository('CacicCommonBundle:PropriedadeSoftware')->propPorNome( $nmSoftware); | ||
| 100 | + | ||
| 101 | + foreach ($propriedade as $propriedadeSoftware) { | ||
| 102 | + $this->processaPropriedade($software, $propriedadeSoftware); | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + // Limpa para economizar memória | ||
| 106 | + $propriedade = null; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + /** | ||
| 110 | + * Processa software e propriedade | ||
| 111 | + * | ||
| 112 | + * @param $software | ||
| 113 | + * @param $propriedadeSoftware | ||
| 114 | + */ | ||
| 115 | + | ||
| 116 | + private function processaPropriedade($software, $propriedadeSoftware) { | ||
| 117 | + $logger = $this->getContainer()->get('logger'); | ||
| 118 | + $em = $this->getContainer()->get('doctrine')->getManager(); | ||
| 119 | + | ||
| 120 | + $propriedadeSoftware->setSoftware($software); | ||
| 121 | + $em->persist($propriedadeSoftware); | ||
| 122 | + $em->flush(); | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + private function redePadrao() { | ||
| 126 | + $em = $this->getContainer()->get('doctrine')->getManager(); | ||
| 127 | + $logger = $this->getContainer()->get('logger'); | ||
| 128 | + | ||
| 129 | + $rede = $em->getRepository('CacicCommonBundle:Rede')->findOneBy( array('teIpRede' => '0.0.0.0') ); | ||
| 130 | + if (empty($rede)) { | ||
| 131 | + $rede = new Rede(); | ||
| 132 | + | ||
| 133 | + $rede->setTeIpRede('0.0.0.0'); | ||
| 134 | + $rede->setTeMascaraRede('255.255.255.255'); | ||
| 135 | + $rede->setNmRede('Rede não encontrada'); | ||
| 136 | + $rede->setTeServCacic('http://localhost'); | ||
| 137 | + $rede->setTeServUpdates('http://localhost'); | ||
| 138 | + $rede->setNuLimiteFtp(100); | ||
| 139 | + $rede->setCsPermitirDesativarSrcacic('S'); | ||
| 140 | + | ||
| 141 | + // Armazena no primeiro local encontrado | ||
| 142 | + $local = $em->getRepository('CacicCommonBundle:Local')->findAll(); | ||
| 143 | + $rede->setIdLocal($local[0]); | ||
| 144 | + | ||
| 145 | + $em->persist($rede); | ||
| 146 | + $em->flush(); | ||
| 147 | + | ||
| 148 | + } | ||
| 149 | + } | ||
| 150 | +} | ||
| 0 | \ No newline at end of file | 151 | \ No newline at end of file |
src/Cacic/CommonBundle/DataFixtures/ORM/LoadRedeData.php
0 → 100644
| @@ -0,0 +1,49 @@ | @@ -0,0 +1,49 @@ | ||
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * Created by PhpStorm. | ||
| 4 | + * User: eduardo | ||
| 5 | + * Date: 14/04/14 | ||
| 6 | + * Time: 19:33 | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +namespace Cacic\CommonBundle\DataFixtures\ORM; | ||
| 10 | + | ||
| 11 | +use Doctrine\Common\DataFixtures\AbstractFixture; | ||
| 12 | +use Doctrine\Common\DataFixtures\FixtureInterface; | ||
| 13 | +use Doctrine\Common\DataFixtures\OrderedFixtureInterface; | ||
| 14 | +use Doctrine\Common\Persistence\ObjectManager; | ||
| 15 | +use Symfony\Component\DependencyInjection\ContainerAwareInterface; | ||
| 16 | +use Symfony\Component\DependencyInjection\ContainerInterface; | ||
| 17 | + | ||
| 18 | +use Cacic\CommonBundle\Entity\Rede; | ||
| 19 | + | ||
| 20 | + | ||
| 21 | +class LoadRedeData extends AbstractFixture implements FixtureInterface, ContainerAwareInterface, OrderedFixtureInterface | ||
| 22 | +{ | ||
| 23 | + private $container; | ||
| 24 | + | ||
| 25 | + public function setContainer(ContainerInterface $container = null) | ||
| 26 | + { | ||
| 27 | + $this->container = $container; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public function load(ObjectManager $manager) | ||
| 31 | + { | ||
| 32 | + $rede = new Rede(); | ||
| 33 | + $rede->setTeIpRede('0.0.0.0'); | ||
| 34 | + $rede->setTeMascaraRede('255.255.255.255'); | ||
| 35 | + $rede->setTeServCacic('http://localhost'); | ||
| 36 | + $rede->setTeServUpdates('http://localhost'); | ||
| 37 | + $rede->setNuLimiteFtp(100); | ||
| 38 | + $rede->setCsPermitirDesativarSrcacic('S'); | ||
| 39 | + $rede->setIdLocal($this->getReference('local')); | ||
| 40 | + | ||
| 41 | + $manager->persist($rede); | ||
| 42 | + $manager->flush(); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + public function getOrder() | ||
| 46 | + { | ||
| 47 | + return 5; | ||
| 48 | + } | ||
| 49 | +} | ||
| 0 | \ No newline at end of file | 50 | \ No newline at end of file |
src/Cacic/CommonBundle/Entity/PropriedadeSoftwareRepository.php
| @@ -12,4 +12,21 @@ use Doctrine\ORM\EntityRepository; | @@ -12,4 +12,21 @@ use Doctrine\ORM\EntityRepository; | ||
| 12 | */ | 12 | */ |
| 13 | class PropriedadeSoftwareRepository extends EntityRepository | 13 | class PropriedadeSoftwareRepository extends EntityRepository |
| 14 | { | 14 | { |
| 15 | + | ||
| 16 | + /** | ||
| 17 | + * Retorna lista de todas as propriedades coletadas | ||
| 18 | + * | ||
| 19 | + * @return mixed | ||
| 20 | + */ | ||
| 21 | + | ||
| 22 | + public function propPorNome( $nmSoftware ) { | ||
| 23 | + $qb = $this->createQueryBuilder('prop') | ||
| 24 | + ->select('prop') | ||
| 25 | + ->innerJoin('CacicCommonBundle:Software', 'sw', 'WITH', 'sw.idSoftware = prop.software') | ||
| 26 | + ->andWhere('sw.nmSoftware = :nmSoftware') | ||
| 27 | + ->setParameter('nmSoftware', $nmSoftware); | ||
| 28 | + | ||
| 29 | + return $qb->getQuery()->execute(); | ||
| 30 | + } | ||
| 31 | + | ||
| 15 | } | 32 | } |
src/Cacic/CommonBundle/Entity/SoftwareRepository.php
| @@ -256,4 +256,48 @@ class SoftwareRepository extends EntityRepository | @@ -256,4 +256,48 @@ class SoftwareRepository extends EntityRepository | ||
| 256 | return $qb->getQuery()->execute(); | 256 | return $qb->getQuery()->execute(); |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | + /** | ||
| 260 | + * Lista softwares que possuem o nome repetido no sistema | ||
| 261 | + */ | ||
| 262 | + public function getNomesRepetidos() { | ||
| 263 | + | ||
| 264 | + $qb = $this->createQueryBuilder('sw') | ||
| 265 | + ->select('sw.nmSoftware, COUNT(prop) as n_repeticoes') | ||
| 266 | + ->innerJoin('CacicCommonBundle:PropriedadeSoftware','prop', 'WITH', 'sw.idSoftware = prop.software') | ||
| 267 | + ->having('COUNT(prop) > 1') | ||
| 268 | + ->groupBy('sw.nmSoftware') | ||
| 269 | + ->orderBy('sw.nmSoftware'); | ||
| 270 | + | ||
| 271 | + return $qb->getQuery()->execute(); | ||
| 272 | + | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + /** | ||
| 276 | + * Pega primeiro resultado de uma consulta por nome | ||
| 277 | + * | ||
| 278 | + * @param $nmSoftware | ||
| 279 | + */ | ||
| 280 | + public function porNome( $nmSoftware ) { | ||
| 281 | + | ||
| 282 | + $qb = $this->createQueryBuilder('sw') | ||
| 283 | + ->select('sw') | ||
| 284 | + ->andWhere('sw.nmSoftware = :nmSoftware') | ||
| 285 | + ->setMaxResults(1) | ||
| 286 | + ->setParameter('nmSoftware', $nmSoftware); | ||
| 287 | + | ||
| 288 | + return $qb->getQuery()->getSingleResult(); | ||
| 289 | + | ||
| 290 | + } | ||
| 291 | + | ||
| 292 | + public function semColeta() { | ||
| 293 | + $qb = $this->createQueryBuilder('sw') | ||
| 294 | + ->select('sw') | ||
| 295 | + ->leftJoin('CacicCommonBundle:PropriedadeSoftware', 'prop', 'WITH', 'sw.idSoftware = prop.software') | ||
| 296 | + ->leftJoin('CacicCommonBundle:AquisicaoItem', 'aq', 'WITH', 'sw.idSoftware = aq.idSoftware') | ||
| 297 | + ->andWhere('prop IS NULL') | ||
| 298 | + ->andWhere('aq IS NULL'); | ||
| 299 | + | ||
| 300 | + return $qb->getQuery()->execute(); | ||
| 301 | + } | ||
| 302 | + | ||
| 259 | } | 303 | } |
| 260 | \ No newline at end of file | 304 | \ No newline at end of file |
src/Cacic/WSBundle/Controller/ColetaController.php
| @@ -177,19 +177,22 @@ class ColetaController extends Controller | @@ -177,19 +177,22 @@ class ColetaController extends Controller | ||
| 177 | $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy( array( 'idClassProperty'=> $idClassProperty ) ); | 177 | $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy( array( 'idClassProperty'=> $idClassProperty ) ); |
| 178 | 178 | ||
| 179 | if (empty($propriedadeSoftware)) { | 179 | if (empty($propriedadeSoftware)) { |
| 180 | - // Primeiro crio o software | ||
| 181 | - $softwareObject = new Software(); | ||
| 182 | 180 | ||
| 183 | // Se não tiver nome coloco o ID Software no nome | 181 | // Se não tiver nome coloco o ID Software no nome |
| 184 | if (empty($arrTagsNames['DisplayName'])) { | 182 | if (empty($arrTagsNames['DisplayName'])) { |
| 185 | - $softwareObject->setNmSoftware($softwareName); | 183 | + $nmSoftware = $softwareName; |
| 186 | } else { | 184 | } else { |
| 187 | - $softwareObject->setNmSoftware($arrTagsNames['DisplayName']); | 185 | + $nmSoftware = $arrTagsNames['DisplayName']; |
| 188 | } | 186 | } |
| 189 | 187 | ||
| 190 | - // Grava software recém inserido | ||
| 191 | - $this->getDoctrine()->getManager()->persist($softwareObject); | ||
| 192 | - $this->getDoctrine()->getManager()->flush(); | 188 | + |
| 189 | + $softwareObject = $this->getDoctrine()->getRepository('CacicCommonBundle:Software')->findOneBy( array( 'nmSoftware' => $nmSoftware ) ); | ||
| 190 | + if (empty($softwareObject)) { | ||
| 191 | + $softwareObject = new Software(); | ||
| 192 | + // Grava software recém inserido | ||
| 193 | + $this->getDoctrine()->getManager()->persist($softwareObject); | ||
| 194 | + $this->getDoctrine()->getManager()->flush(); | ||
| 195 | + } | ||
| 193 | 196 | ||
| 194 | // Depois adiciono as propriedades | 197 | // Depois adiciono as propriedades |
| 195 | $propriedadeSoftware = new PropriedadeSoftware(); | 198 | $propriedadeSoftware = new PropriedadeSoftware(); |
| @@ -219,7 +222,7 @@ class ColetaController extends Controller | @@ -219,7 +222,7 @@ class ColetaController extends Controller | ||
| 219 | 222 | ||
| 220 | // Grava software recém inserido | 223 | // Grava software recém inserido |
| 221 | $this->getDoctrine()->getManager()->persist($softwareObject); | 224 | $this->getDoctrine()->getManager()->persist($softwareObject); |
| 222 | - $this->getDoctrine()->getManager()->flush(); | 225 | + //$this->getDoctrine()->getManager()->flush(); |
| 223 | 226 | ||
| 224 | // Ajusta valores coletados | 227 | // Ajusta valores coletados |
| 225 | $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']); | 228 | $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']); |