Criação de Consultas Personalizadas no OpenAudit

Uma Query é na verdade um relatório exibido a partir de uma consulta específica no banco de dados. No Menu→Admin→Queries→Activate Queries, ative as principais Querys que existem


Uma query é baseada em uma pesquisa SQL no banco de dados, então, antes de tudo é necessário entender o modelo do banco de dados do Open-AudIT. É preciso então definir quais campos serão mostrados, quais serão pesquisados e montar uma consulta que retorne esses dados. Utilizamos o PHPMyAdmin para realizar consultas e entender o banco de dados. Com o SQL pronto e funcionando, escrevemos um arquivo XML com a definição do relatório em questão. Esse relatório deve ter os seguintes campos:

  • report
    • details
      • report_name → Nome da Query - Relatório
      • report_display_in_menu → y para mostrar no menu, n para não mostrar no menu
      • report_sql → campo CDATA com o SQL que será executado para o relatório
    • columns
      • column
        • column_order → ordem que a coluna vai aparecer (0,1,2 etc)
        • column_name → nome da coluna que irá aparecer para o usuário
        • column_variable → nome da coluna no banco de dados ou na consulta SQL
        • column_type → tipo da coluna (image, text, link)
        • column_link → link que será seguido quando clicado

Abaixo um exemplo de criação de estrutura para monitorar softwares através do Open-AudIT. Foram criadas duas tabelas na base do Open-AudIT para armazenar quais são os softwares mais importantes para o TCE. O relatório consiste em comparar se nas estações de do TCE existem esses softwares.

Passos para criação do relatório:

  1. Criar tabelas necessárias
  2. Criar funções ou stored procidures necessárias no MySQL
  3. Criar e testar consulta específica
  4. Criar arquivo XML
  5. Importar XML no Open-AudIT
  6. Testar Consulta


Estrutura para tabela `tce_software_monitorado`

CREATE TABLE IF NOT EXISTS `tce_software_monitorado` (
  `id` int(11) NOT NULL,
  `nome` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='Criada para armazenar lista de softwares monitorados, por exemplo, aqueles que  tenham licença especial.' ;
 
--
-- Fazendo dump de dados para tabela `tce_software_monitorado`
--

INSERT INTO `tce_software_monitorado` (`id`, `nome`) VALUES
(1, 'Autocad'),
(5, 'COREL DRAW'),
(6, 'FLIPPING'),
(8, 'SPHINX LEXICA'),
(9, 'MICROSOFT VISIO'),
(10, 'oraclelinux-release'),
(11, 'Quest SQL Optimizer for Oracle'),
(12, 'Toad for Oracle'),
(13, 'Knowledge Xpert for Oracle Administration'),
(14, 'Knowledge Xpert Oracle Common');

--
-- Índices de tabela `tce_software_monitorado`
--
ALTER TABLE `tce_software_monitorado`
  ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT de tabela `tce_software_monitorado`
--
ALTER TABLE `tce_software_monitorado`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=15;


Estrutura para tabela `tce_software_proibido`

CREATE TABLE IF NOT EXISTS `tce_software_proibido` (
  `id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COMMENT='Criada para armazenar lista de software monitorados ou proibidos';
 
--
-- Fazendo dump de dados para tabela `tce_software_proibido`
--

INSERT INTO `tce_software_proibido` (`id`, `nome`) VALUES
(1, 'counter strike'),
(6, 'Dropbox'),
(8, 'BoxNet'),
(9, 'Facebook'),
(10, 'BoxNet'),
(11, 'Facebook'),
(12, 'Google Drive'),
(13, 'Pandora'),
(14, 'Google Drive'),
(15, 'Pandora'),
(17, 'Angry Birds'),
(18, 'Hoccer'),
(19, 'Netflix'),
(20, 'Google+'),
(21, 'Google Play Movies'),
(22, 'Google Play Music'),
(23, 'Google+ Hangouts'),
(24, 'YouTube'),
(25, 'SkyDrive'),
(26, 'Angry Birds'),
(27, 'Hoccer'),
(28, 'Netflix'),
(29, 'Google+'),
(30, 'Google Play Movies'),
(31, 'Google Play Music'),
(32, 'Google+ Hangouts'),
(33, 'YouTube'),
(34, 'thor'),
(35, 'Skype');

--
-- Índices de tabela `tce_software_proibido`
--
ALTER TABLE `tce_software_proibido`
  ADD PRIMARY KEY (`id`);

 --
 -- AUTO_INCREMENT de tabela `tce_software_proibido`
 --
ALTER TABLE `tce_software_proibido`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=36;
delimiter //

CREATE FUNCTION is_software_proibido (nome_pesq VARCHAR(100)) 
RETURNS BOOLEAN
NOT DETERMINISTIC
BEGIN
        DECLARE existe BOOLEAN;
        DECLARE campo_pesquisa VARCHAR(102);
        
        SELECT TRUE INTO existe 
        FROM  tce_software_proibido s
        where upper(nome_pesq) like upper(concat('%',s.nome,'%'))
        limit 1; 
        
        IF (existe IS NOT NULL) THEN SET existe = TRUE;
        ELSE SET existe = FALSE;
        END IF;
        
        RETURN existe;
        
END //
delimiter ;


delimiter //

CREATE FUNCTION is_software_monitorado (nome_pesq VARCHAR(100)) 
RETURNS BOOLEAN
NOT DETERMINISTIC
BEGIN
        DECLARE existe BOOLEAN;
        DECLARE campo_pesquisa VARCHAR(102);
        SET campo_pesquisa = CONCAT( "%", nome_pesq, "%" );
        
        SELECT TRUE INTO existe 
        FROM  tce_software_monitorado s
        where upper(nome_pesq) like upper(concat('%',s.nome,'%'))
        limit 1; 
        
        IF (existe IS NOT NULL) THEN SET existe = TRUE;
        ELSE SET existe = FALSE;
        END IF;
        
        RETURN existe;
        
END //
delimiter ;
SELECT distinct system.man_icon, 
      system.man_type, 
      system.system_id, 
      system.hostname, 
      sys_sw_software.software_name,  
      sys_sw_software.software_version,  
      sys_sw_software.software_publisher,  
      sys_sw_software.software_url,  
      sys_sw_software.software_email,  
      sys_sw_software.software_id,  
      sys_sw_software.software_comment  
FROM sys_sw_software, system, oa_group_sys  
WHERE sys_sw_software.timestamp = system.timestamp  
  AND sys_sw_software.system_id = system.system_id  
  AND system.system_id = oa_group_sys.system_id  
  AND is_software_proibido(sys_sw_software.software_name) = true 
ORDER BY sys_sw_software.software_name;


SELECT distinct system.man_icon, 
      system.man_type, 
      system.system_id, 
      system.hostname, 
      sys_sw_software.software_name,  
      sys_sw_software.software_version,  
      sys_sw_software.software_publisher,  
      sys_sw_software.software_url,  
      sys_sw_software.software_email,  
      sys_sw_software.software_id,  
      sys_sw_software.software_comment  
FROM sys_sw_software, system, oa_group_sys  
WHERE sys_sw_software.timestamp = system.timestamp  
  AND sys_sw_software.system_id = system.system_id  
  AND system.system_id = oa_group_sys.system_id  
  AND is_software_monitorado(sys_sw_software.software_name) = true 
ORDER BY sys_sw_software.software_name;


Por fim, basta criar um arquivo XML para mostrar os dados da pesquisa utilizando o SQL defindo anteriormente. Para melhorar o relatório, importante inserir a restrição AND oa_group_sys.group_id = @group no corpo do SQL para que sejam carregados apenas os dados do Grupo selecionado pelo usuário. Para importar o XML, vá em Menu→Admin→Queries→Import Query e cole o XML no campo específico.

<?xml version="1.0" encoding="ISO-8859-1"?>
<report>
        <details>
                <report_name>Softwares - Monitorados</report_name>
                <report_description></report_description>
                <report_display_in_menu>y</report_display_in_menu>
                <report_sql><![CDATA[SELECT distinct system.man_icon, system.man_type, system.system_id, system.hostname,  sys_sw_software.software_name,  sys_sw_software.software_version,  sys_sw_software.software_publisher,  sys_sw_software.software_url,  sys_sw_software.software_email,  sys_sw_software.software_id,  sys_sw_software.software_comment  FROM sys_sw_software, system, oa_group_sys  WHERE sys_sw_software.timestamp = system.timestamp  AND sys_sw_software.system_id = system.system_id  AND system.system_id = oa_group_sys.system_id AND oa_group_sys.group_id = @group AND is_software_monitorado(sys_sw_software.software_name) = true ORDER BY sys_sw_software.software_name]]> </report_sql>
                <report_view_file>v_report</report_view_file>
                <report_view_contents></report_view_contents>
                <report_processing></report_processing>
                <report_sort_column>0</report_sort_column>
        </details>
        <columns>
                <column>
                        <column_order>0</column_order>
                        <column_name>Icon</column_name>
                        <column_variable>man_icon</column_variable>
                        <column_type>image</column_type>
                        <column_link></column_link>
                        <column_secondary>man_type</column_secondary>
                        <column_ternary></column_ternary>
                        <column_align>center</column_align>
                </column>
                <column>
                        <column_order>1</column_order>
                        <column_name>Type</column_name>
                        <column_variable>man_type</column_variable>
                        <column_type>text</column_type>
                        <column_link></column_link>
                        <column_secondary></column_secondary>
                        <column_ternary></column_ternary>
                        <column_align></column_align>
                </column>
                <column>
                        <column_order>2</column_order>
                        <column_name>System Name</column_name>
                        <column_variable>hostname</column_variable>
                        <column_type>link</column_type>
                        <column_link>/main/system_display/</column_link>
                        <column_secondary>system_id</column_secondary>
                        <column_ternary></column_ternary>
                        <column_align></column_align>
                </column>
                <column>
                        <column_order>3</column_order>
                        <column_name>Package Name</column_name>
                        <column_variable>software_name</column_variable>
                        <column_type>link</column_type>
                        <column_link>/report/specific_software/$group_id/</column_link>
                        <column_secondary>software_id</column_secondary>
                        <column_ternary></column_ternary>
                        <column_align>left</column_align>
                </column>
                <column>
                        <column_order>4</column_order>
                        <column_name>Version</column_name>
                        <column_variable>software_version</column_variable>
                        <column_type>text</column_type>
                        <column_link></column_link>
                        <column_secondary></column_secondary>
                        <column_ternary></column_ternary>
                        <column_align>right</column_align>
                </column>
                <column>
                        <column_order>5</column_order>
                        <column_name>Installs</column_name>
                        <column_variable>software_count</column_variable>
                        <column_type>text</column_type>
                        <column_link></column_link>
                        <column_secondary></column_secondary>
                        <column_ternary></column_ternary>
                        <column_align>center</column_align>
                </column>
                <column>
                        <column_order>6</column_order>
                        <column_name>Publisher</column_name>
                        <column_variable>software_publisher</column_variable>
                        <column_type>text</column_type>
                        <column_link></column_link>
                        <column_secondary></column_secondary>
                        <column_ternary></column_ternary>
                        <column_align>left</column_align>
                </column>
                <column>
                        <column_order>7</column_order>
                        <column_name>Type</column_name>
                        <column_variable>software_comment</column_variable>
                        <column_type>text</column_type>
                        <column_link></column_link>
                        <column_secondary></column_secondary>
                        <column_ternary></column_ternary>
                        <column_align>left</column_align>
                </column>
                <column>
                        <column_order>8</column_order>
                        <column_name>Contact</column_name>
                        <column_variable>software_url</column_variable>
                        <column_type>url</column_type>
                        <column_link></column_link>
                        <column_secondary></column_secondary>
                        <column_ternary></column_ternary>
                        <column_align>left</column_align>
                </column>
                <column>
                        <column_order>9</column_order>
                        <column_name>Google Search</column_name>
                        <column_variable></column_variable>
                        <column_type>url</column_type>
                        <column_link>https://encrypted.google.com/search?q=</column_link>
                        <column_secondary>software_name</column_secondary>
                        <column_ternary>google</column_ternary>
                        <column_align>center</column_align>
                </column>
        </columns>
</report>


Para testar a query, abra a página inicial do Open-AudIT e no grupo que você quiser clique em Reports e selecione o relatório criado.


O Resultado será parecido com o seguinte:
.

  • pres/gerti/infraestrutura_de_ti/open-audit/criando_relatorio_queries_no_open-audit.txt
  • Última modificação: 16/06/2016 11:37
  • por mbjesus