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 %} +
  • {{ 'Deploy de Software'|trans }}
  • +{% endblock %} + +{% block body %} + {% import _self as format %} + +
    + +
    +
    + +

    {{'Upload de módulos para deploy' |trans }}

    + +
    + {{ form_start(form, {'id': 'formDeploy'|trans, 'action': path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')), 'method': 'POST'}) }} + + {{ form_errors(form) }} + + {{ form_row(form.outros) }} + + + + {{ form_end(form) }} + +
    +
    +
    + +
    +
    + +

    {{ "Informações Adicionais"|trans }}

    + +
    +

    + {{ "Realize o upload do arquivo para deploy nas estações de trabalho."|trans }} +

    +

    + {{ "Os módulos ainda precisam ser habilitados nas subredes"|trans }} +

    +
    +
    +
    + +
    + +
    +
    +
    +

    {{'Lista de Softwares disponíveis' |trans }}

    + +
    +

    {{ "Softwares para deploy"|trans }}

    + + + + + + + + + + + {% for modulo in saida.outros %} + {% if modulo is empty %} + + + + {% else %} + + + + + + + {% endif %} + {% else %} + + + + {% endfor %} + +
    {{ '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 }}
    + +
    +
    +
    +
    + +{% endblock %} + +{% block javascripts %} + + {{ parent() }} + +{% endblock %} \ No newline at end of file diff --git a/src/Cacic/CommonBundle/Resources/views/Agente/index.html.twig b/src/Cacic/CommonBundle/Resources/views/Agente/index.html.twig index 5311c1b..8ba5116 100644 --- a/src/Cacic/CommonBundle/Resources/views/Agente/index.html.twig +++ b/src/Cacic/CommonBundle/Resources/views/Agente/index.html.twig @@ -33,7 +33,7 @@
    -

    {{'Upload de agentes' |trans }}

    +

    {{'Upload de agentes' |trans }}

    {{ form_start(form, {'id': 'formAgentes'|trans, 'action': path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')), 'method': 'POST'}) }} @@ -63,13 +63,13 @@

    - {{ "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 }}.

    @@ -115,7 +115,6 @@ {% for modulo in value %} - {{ version }} {{ modulo['name'] }} {{ modulo['hash'] }} {{ format.bytesToSize(modulo['size']) }} @@ -123,6 +122,9 @@ + + + {% else %} @@ -178,6 +180,9 @@ + + + {% else %} -- libgit2 0.21.2