Ir para o conteúdo principal

Avaliar as alterações necessárias para resolver a problemática de lentidão no SID


Data de elaboração 01/04/2021
Responsável pelo estudo


  1. Gustavo Felix Gomes
  2. Rafael Passos dos Santos 
  3. Lucas de Souza e Sousa (Estagiario)
Equipe do estudo
  1. Gustavo Felix Gomes (Assessor)
  2. Rafael Passos dos Santos (Assessor)
  3. Alexsandro Rocha Fernandes (Assessor)
  4. André Honório de Andrade Silva (Tecnico)
  5. Emanuel Rufino Alcantara de Lima (Analista)
  6. Lucas de Souza e Sousa (Estagiario)
  7. Euriane Nogueira (Product Owner)
  8. Maico Moreira (Coordenador)
Alvo SID
Origem

Avaliar as alterações necessárias para resolver a problemática de lentidão no SID

Objetivo O presente Estudo tem como objetivo verificar o que está deixando o sistema SID lento, e também avaliar as alterações necessárias para deixar o sistema SID mais rápido.
Documentação correlata
Observações Diante do que foi apresentado, concluisse que tal requisições via Ajax e refatorações no codigo. ira diminuir a lentidão no sid, e com isso ele irar carregar mais rapido, em vista que tera menos dados carregados em uma requisição só.

1. Objetivo

O presente Estudo tem como objetivo verificar o que está deixando o sistema SID lento, e também avaliar as alterações necessárias para deixar o sistema SID mais rápido.

2. Introdução

Como se sabe o sistema SID esta com lentidão, diante disso, este documento visa apresentar possíveis soluções para resolver tal problemática.

Foi encontrado que a maior lentidão se encontra nas seguites telas:

  • Na tela de Solicitações de férias para aprovação do chefe imediato
  • Na tela de Férias de servidores
  • Na tela de Home/index


3. Desenvolvimento - Avaliar as alterações necessárias para resolver a problemática de lentidão no SID

3.1 Resultado da pesquisa

Na tela de solicitações/index, estão sendo utilizados os seguintes métodos:

  • Método: Busca de interrupções de férias (sid/interrupção/ BuscarSolicitacoesAguardandoHomologacao)

Esse método busca as interrupções de férias do servidor no sid-api, e realiza o seguinte fluxo:

  1. Busca de todas as interrupções do banco do sid.
  2. Para cada interrupção é feita uma consulta à outra api (e-estado) para buscar os dados do servidor por cpf.
  3. É realizado um filtro para retirar somente as interrupções da unidade orçamentária selecionada

No exemplo da SEDAM, é buscada 182 interrupções do banco do sid, após isso é feita uma consulta a api do e-estado dos 182 servidores que tiveram a interrupção, para depois retirar todos que não eram da SEDAM, no caso 1 servidor somente.

Problema: Esse método consome muito tempo devido o número de vezes que o sistema consome a api do e-estado.

Possíveis soluções:

    1. Utilizar o método BuscarServidoresDaUnidadeOrcamentaria e realizar uma busca dos servidores por essa lista, retirando a necessidade de fazer várias requisições a API do e-estado servidor(utilizar como exemplo o método:  sid-api/solicitacao/ GetSolicitacoesDaUnidadeOrcamentaria) (3 pontos)
    2. Criar filtro por ano aquisitivo (3 pontos)
  •  Método: Busca de suspensões de férias (sid/suspensao/ BuscarSolicitacoesAguardandoHomologacao)

Mesmo problema do item anterior

Possíveis soluções:

    1. Utilizar o método BuscarServidoresDaUnidadeOrcamentaria e realizar uma busca dos servidores por essa lista, retirando a necessidade de fazer várias requisições a API do e-estado servidor(utilizar como exemplo o método:  sid-api/solicitacao/ GetSolicitacoesDaUnidadeOrcamentaria) (3 pontos)
    2. Criar filtro por ano aquisitivo (3 pontos)
  • Método: BuscarSolicitacoesDeRemarcacaoPorUnidadeOrcamentaria
  1. Criar filtro por ano aquisitivo (3 pontos)
  2. Método: AdicionarUsuarioQueHomologou

Problema: Esta é uma outra consulta que está demorando bastante devido ao número de solicitações, é feita 2 consultas ao e-estado.

Possíveis soluções: Criar uma nova consulta no e-estado para buscar o que se pede.

  • Método: SolicitacoesPorDepartamento
  1. Criar filtro por ano aquisitivo (3 pontos)
  2. Método: BuscarSolicitacoesAguardandoCiencia
  1. Criar filtro por ano aquisitivo (3 pontos)

É possível também criar requisições ajax para cada tela abaixo:

Da forma que está hoje, todas as solicitações são buscadas. Por ajax daria pra trazer cada tipo de solicitação somente quando fosse selecionado

Possíveis soluções:

    1. Requisição ajax para solicitações aguardando homologação (5 pontos)
    2. Requisição ajax para solicitações deferidas (5 pontos)
    3. Requisição ajax para solicitações indeferidas (5 pontos)
    4. Requisição ajax para solicitações remarcadas (5 pontos)

Na tela de solicitações/feriasdosservidores, estão sendo utilizados os seguintes métodos:

  • Método: Férias dos servidores (sid/controller/FeriasDosServidores)

Melhoria: Ao invés de percorrer o foreach realizando o filtro, o mesmo poderia ser filtrado antes em feriasDosServidores.PlanejamentoDeFeriasDoServidores.Where(x => x.Status == “Deferida” && !string.IsNullOrEmpty(x.UsuarioQueHomologou) (2 pontos)

Na tela de home/index, estão sendo utilizados os seguintes métodos:

  • Método: Férias dos servidores (servidorrepository/BuscarQuantidadeDeRemarcacaoPorUnidadeOrcamentaria)

Melhoria: Analisar por que essa consulta está demorando tanto (5 pontos)

4. Conclusão

Diante do que foi apresentado, concluisse que tal requisições via Ajax e refatorações no codigo. ira diminuir a lentidão no sid, e com isso ele irar carregar mais rapido, em vista que tera menos dados carregados em uma requisição só.