Ir para o conteúdo principal

Geração de logs em funcionalidades importantes do sistema de Consignação


Data de elaboração 01/03/2023
Responsável pelo estudo
  1. Rafael Passos dos Santos (Assessor)
Equipe do estudo
  1. André Honório de Andrade Silva (Tecnico)
  2. Gezinéia Paula da Costa (Product Owner)
  3. Emanuel Rufino Alcantara de Lima (Analista)
  4. Rafael Passos dos Santos (Assessor)
  5. Alef Carvalho (Analista)
  6. Gustavo Félix (Analista)
Alvo Consignação
Origem

Implementação: Geração de logs de rastreio de do sistema de Consignação

Objetivo

O presente estudo visa analisar e propor a funcionalidade para geração de logs em funcionalidades importantes do sistema de Consignação

Documentação correlata
Observações O presente estudo pretende também pretende levantar as Historias dos cards para a Sprint 


1. Objetivo

O presente estudo visa analisar e propor a funcionalidade para geração de logs em funcionalidades importantes do sistema de Consignação.

1.1 JUSTIFICATIVA

Existem atualmente várias funcionalidades que nao são cobertas pela geração de logs e se faz necessária a geração destes registros para devidas auditorias no sistema. É importante ressaltar que o sistema conta com a geração de logs, porém está inativa no atual momento.

1.2 RESULTADOS ESPERADOS

Espera-se que, após este estudo, seja possível identificar os meios para reativar a geração de logs nas funcionalidades existentes e assim estimar os cards necessários para implementação nas demais áreas do sistema.

2. Introdução

O sistema de Consignação necessita que seja reestabelecido o funcionamento da geração de logs para que, além das funcionalidades já cobertas, outras áreas possam contar com uma cobertura de registro de logs.

3. Desenvolvimento - Geração de logs em funcionalidades importantes

3.1 CENÁRIO ATUAL

No atual momento - da redação deste estudo, a geração de logs do sistema de Consignação não apresenta pleno funcionamento.

Existe uma classe chamada LogAuditoria que possui, os campos necessários para a geração dos logs:

@Entity
@Table(name = "LOGAUDITORIA", schema = "dbo",
       catalog = "DB_CONSIGNACAO")
public class LogAuditoria implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false)
    private Integer id;

    @Column(name = "USUARIO", nullable = false)
    private String usuario;

    @Column(name = "DATAHORA", nullable = false)
    private Timestamp data;

    @Column(name = "EVENTO", nullable = false)
    private String evento;

    @Column(name = "MODULO", nullable = false)
    private String modulo;

    @Column(name = "CONTEUDO", nullable = false)
    private String conteudo;
  
  [...]
  
}

Existindo também uma tabela correspondente na base de dados, chamada LOGAUDITORIA:

image.png

A implementação da funcionalidade de geração de logs é realizada pela LogAuditoriaServiceImpl:

@Service("LogAuditoriaService")
@Transactional
public class LogAuditoriaServiceImpl implements LogAuditoriaService {

    @Autowired
    ILogAuditoriaRepository logAuditoriaRepository;
  
  [...]
  
}

As gravações de log são realizadas manualmente através da chamada do método gravaLogAuditoria(args), indicando, para cada operação, uma string contendo a operação que foi realizada. Assim como neste exemplo, a funcionalidade na AverbacaoServico de Edição de uma Averbação  que chama a gravação (linha 9) de Logs para esta ação informando os devidos dados.

// QUITAR / SUSPENDER
        if(operacao.equals("Quitar") || operacao.equals("Suspender")) {
            // Altera o Status
            operacao = operacao.equals("Quitar") ? "Quitada" : "Suspensa";
            averbacaoHistoricoReserva.setDesHistorico("Averbação " + operacao +
                    ": " + entidade.getMotivo());
            repositorio.updateStatus(entidade.getCodAverbacao(),
                                     entidade.getIndStatus());
            logAuditoriaServiceImpl.gravaLogAuditoria(operacao,
                    "AVERBAÇÃO -> GESTÃO ",
                    super.getFuncionarioLogin(),
                    "Cód Averbação: " + entidade.getCodAverbacao() +
                    " , Matricula: " + entidade.getNumMatricula() +
                    " , Motivo: " + entidade.getMotivo() +
                    " , Status: " + entidade.getIndStatus());
        }

Desta forma é possível constatar para cada funcionalidade que se queira registrar os logs devem ser realizadas manualmente, informando todos os dados necessários.

Observações:

Constata-se que será necessário um card específico por operação, já que cada chamada será diferente da outra.

3.2 SOLUÇÃO

Fora solicitado que a geração de logs contenham as seguintes informações (VING-665):

Informações necessárias:
- IP
- DATA e HORA
- CPF do Servidor/CNPJ do funcionário
- String
Ter o registro de toda movimentação, registro de quem fez a baixa de averbações manuais, fechamento, acesso ao sistema, qualquer exclusão, criação de cargo, cadastro de servidor(matricula), e verbas.

Como já mencionado anteriormente, será necessário, na parte do PO do projeto que solicite, para cada operação, um card específico e individual.

3.2.1 Preocupações e soluções 

  1. No presente momento a geração de logs não apresenta pleno funcionamento, logo a reabilitação desta funcionalidade será a prioridade.

    Este trabalho será realizado juntamente com alguns membros da equipe que dava manutenção neste sistema anteriormente.

  2. Devido listagem de informações conter o IP da máquina do usuário, a princípio fora detectado que seria necessário realizar modificações, tanto no front-end, quanto na back-end da aplicação - o que aumentaria a complexidade, o tempo e o volume de alterações no sistema para que seja entregue.

    Porém, após a realização de pesquisas e testes no código, foi possível obter o IP da requisição (da máquina do usuário) através do código a seguir. Desta forma estima-se que não será mais necessário realizar alterações no front-end da aplicação, restringindo as alterações apenas ao back-end.
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
    String ip = request.getRemoteAddr();

3.2 IMPLEMENTAÇÃO E HISTÓRIAS DE USUÁRIOS

O que? Pontos Regras Produto
Reabilitar a geração e gravação de logs 8

Voltar funcionamento da geração de logs no sistema.

Consignação
Obter IP de cada requisição de forma genérica e reutilizável 5 Criar estrutura para obter-se o IP das requisições para que seja armazenado nos logs da aplicação. Consignação
Inserir campo de IP na classe e na base de dados 5 Incluir este dado nas chamadas existentes através da forma genérica já criada; Consignação
Inserir campo de CPF/CNPJ na classe e na base de dados 5

Incluir este dado nas chamadas existentes através da forma genérica já criada;

Consignação
Gravação de logs



Gravar log de acesso ao sistema 3

Gravar um log no momento em que o usuário realiza login no sistema

Consignação
Gravar log de movimentação [..] 3

criar um card para cada operação específica que se queira gravar logs

Consignação
Gravar log de averbação manual na tela [...] 3 criar um card para cada operação específica que se queira gravar logs Consignação
Gravar log de exclusão [..]  criar um card para cada operação específica que se queira gravar logs Consignação
[...] [...] [...] Consignação

3.3 POSSÍVEIS IMPEDIMENTOS

A linguagem utilizada no projeto é nova para o time. Indisponibilidade de ajuda dos membros do time anterior para as implementações.

4. Conclusão

Conclui-se que para a devida implementação destas melhorias, o time poderá, além consultar este documento, consultar a PO e os demais integrantes da SETIC.