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 | 169 | class: Cacic\CommonBundle\Command\DemoCommand |
170 | 170 | tags: |
171 | 171 | - { name: console.command } |
172 | + cacic_demo.command.upgrade_command: | |
173 | + class: Cacic\CommonBundle\Command\UpgradeCommand | |
174 | + tags: | |
175 | + - { name: console.command } | |
172 | 176 | \ No newline at end of file | ... | ... |
... | ... | @@ -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 | 151 | \ No newline at end of file | ... | ... |
src/Cacic/CommonBundle/DataFixtures/ORM/LoadRedeData.php
0 → 100644
... | ... | @@ -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 | 50 | \ No newline at end of file | ... | ... |
src/Cacic/CommonBundle/Entity/PropriedadeSoftwareRepository.php
... | ... | @@ -12,4 +12,21 @@ use Doctrine\ORM\EntityRepository; |
12 | 12 | */ |
13 | 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 | 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 | 304 | \ No newline at end of file | ... | ... |
src/Cacic/WSBundle/Controller/ColetaController.php
... | ... | @@ -177,19 +177,22 @@ class ColetaController extends Controller |
177 | 177 | $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy( array( 'idClassProperty'=> $idClassProperty ) ); |
178 | 178 | |
179 | 179 | if (empty($propriedadeSoftware)) { |
180 | - // Primeiro crio o software | |
181 | - $softwareObject = new Software(); | |
182 | 180 | |
183 | 181 | // Se não tiver nome coloco o ID Software no nome |
184 | 182 | if (empty($arrTagsNames['DisplayName'])) { |
185 | - $softwareObject->setNmSoftware($softwareName); | |
183 | + $nmSoftware = $softwareName; | |
186 | 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 | 197 | // Depois adiciono as propriedades |
195 | 198 | $propriedadeSoftware = new PropriedadeSoftware(); |
... | ... | @@ -219,7 +222,7 @@ class ColetaController extends Controller |
219 | 222 | |
220 | 223 | // Grava software recém inserido |
221 | 224 | $this->getDoctrine()->getManager()->persist($softwareObject); |
222 | - $this->getDoctrine()->getManager()->flush(); | |
225 | + //$this->getDoctrine()->getManager()->flush(); | |
223 | 226 | |
224 | 227 | // Ajusta valores coletados |
225 | 228 | $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']); | ... | ... |