É frequentemente necessário armazenar valores para um grupo de recursos em que os integrantes deste grupo podem ser dinâmicos e alterados durante o período do cálculo. No exemplo cálculo obrigatório a seguir, é necessário executar um cálculo intermediário em cada um dos recursos para obter o resultado agregado final.
A seguir estão alguns exemplos:
Nestes exemplos, sites são recursos que têm incidentes associados a eles.
Um servidor é um recurso cujo percentual de disponibilidade deve ser avaliado.
Nesse caso, um tipo de transação é um recurso com eventos de falha associados a ele. Para cada tipo de transação, um contador de falhas é armazenado como um resultado intermediário e a quantidade de diferentes tipos de transação com mais de X falhas é contabilizada.

Exemplo:
Para o requisito de cálculo a seguir:
Calcular a porcentagem de disponibilidade de um sistema que é composto de um agrupamento de servidores. O sistema é considerado disponível somente quando todos os servidores subjacentes estiverem disponíveis.
O design da solução será implementado como segue:
A disponibilidade do sistema é avaliada pela disponibilidade de seus recursos de agrupamento adjacentes. Nesse caso, é necessário gerenciar e armazenar o status de todos os recursos agrupados para avaliar o status do sistema o tempo todo.
Para fazer isso, a fórmula é necessária para manter um mapa (mapa ServerAvailabilityIndicators no código de exemplo a seguir) que tem uma entrada para cada um dos recursos monitorados. Como todos os objetos do mapa requerem um campo chave para fazer referência ao valor associado, este mapa terá o indicador de recursos como a chave (que é a ID do recurso) e o valor será o componente de status. Sempre que o status de um componente é alterado, a entrada relevante do mapa deve ser alterada. De acordo com o evento de disponibilidade, a fórmula atualizará o status do recurso relevante no mapa e irá reavaliar o status do sistema adequadamente.
Uma vez que os recursos monitorados podem ser alterados (alguns podem ser removidos e outros podem ser adicionados durante o período de cálculo), isto deve ser gerenciado dentro da fórmula adicionando uma função que identifica a alteração e atualiza o mapa do componente monitorado por meio da adição de uma nova entrada para um novo componente ou da exclusão de uma entrada, se um componente foi removido.
O OnRegistration é o manipulador de eventos que gerencia um registro de evento e é acionado quando ocorre uma alteração nos recursos monitorados. Tais alterações podem ocorrer como resultado da confirmação de um recurso (ou o conjunto de alterações) que pode gerar alterações nos recursos incluídos no cálculo de acordo com o método de registro da fórmula.
Durante cada registro é necessário atualizar o mapa que contém o status do recurso com as alterações necessárias. Ou seja, comparar o mapa usado para manter o status do recurso com o mapa que contém os recursos no momento em que o registro é executado (com base no método de registro), bem como incluir todos os recursos que foram adicionados ou excluir os recursos que foram removidos.
O procedimento do OnRegistration deve executar uma função que compara os recursos monitorados com os novos recursos alocados a fim de estruturar os recursos monitorados adequadamente.
O objeto Contexto tem um conjunto de métodos que compara os métodos de registro. Eles retornam um mapa com todos os recursos que são parte dos recursos de acordo com o método de registro.
No exemplo a seguir, o registro da fórmula é ByContractParty e o mesmo método é usado pelo Context.ResourcesOfContractParty. Isso retorna um mapa com todos os recursos que são parte deste conjunto no momento do registro.
Para comparar os dois mapas, é necessário realizar a iteração por meio dos mapas em paralelo. A iteração dos mapas é feita usando a declaração For each. Essa declaração permite a iteração dos valores de um mapa. Assim, é necessário outro mapa como um espelho ao mapa de status para poder fazer a iteração dos recursos e não de seus valores de status. Essa declaração reitera os valores de um mapa e não de suas chaves. Portanto, é necessário um mapa adicional que contenha as IDs como uma chave e também como um valor. Além disso, mantenha o mapa de espelhamento para refletir, de modo contínuo, o mapa de status, de modo que ele sempre contenha o mesmo conjunto de recursos. Isso significa que quando o mapa de status for atualizado, o mapa de espelhamento também deverá ser atualizado.
A figura a seguir mostra o conceito dos mapas de espelhamento.

Exemplo:
Dim ServerAvailabilityIndicators
Dim MonitoredServers
Set ServerAvailabilityIndicators=CreateObject("SlalomMap.Map")
Set MonitoredServers=CreateObject("SlalomMap.Map")
Sub OnRegistration(dispatcher)
dispatcher.RegisterByContractParty "OnAvailabilityEvent",_
"Availability Event", "SAP Production Server"
Dim AllocatedServers
Set AllocatedServers = Context.ResourcesOfContractParty("SAP Production Server")
UpdateMonitoredServers AllocatedServers
End Sub
Sub UpdateMonitoredServers(allocatedServers)
Servidor Dim
Para cada servidor no allocatedServers
If Not MonitoredServers.Exist(Server) Then
MonitoredServers(Server) = Server
ServerAvailabilityIndicators(Server)=True
End If
Próximo
Para cada servidor no MonitoredServers
If Not allocatedServers.Exist(Server) Then
MonitoredServers.Erase Server
ServerAvailabilityIndicators.Erase Server
End If
Próximo
End Sub
Exemplo:
A função a seguir mostra como o mapa de espelhamento é usado para iteração do mapa de status quando necessário para avaliar o status de todo o sistema com base no status de cada recurso monitorado.
Neste exemplo, o sistema é considerado disponível se todos os recursos estiverem disponíveis. Ter um único componente desativado é suficiente para considerar o sistema desativado:
Function SystemAvailability
Servidor Dim
Para cada servidor no MonitoredServers
If ServerAvailabilityIndicators(Server) = DOWN then
SystemAvailability=DOWN
Função de saída
End if
Próximo
End Function
Um exemplo completo de lógica de negócios com tratamento dinâmico do recurso é descrito no exemplo de padrões de design a seguir.
| Copyright © 2012 CA. Todos os direitos reservados. | Enviar email à CA Technologies sobre este tópico |