diff --git a/src/Cacic/CommonBundle/Controller/AgenteController.php b/src/Cacic/CommonBundle/Controller/AgenteController.php index 2baeb0a..16de0dc 100644 --- a/src/Cacic/CommonBundle/Controller/AgenteController.php +++ b/src/Cacic/CommonBundle/Controller/AgenteController.php @@ -9,6 +9,7 @@ namespace Cacic\CommonBundle\Controller; use Cacic\CommonBundle\Form\Type\AgenteType; +use Cacic\CommonBundle\Form\Type\DeployType; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Bundle\FrameworkBundle\Controller\Controller; @@ -59,6 +60,8 @@ class AgenteController extends Controller { $finder = new Finder(); $agentes = new Finder(); $saida = array(); + $base_url = $request->getBaseUrl(); + $base_url = preg_replace('/\/app.*.php/', "/", $base_url); // Primeiro tratamos agentes Linux // A regra é que o agente mais atual estará na pasta current @@ -73,10 +76,10 @@ class AgenteController extends Controller { foreach ($agentes as $file) { array_push($saida['linux']['versions'][$version->getFileName()], array( 'name' => $file->getFileName(), - 'download_url' => 'downloads/linux/windows/' . $version->getFileName() . '/' . $file->getFileName(), + 'download_url' => $base_url . 'downloads/cacic/linux/' . $version->getFileName() . '/' . $file->getFileName(), 'hash' => md5_file($file->getRealPath()), 'size' => $file->getSize(), - 'filename' => $windowsDir . $version->getFileName() . '/' . $file->getFileName() + 'filename' => 'cacic/linux/' . $version->getFileName() . '/' . $file->getFileName() )); } @@ -97,10 +100,10 @@ class AgenteController extends Controller { foreach ($agentes as $file) { array_push($saida['windows']['versions'][$version->getFileName()], array( 'name' => $file->getFileName(), - 'download_url' => 'downloads/cacic/windows/' . $version->getFileName() . '/' . $file->getFileName(), + 'download_url' => $base_url . 'downloads/cacic/windows/' . $version->getFileName() . '/' . $file->getFileName(), 'hash' => md5_file($file->getRealPath()), 'size' => $file->getSize(), - 'filename' => 'windows/' . $version->getFileName() . '/' . $file->getFileName() + 'filename' => 'cacic/windows/' . $version->getFileName() . '/' . $file->getFileName() )); } @@ -235,8 +238,7 @@ class AgenteController extends Controller { $rootDir = $this->container->get('kernel')->getRootDir(); $webDir = $rootDir . "/../web/"; $downloadsDir = $webDir . "downloads/"; - $cacicDir = $downloadsDir . "cacic/"; - $filepath = $cacicDir . $request->get('id'); + $filepath = $downloadsDir . $request->get('id'); $this->get('logger')->debug("Excluindo arquivo de agente ".$filepath); @@ -253,4 +255,92 @@ class AgenteController extends Controller { return $response; } + public function deployAction(Request $request) { + $logger = $this->get('logger'); + // Cria diretório dos agentes se não existir + $rootDir = $this->container->get('kernel')->getRootDir(); + $webDir = $rootDir . "/../web/"; + $downloadsDir = $webDir . "downloads/"; + if (!is_dir($downloadsDir)) { + mkdir($downloadsDir); + } + + $outrosDir = $downloadsDir . "outros/"; + if (!is_dir($outrosDir)) { + mkdir($outrosDir); + } + + + $form = $this->createForm( new DeployType() ); + $locale = $request->getLocale(); + + // Constrói array de arquivos e hashes + $finder = new Finder(); + $agentes = new Finder(); + $saida = array(); + $base_url = $request->getBaseUrl(); + $base_url = preg_replace('/\/app.*.php/', "/", $base_url); + + // Tratamos upload de módulos genéricos + $finder->files()->in($outrosDir); + $saida['outros'] = array(); + foreach($finder as $file) { + array_push($saida['outros'], array( + 'name' => $file->getFileName(), + 'download_url' => $base_url . 'downloads/outros/' . $file->getFileName(), + 'hash' => md5_file($file->getRealPath()), + 'size' => $file->getSize(), + 'filename' => "outros/" . $file->getFileName() + )); + + } + + if ( $request->isMethod('POST') ) + { + // Aqui vamos fazer o tratamento dos agentes + $files = $request->files->get('deploy'); + + //$logger->debug("99999999999999999999999999999999999 ".print_r($files, true)); + if (!empty($files['outros'])) { + //$logger->debug("88888888888888888888888888888888888888 ".print_r($files['outros'], true)); + $result = $this->uploadFile($files['outros'], $outrosDir); + if (!$result) { + $logger->error("Erro no upload do módulo"); + $this->get('session')->getFlashBag()->add('error', 'Erro no upload do módulo'); + } else { + // Make this version current + $logger->debug("Upload do módulo realizado com sucesso"); + $this->get('session')->getFlashBag()->add('success', 'Upload do módulo realizado com sucesso!'); + } + } + + } + + $logger->debug("3333333333333333333333333333333333333333 ".print_r($saida, true)); + + return $this->render( 'CacicCommonBundle:Agente:deploy.html.twig', + array( + 'local'=>$locale, + 'saida' => $saida, + 'form' => $form->createView() + ) + ); + } + + public function uploadFile($file, $version) { + $logger = $this->get('logger'); + if (!$file->isValid()) { + $logger->error("Erro no upload do arquivo. Arquivo inválido\n".$file->getErrorMessage()); + $this->get('session')->getFlashBag()->add('error', "Erro no upload do arquivo. Arquivo inválido\n".$file->getErrorMessage()); + return false; + } + + mkdir($version); + $file->move($version, $file->getClientOriginalName()); + $result = true; + $logger->debug("Upload do módulo realizado com sucesso"); + + return $result; + } + } \ No newline at end of file diff --git a/src/Cacic/CommonBundle/Form/Type/DeployType.php b/src/Cacic/CommonBundle/Form/Type/DeployType.php new file mode 100644 index 0000000..8110ef5 --- /dev/null +++ b/src/Cacic/CommonBundle/Form/Type/DeployType.php @@ -0,0 +1,43 @@ +add('outros', 'file', + array( + 'label' => 'Software para Deploy', + 'required' => false + ) + ); + + } + +} \ No newline at end of file diff --git a/src/Cacic/CommonBundle/Resources/config/routing.yml b/src/Cacic/CommonBundle/Resources/config/routing.yml index 2491236..ecac2fd 100644 --- a/src/Cacic/CommonBundle/Resources/config/routing.yml +++ b/src/Cacic/CommonBundle/Resources/config/routing.yml @@ -545,4 +545,8 @@ cacic_agente: cacic_agente_excluir: pattern: /admin/agente/excluir - defaults: { _controller: CacicCommonBundle:Agente:excluir } \ No newline at end of file + defaults: { _controller: CacicCommonBundle:Agente:excluir } + +cacic_deploy: + pattern: /admin/deploy/ + defaults: { _controller: CacicCommonBundle:Agente:deploy } \ No newline at end of file diff --git a/src/Cacic/CommonBundle/Resources/views/Agente/deploy.html.twig b/src/Cacic/CommonBundle/Resources/views/Agente/deploy.html.twig new file mode 100644 index 0000000..3ddf90e --- /dev/null +++ b/src/Cacic/CommonBundle/Resources/views/Agente/deploy.html.twig @@ -0,0 +1,127 @@ +{% extends 'CacicCommonBundle::base.html.twig' %} + +{% macro bytesToSize(bytes) %} + {% spaceless %} + {% set kilobyte = 1024 %} + {% set megabyte = kilobyte * 1024 %} + {% set gigabyte = megabyte * 1024 %} + {% set terabyte = gigabyte * 1024 %} + + {% if bytes < kilobyte %} + {{ bytes ~ ' B' }} + {% elseif bytes < megabyte %} + {{ (bytes / kilobyte)|number_format(2, '.') ~ ' KB' }} + {% elseif bytes < gigabyte %} + {{ (bytes / megabyte)|number_format(2, '.') ~ ' MB' }} + {% elseif bytes < terabyte %} + {{ (bytes / gigabyte)|number_format(2, '.') ~ ' GB' }} + {% else %} + {{ (bytes / terabyte)|number_format(2, '.') ~ ' TB' }} + {% endif %} + {% endspaceless %} +{% endmacro %} + +{% block breadcrumb %} +
+ {{ "Realize o upload do arquivo para deploy nas estações de trabalho."|trans }} +
++ {{ "Os módulos ainda precisam ser habilitados nas subredes"|trans }} +
+{{ 'Arquivo'|trans }} | +{{ 'Hash'|trans }} | +{{ 'Tamanho'|trans }} | +{{ "Ações"|trans }} | +||
---|---|---|---|---|---|
{{ 'NENHUM REGISTRO ENCONTRADO!'|trans }} | +|||||
{{ modulo['name'] }} | +{{ modulo['hash'] }} | +{{ format.bytesToSize(modulo['size']) }} | ++ + + + + + + | +||
{{ 'NENHUM REGISTRO ENCONTRADO!'|trans }} | +
- {{ "Este módulo permite a visualização dos computadores monitorados pelos agentes do cacic"|trans }}. + {{ "Realize o upload do pacote de arquivos contendo a nova versão do agente que será disponibilizada no servidor"|trans }}.
- {{ "É possível pesquisar por IP's, nome ou Mac da máquina e por data de instalação da máquina, bastando selecionar uma de suas opções"|trans }}. + {{ "Ao realizar upload do pacote de agentes, informe o número da versão. O último enviado sempre será considerado o mais atual"|trans }}.
- {{ "Não selecionar nenhum valor em determinado critério é o mesmo que selecionar todos"|trans }}. + {{ "IMPORTANTE: só serão aceitos arquivos nos formatos .zip e .tar.gz"|trans }}.