Objectivos e Âmbito
No WPMS existem dois tipos de processos, os interactivos e os não interactivos, os processos interactivos são aqueles que apresentam e libertam os ecrãs dos utilizadores e será nestes em que utilizaremos cache, os processos não interactivos ou serviços são responsáveis por todos ostrabalhos executados na aplicação, ou em batch, neste manual serão estes últimos que vamos tratar.
O objectivo destes serviços batch, será a de conseguir dar resposta, o mais rápido possível, e sem perca de desempenho mesmo que os pedidos sejam muito elevados.
Definições importantes
ID – Número único que identifica cada serviço.
Serviço Master – Serviço responsável pela gestão de todos os serviços slaves, este serviço será sempre apresentado em primeiro lugar.
Serviço Slave – Serviço responsável por executar todos os trabalhos que lhe são atribuídos.
Trabalhos – Qualquer tipo de execução feita pelo utilizador, através de um processo não interactivo, responsável também pelo lançamento de eventos.
Eventos – São lançados pelos trabalhos, e são responsáveis pela execução do programa que lhes é associado.
Cache – Um tipo de memória que guarda alguns dados importantes para que os pedidos do utilizador serem mais rapidamente respondidos.
Como utilizar os Serviços ( ponto de vista do utilizador)
Instalação -> Administração -> Serviços [IA004]
Ao escolher esta opção do menu será apresentado o seguinte report. Neste report apresentamos uma lista de serviços, se os serviços estiverem ligados o report irá ter este aspecto.

Como pode verificar todos os serviços ligados têm um PID ( na imagem sublinhado a vermelho) o PID, e também o ícone aparece no ecrã( sublinhado a azul), este icone indica que o serviço encontra-se a correr sem problemas.
Quando não estiverem serviços activos aparecerá um ecrã sem PID e o ícon não irá aparecer.
Como pode observar na lista de serviços contem uma coluna chamada “Na Fila”, nesta coluna podemos ver quantos trabalhos estão a ser executados no serviço, o valor apresentado no serviço master é a soma dos trabalhos executados nos serviços slaves neste caso 0.

Na coluna “Em curso”, se estiver algum trabalho em curso poderemos ver há quanto tempo está em curso, para obtermos um valor mais exacto deveremos fazer refresh na pagina clicando neste botão
Ao seleccionar um dos serviços slave e clicar no botão modificar este report irá aparecer. Neste report pode mudar o servidor master, tornar o serviço automático, ou seja ao iniciar o serviço master este serviço também é inicializado, ou dinâmico, ou seja, quando é necessário este serviço arrancar este arranca dinamicamente, por exemplo o serviço encarregue das impressões só arranca quando o é gerada uma nova impressão sem que seja necessária a intervenção do utilizador para este arrancar.

Para gravar as alterações efectuadas deve clicar no botão guardar , para cancelar terá de clicar no botão atrás
.
Ainda no ecrã de listagem de serviços, quando o utilizador selecciona um serviço slave e escolhe a opção Operação Seguinte representada pelo botão , será apresentada uma lista e trabalhos que este serviço efectuou ou está por efectuar.

Nesta lista estão descriminados todos os trabalhos que foram executados ou ainda estão em execução ou ainda aqueles que estão em erro, com uma descrição do trabalho, quem foi o utilizador que o mandou executar, a data e hora o trabalho é lançado para ver quando começou terá de ver no detalhe desse trabalho, como é explicado mais a frente, e ainda o estado em que está.
Ao seleccionar um dos trabalhos e se escolher a opção visualizar . O seguinte ecrã irá aparecer.

Neste ecrã poderá ver todos os detalhes correspondentes ao trabalho que seleccionou, entre os detalhes poderá observar o tempo que demorou, o objecto método usado, entre outros, o utilizador que emitiu este trabalho, assim como o seu estado neste caso concluído.
Ainda no ecrã de listagem de trabalhos, se o utilizador pretender modificar o trabalho terá de escolher a opção modificar . E um ecrã muito semelhante ao anterior irá aparecer.

Neste ecrã pode-se mudar o serviço que executa este programa esta opção não deve ser muito cuidadosamente tomada pois poderá resultar num pior desempenho da aplicação, aconselhamos que só seja mudado depois de nos consultar acerca dessa mesma mudança, e também mudar a prioridade do trabalho com que é executado o programa que define o quando o trabalho vai ser executado, ou vai ter de esperar por trabalhos de maior prioridade.
Para guardar as alterações deve seleccionar este botão .
Mas se o utilizador pretender ver o evento lançado por um trabalho especifico deve seleccionar a opção eventos .

Ao seleccionar esta opção este ecrã vai ser exibido, poderá observar quais os eventos são chamados, e quais os programas que são chamados pelo evento e em que sequência, data da sua activação.
Quando for pretendido ver quais são os parâmetros que são passados pelo trabalho seleccionado deverá escolher a opção parâmetros
Quando se clica neste botão o seguinte ecrã irá surgir.

Neste ecrã podemos observar todos os parâmetros enviados para o objecto método assim como os seus respectivos valores.
Mas se o objectivo é ver os logs que esse trabalho produziu deverá depois de seleccionar o trabalho, escolher a opção logs e este ecrã irá ser exibido.

Neste ecrã é mostrada uma listagem de logs quer sejam estes de erro ou informação, mostrando ainda a data a que o log foi produzido, este ecrã poderá ser útil pois poderá obter informação sobre o qual a viagem que foi criada, o mesmo da reserva entre outros exemplos.
Se objectivo do utilizador é apenas iniciar um serviço tendo em conta se iniciar o serviço master vão ser iniciados todos os serviços slave definidos como automáticos, para executar esta acção deverá escolher a opção go , no ecrã de listagem de serviços

Como se pode observar na coluna do PID irá aparecer um B indicando que o serviço estará a iniciar, quando o serviço for iniciado irá ser dado um novo PID, para ver qual é o novo PID clique no botão , e poderá então ver o PID do serviço.

Mas se em vez de querer iniciar um serviço, o objectivo de o utilizador é fazer parar o serviço, lembrando que se parar o serviço pai irá parar todos os serviços activos nesse momento, para efectuar esta operação terá que seleccionar o serviço pretendido e escolher a opção stop .
No PID irá aparecer a letra “E” antes do numero, isto quando se manda parar um serviço slave, ou quando se manda parar o serviço master neste também irá aparecer a letra “E”.

Quando parar o serviço master, o PID de todos os serviços slaves irão aparecer com com a letra “K” antes do número.

Quando os serviços efectivamente pararem irão ficar com o PID a branco.
Quando pretender desligar um serviço slave definido como automático. Irá aparecer a palavra “STOPPED” quando esse serviço estiver desligado, para informar que esse serviço está parado.

Para saber os logs dos serviços, deve-se escolher a opção logs , e irá mostrar uma lista de logs , associados ao serviço seleccionado.

Nesta listagem podemos ver o nome do ficheiro de logs, a data da sua criação assim como a hora em que foi criado. Para voltar atrás deverá escolher a opção atrás .
Para visualizar os logs de um determinado serviço de mostrará o conteúdo do ficheiro de log, numa nova janela, como mostra a figura em baixo

Para apagar um log especifico deverá seleccionar um log e escolher a opção apagar .
Como Activar Cache de Dados ( aspectos técnicos)
Para conseguir que a cache de dados esteja activa na sua aplicação, deverá seguir as opções do menu que se seguem.
Instalação -> Base -> Servidores [IA004]
Neste ecrã irá ser apresentada uma lista de servidores existentes na sua aplicação. Poderá

Poderá obter a informação se o servidor está parametrizado se o servidor está parametrizado para fazer cache de dados. Neste caso está desactivada
Para activar a cache de dados deve-se seleccionar o servidor desejado para fazer cache de dados e escolher a opção modificar , e o seguinte ecrã irá aparecer. Neste

Neste ecrã basta accionar o switch em Cache de Dados, e de seguida clicar em confirmar dados
Como Funcionam Os Serviços ( aspectos técnicos)
O programa que gere os serviços é o GnBatch.php, que se encontra na raiz da aplicação.
Antes de se iniciarem estes loops são efectuadas algumas validações, essas validações são efectuadas pela função basicChecks, validando o servidor. Nesta função são ainda atribuídos os PID’s a cada serviço, os PID’s são identificadores dos serviços, normalmente são valores que identificam, com algumas excepções, que servem para parar e começar os serviços como é explicado mais a frente. Neste ponto será inicializada a cache para os serviços interactivos, fazendo uma chamada ao startCache do XMLServer.php, Verificando que a variável global MC existe e está instanciada. A variável global MC, é a variável responsável de guardar todos os dados da cache.
Quando inicia os dois primeiros loops o programa faz um fork para diferenciar entre serviço master e os serviços slaves, só serão iniciados os serviços marcados com a flag automático. Neste loop será também desactivada a variável MC, para que seja assegurado que só os serviços interactivos terão cache.
Dito isto é de fácil compreensão que a hierarquia dos serviços e composta do seguinte modo, temos um serviço master, este têm serviços slaves por sua vez cada serviço slave tem uma fila de trabalhos associada.
O master tem dois loops que servem para manter o slaves sempre activos, cada slave por sua vez têm também dois loops que servem para executar os trabalhos que têm na sua fila.
Estes loops são controlados através de algumas definições.
Temos a variável sleeptime, esta variável controla de quanto em quanto tempo é feito um update no serviço em questão.
Temos ainda dois comandos que são usados pelo utilizador que podem intervir no funcionamento dos serviços. O comando de start e o comando end, o comando start quando aplicado no serviço master, inicia este e depois todos os slaves que estão marcados como sendo automáticos, quando aplicado num serviço slave irá iniciar este e só este serviço, o campo PID é inicializado com a letra “B” e todos os serviços que tiverem estas letras serão iniciados e são-lhes atribuídos novos números PID. O comando stop por sua vez quando usado no serviço master pára primeiro todos os slaves e só depois o serviço master pára, quando aplicado em um serviço slave e só o serviço pretendido, isto é efectuado através de mudanças no PID do serviço para parar um serviço não automático este modifica acrescentando a letra “E” ao numero de PID, quando o serviço é automático o PID irá ser substituído pela palavra STOPPED, este processo de paragem dos serviços é de responsabilidade de uma função chamada time2Go.
Outra maneira de controlar os loops, é a partir de uma variável chamada maxcycle, como o sleeptime é uma variável global, alguns serviços podem ser marcados como pela flag managecycle, estes só poderão fazer um numero de ciclos que for parametrizado na variável maxcycle, ao chegar ao ultrapassar o numero de ciclos guardado na variável maxcycle este serviços irão ser parados.