Ir para o conteúdo principal

Regra de Negócio do Updater

Modelo Entidade Relacionamento


Atualização da Licença

  • O updater atualiza a licença na inicialização e a cada x minutos (onde x é uma configuração no site do UpdateCenter — atualmente configurada para 150 minutos).
  • Na atualização da licença, são identificadas as identidades (códigos CRMs) que ainda não possuem licença gerada ou que estão há mais de 24 horas sem renovar a licença. Desta forma, garante-se que cada identidade seja atualizada apenas 1 vez por dia.
  • Caso seja necessário atualizar a licença novamente, esse processo é feito manualmente pelo UpdateManager.
  • A cada atualização, uma nova licença é gerada com validade de 15 dias.
  • A licença é armazenada em cache na base do updater.

Controle de Licenças

  • O updater controla o uso das identidades registradas na sua base pelo campo UltimaComunicacao na tabela Identidade.
  • Sempre que um sistema (pack, shop, etc) é aberto, a data de comunicação da identidade com o updater é atualizada.
  • Se nenhum sistema registrado em uma identidade for aberto durante 3 dias, a licença será adormecida. Isso significa que o updater irá ignorá-la na rotina de atualização de licenças. 
  • Após 7 dias sem utilização, a licença é excluída, juntamente com todos os aplicativos vinculados a ela.

Negativa de Acesso

  • Antes de entregar uma negativa de acesso, o updater força a atualização da licença, ignorando o cache (consultando o cliente novamente no bimer).
  • Se os 15 dias de validade da licença expiraram e a renovação não ocorreu, o updater tentará atualizar a licença ao acessar o sistema novamente. Se a renovação não for bem-sucedida, uma negativa por licença expirada será entregue.

Campos Atualizados na Licença

Cada vez que a licença é atualizada, os seguintes campos são atualizados na tabela Identidade:

  • UltimaAtualização
  • ExpiraçãoLicenca
  • UltimaComunicação

Aplicativo

  • Sempre que um sistema é aberto, o updater atualiza o campo Comunicacao na tabela Aplicativo.
  • Aplicativos sem comunicação há mais de 15 dias serão excluídos, juntamente com seus registros na tabela Aplicativo_Versao e os downloads disponíveis.

Busca por Atualizações

A busca por atualizações ocorre na inicialização do updater e, subsequentemente, a cada intervalo de tempo configurado (onde o valor de x é definido no site do UpdateCenter). Atualmente, o intervalo está configurado para 240 minutos.

Este processo consiste em realizar chamadas para o endpoint /api/verificar_atualizacoes para todos os aplicativos registrados na base local do updater.

A chamada envia os seguintes parâmetros:

  • Identidade
  • Setor
  • Nome do aplicativo
  • Versão atual

Ao realizar a consulta, o endpoint retorna as atualizações disponíveis para os aplicativos consultados, suas dependências e o status da versão atual (que foi passada como parâmetro).

Verificação do Checksum

  • Após o download, o updater verifica se o checksum do arquivo baixado é igual ao checksum retornado pela consulta ao endpoint /api/verificar_atualizacoes.
  • Caso os checksums não coincidam, o arquivo baixado é excluído e nenhum registro da nova versão será salvo na tabela AplicativoVersao.

Sucesso no Download

  • Se o download for bem-sucedido, os dados da nova versão serão registrados na tabela AplicativoVersao, conforme o modelo de Entidade-Relacionamento.
  • A gravação é realizada após a verificação do download para garantir que, em caso de falha, uma nova tentativa ocorra na próxima busca por atualizações.
  • Após estes procedimentos, o updater deleta o instalador da versão anterior à baixada. Exceto nos casos de aplicativos que trabalham no modo “Release/Hotfix” onde a versão só será deletada quando uma nova versão for baixada. Por outra ótica, o download bem-sucedido de uma hotfix não deleta o instalador da versão. 

Confirmação de Downloads

  • Quando um download é concluído com sucesso, uma chamada é realizada ao endpoint /api/confirmar_download para alimentar os relatórios do UpdateCenter.
  • Caso ocorra uma falha na confirmação, o campo DownloadConfirmado permanecerá com o valor false.
  • Uma rotina no updater é executada durante a busca por atualizações para enviar a confirmação de download de todos os aplicativos que estavam pendentes de envio.

Atualização Silenciosa

  • Quando a flag Silencioso é marcada no cadastro da versão no updatecenter, o campo correspondente na tabela AplicativoVersao é configurado como true. Isso indica que, ao entregar uma atualização, o updater passará um parâmetro para o sistema informando que, durante a atualização, nenhum tipo de feedback visual sobre o processo de atualização será mostrado ao usuário.

Atualização Obrigatória

  • Quando a flag Obrigatório é marcada no cadastro da versão, o campo correspondente na tabela AplicativoVersao é configurado como true.Isso indica que, ao entregar a atualização, o updater passará um parâmetro informando ao sistema que a atualização é obrigatória. Ou seja, o usuário não poderá optar por atualizar mais tarde; a atualização será realizada automaticamente.
  • Esta rotina utiliza o método /api/confirmardownloads, passando como parâmetros uma lista de versões pendentes de confirmação.

Campo InstaladorExiste

  • Este campo é alimentado com o valor true ou false com base na existência do download na pasta Downloads.
  • Se o arquivo de download for excluído da pasta, o updater define o campo como false. Quando o sistema solicitar a atualização, o updater fará o download novamente.

Status da Versão

Durante o processo de busca por atualizações, o status das versões registradas na tabela AplicativoVersao é controlado pelo campo Status. Os possíveis valores são:

  • 0 - Versão arquivada
  • 1 - Versão publicada
  • 2 - Desativação total por falha
  • 3 - Desativação parcial por falha

Desativação Total por Falha

  • Quando uma versão é desativada no UpdateCenter com o status Desativação total por falha, o updater altera o campo Status para 2 na tabela AplicativoVersao durante a busca por atualizações. A partir desse momento, essa versão não será mais sincronizada com outras máquinas, nem será entregue para atualização.
  • Como a versão foi desativada total por falha, o updater passa a enxergar novamente a versão anterior a esta como a versão de trabalho atual. Faz de novo o download do instalador e passa a buscar por atualizações a partir dela. 

Desativação Parcial por Falha

  • Quando uma versão é desativada no UpdateCenter com o status Desativação parcial por falha, o updater altera o status para 3 na tabela AplicativoVersao. Nesse caso, a versão só será entregue para outras máquinas pelo método de atualização ‘VersaoChamadora’.

Campo EntregaDisponivel

  • Este campo é alimentado com true ou false e tem como objetivo controlar se uma nova versão já pode ser entregue para atualização.

Exemplo:
Quando o updater encontra mais de uma atualização disponível durante a busca por atualizações, ele enfileira os downloads que serão feitos. O campo EntregaDisponivel só será setado como true para todas as atualizações encontradas quando o updater terminar a rotina de download para o último item da fila.

Campo ExisteApi

  • Sempre que uma nova versão é registrada na base local do updater, o sistema verifica se esta versão está registrada no UpdateCenter.
  • Caso não esteja, a rotina de sanitização excluirá esse registro posteriormente.

Sanitização

Na inicialização do updater, é realizada a sanitização da base local, com as seguintes ações:

  • Exclusão de códigos de clientes inativos (adormecidos)
  • Exclusão de aplicativos que não existem mais no UpdateCenter
  • Exclusão de aplicativos sem nenhuma versão vinculada
  • Exclusão de versões inexistentes no UpdateCenter
  • Exclusão de arquivos de download sem referência na base de dados
  • Exclusão de instaladores de versões desativadas por falha
  • Exclusão de aplicativos sem comunicação por mais de 15 dias

Versão chamadora

  • Um segundo método de atualização foi criado para mitigar os erros de abertura por versão inferior. Nesse método, quando o sistema é acessado com uma versão inferior à versão da base de dados, o sistema solicita que o updater baixe a versão atual da base.
  • O updater aciona o endpoint /api/verificar-versao-chamadora, passando como parâmetros: 
    • Código de cliente,
    • Setor,
    • Aplicativo,
    • Major,
    • Minor,
    • Revision,
    • Build

  • Neste momento, não é realizada nenhuma validação para verificar se o cliente pode ou não utilizar a versão. Essa validação será feita após a atualização da versão, no momento do acesso.
  • A versão chamadora também se comporta como um download feito pelo verificar atualizações. Realizando as rotinas validação de checksum, registro e confirmação de download, exclusão de instaladores inferiores, etc.   

Fluxo de Verificação de Versão no Updater

A cada abertura do sistema, é realizada uma interação com o updater através do método VerificarVersaoV2.

Parâmetros enviados pelo sistema:

  • Código CRM
  • Setor
  • Sistema
  • Número da versão atual

Fluxo do Método:

Consulta na base local:
O updater verifica na sua base local se existe alguma atualização baixada para o sistema e código CRM informados, cuja versão seja maior que a versão atual informada.

Critérios para considerar uma atualização:
A atualização será considerada válida se os seguintes campos estiverem devidamente preenchidos:

  • Checksum
  • InstaladorExiste
  • DisponívelParaEntrega

Seleção da atualização:

  • Se mais de uma atualização for encontrada, será selecionada a maior versão disponível.
  • Caso exista uma atualização marcada como essencial, essa será priorizada, mesmo que não seja a maior versão.

Verificação da atualização principal:
Após identificar a atualização que será entregue, o updater verifica:

  • Se o arquivo de download está realmente disponível na pasta Downloads.
  • Se existe alguma atualização dependente da atualização principal encontrada.

Verificação de dependências:
Caso sejam identificadas atualizações dependentes, as mesmas verificações descritas acima serão aplicadas também a essas dependências.

Entrega da atualização:
Ao final do processo, o updater entrega:

  • A atualização principal encontrada.
  • As dependências associadas (se existirem e estiverem na base).