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).
Ao liberar uma versão no updatecenter, o vípera dispara uma notificação para os crms pertencentes àquela liberação. Esta notificação avisa que há uma nova versão disponível e entrega a url de download. Normalmente, para máquinas que não possuem bloqueios de rede que impendem a comunicação com o vípera, o download é iniciado imediatamente pós notificação. Caso hajam bloqueios de rede, o processo de atualização dependerá da busca por atualizações que ocorre no tempo configurado no updatecenter.
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).