Introdução

No AEM(CQ) 5.6, foi adicionado suporte ao Workflow JMX MBean para manter o sistema de fluxo de trabalho. O Workflow é registrado no Registro de serviço OSGi como serviço MBean. Este MBean está disponível no Console JMX, que expõe as operações do fluxo de trabalho. Há 15 operações que podem ser executadas e que estão listadas na seção Recursos suportados. Algumas das maneiras de monitorar o fluxo de trabalho são

  • Usando a interface do usuário por meio do console Felix
  • Usando CURL
  • Criando clientes JMX que usam Workflow MBean

Recursos suportados

Workflow JMX

Eliminar fluxos de trabalho concluídos

  • Após um determinado número de dias desde que o fluxo de trabalho foi concluído. 
  • Com uma opção por modelo após um determinado número de dias desde que o fluxo de trabalho do modelo foi concluído.
  • Também pode executar um exercício de simulação para visualizar um fluxo de trabalho concluído que seria eliminado.

Eliminar fluxos de trabalho ativos

  • Após um determinado número de dias desde que o fluxo de trabalho esteve ativo. 
  • Com uma opção por modelo após um determinado número de dias desde que o fluxo de trabalho do modelo foi executado.
  • Também pode executar um exercício de simulação para visualizar um fluxo de trabalho em execução que seria eliminado.

Fluxo de trabalho de contagem de obsoletos

  • Retorna a contagem de fluxos de trabalho obsoletos no sistema.
  • Com uma opção para retornar a contagem de fluxos de trabalho obsoletos por modelo.

Reiniciar fluxo de trabalho obsoleto

  • Todos os fluxos de trabalho obsoletos no sistema.
  • Com uma opção para reiniciar todos os fluxos de trabalho obsoletos por modelo.
  • Também pode executar um exercício de simulação para visualizar um fluxo de trabalho obsoleto que seria reiniciado.

Lista de modelos de fluxo de trabalho

  • Retorna todas as informações do modelo de fluxo de trabalho com ID e nome no sistema.

Contagem de fluxos de trabalho em execução

  • Retorna a contagem de fluxos de trabalho em execução no sistema.
  • Com uma opção para retornar a contagem de fluxos de trabalho em execução por modelo.

Contagem de fluxos de trabalho concluído

  • Retorna a contagem de fluxos de trabalho concluídos no sistema.
  • Com uma opção para retornar a contagem de fluxos de trabalho concluídos por modelo.

Lista de modelos de fluxos de trabalho em execução

  • Lista toda a contagem de fluxos de trabalho por modelo que estão em execução no sistema.

Lista de modelo de fluxos de trabalho concluídos

  • Lista toda a contagem de fluxos de trabalho por modelo que estão concluídos no sistema.

Informações da fila do fluxos de trabalho

  • A partir do momento em que o sistema foi iniciado, recupere informações como trabalhos, nome da fila, tarefas ativas, tempo médio de processamento, tempo médio de espera, tarefas canceladas, tarefas com falha, tarefas concluídas, tarefas processadas e tarefas na fila.

Informações sobre o fluxo de trabalho de tópicos de tarefas

  • Recupera informações do fluxo de trabalho do tópico de tarefa, como nome do tópico, tempo médio de processamento, tempo médio de espera, tarefas canceladas, tarefas com falha, tarefas concluídas e tarefas processadas

Contagem de fluxos de trabalho com falha

  • Retorna a contagem de fluxos de trabalho com falha no sistema.
  • Com uma opção para retornar a contagem de fluxos de trabalho com falha por modelo.

Lista de modelos de fluxos de trabalho com falha

  • Lista toda a contagem de fluxos de trabalho por modelo que falharam no sistema.

Instâncias com falha

  • Encerrar todas as instâncias de fluxo de trabalho com falha no sistema.
  • Com uma opção para encerrar todas as instâncias de fluxo de trabalho com falha por modelo.
  • Executa um exercício de simulação para visualizar as instâncias de fluxo de trabalho com falha que seriam encerradas.
  • Reinicia todas as instâncias de fluxo de trabalho com falha no sistema.
  • Com uma opção para reiniciar todas as instâncias de fluxos de trabalho com falha por modelo.
  • Executa um exercício de simulação para visualizar instâncias de fluxo de trabalho com falha que seriam reiniciadas.

Itens de trabalho com falha

  • Tenta novamente itens de trabalho que falharam no sistema.
  • Com uma opção para repetir todos os itens de trabalho com falha por modelo no sistema.
  • Executa um exercício de simulação para visualizar os itens de trabalho com falha que seriam repetidos.

Observação:

Atualmente, você pode eliminar os fluxos de trabalho que são maiores que um dia.

Parâmetros de entrada

Há 15 operações no total e algumas operações podem ter qualquer um dos cinco parâmetros a seguir. A saber

  • modelo [opcional]: - isso é opcional e o valor deve ser o ID do modelo de fluxo de trabalho. Ex: - /etc/workflow/models/request_for_activation/jcr:content/model
  • número de dias desde que o fluxo de trabalho foi concluído: - este é um campo obrigatório para a operação purgeCompleted. Deve ser igual ou maior que um.
  • número de dias desde o início do fluxo de trabalho: - este campo é obrigatório para a operação purgeActive. Deve ser igual ou maior que um.
  • exercício de simulação: - o valor pode ser verdadeiro ou falso. O valor padrão é falso. 
  • reiniciar a instância: - o valor pode ser verdadeiro ou falso. O valor padrão é falso.

Opções para monitorar o fluxo de trabalho

Há três maneiras, a saber

Interface do usuário através do console Felix

Utilizando o seu navegador web favorito, acesse o console felix, seja por

  • http://localhost:4502/system/console/jmx/com.adobe.granite.workflow:type=Maintenance OU Console web > Principal > JMX > com.adobe.granite.workflow > Manutenção
  • Selecione quaisquer das 15 operações que você gostaria de executar.
  • Insira os parâmetros e clique em Invoke.
Purge Completed

cURL

Substitua todos os valores entre chevrons pelo valor real. Ex:- <dryRun> com verdadeiro

Eliminar fluxos de trabalho concluídos

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>&number of days since workflow has been completed=<numberOfDays>&dry run=<dryRun>" http://<host>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/purgeCompleted/java.lang.String,java.lang.Integer,java.lang.Boolean

Ex: - o comando cURL para visualizar todo o fluxo de trabalho que está no modelo request_for_activation em um dia que seria eliminado é

curl -u admin:admin -X POST --data "model [optional]=/etc/workflow/models/request_for_activation/jcr:content/model&number of days since workflow has been completed=1&dry run=true" http://localhost:4502/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/purgeCompleted/java.lang.String,java.lang.Integer,java.lang.Boolean

Eliminar fluxos de trabalho ativos

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>&number of days since workflow started=<numberOfDays>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/purgeActive/java.lang.String,java.lang.Integer,java.lang.Boolean

Contar fluxos de trabalho obsoletos

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/countStaleWorkflows/java.lang.String

Reiniciar fluxos de trabalho obsoletos

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/restartStaleWorkflows/java.lang.String,java.lang.Boolean

Lista de modelos de fluxo de trabalho

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/fetchModelList/

Contar fluxos de trabalho em execução

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/countRunningWorkflows/java.lang.String

Contar fluxos de trabalho concluídos

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/countCompletedWorkflows/java.lang.String

Lista de modelos de fluxos de trabalho em execução

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/listRunningWorkflowsPerModel/

Lista de modelos de fluxos de trabalho concluídos

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/listCompletedWorkflowsPerModel/

Informações da fila de fluxos de trabalho

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnWorkflowQueueInfo/

Informações sobre o tópico de tarefas de fluxos de trabalho

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnWorkflowJobTopicInfo/

Contar fluxos de trabalho com falha

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnFailedWorkflowCount/java.lang.String

Lista de modelo de fluxos de trabalho com falha

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnFailedWorkflowCountPerModel/

Instâncias com falha

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>&restart the instance=<restartInstance>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/terminateFailedInstances/boolean,boolean,java.lang.String

Itens de trabalho com falha

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/retryFailedWorkItems/boolean,java.lang.String

Criando clientes JMX que usam Workflow MBean

Abaixo está um código exemplo de cliente jmx que executa todas as 15 operações de fluxo de trabalho e imprime o resultado. Os parâmetros de entrada são exercício de simulação, numberOfDays para 1 e para todos os modelos.

import javax.management.DynamicMBean;
import java.util.Hashtable;

import javax.management.openmbean.TabularData;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeType;


public class WorkflowJMXSampleClient {

	public static void main(String[] args) throws Exception{
		String userid = "admin";
		String password = "admin";
		String serverUrl = "service:jmx:rmi:///jndi/rmi://localhost:9000/jmxrmi";
		String OBJECT_NAME = "com.adobe.granite.workflow:type=Maintenance";
		String[] buffer = new String[] { userid, password };
		Hashtable<String, String[]> attributes = new Hashtable<String, String[]>();
		attributes.put("jmx.remote.credentials", (String[]) buffer);		
		MBeanServerConnection server = (MBeanServerConnection) JMXConnectorFactory.connect(new JMXServiceURL(serverUrl), attributes).getMBeanServerConnection();
		ObjectName name = new ObjectName(OBJECT_NAME);
		WorkflowMBean workflow = (WorkflowMBean) MBeanServerInvocationHandler.newProxyInstance(server, name, WorkflowMBean.class,false);

		/* Execute all the methods*/
		String model = "";
		Integer numberOfDays = 1 ;
		Boolean dryRun = true;
		boolean restartInstance = false;

		logTabularData("purgeCompleted",workflow.purgeCompleted( model, numberOfDays, dryRun));
		logTabularData("purgeActive",workflow.purgeActive( model,  numberOfDays,  dryRun));
		logCount("countStaleWorkflows",workflow.countStaleWorkflows( model));
		logTabularData("restartStaleWorkflows",workflow.restartStaleWorkflows( model, dryRun) );
		logTabularData("fetchModelList",workflow.fetchModelList() );
		logCount("countRunningWorkflows",workflow.countRunningWorkflows( model) );
		logCount("countCompletedWorkflows",workflow.countCompletedWorkflows( model) );
		logTabularData("listRunningWorkflowsPerModel",workflow.listRunningWorkflowsPerModel() );
		logTabularData("listCompletedWorkflowsPerModel",workflow.listCompletedWorkflowsPerModel() );
		logTabularData("returnWorkflowQueueInfo",workflow.returnWorkflowQueueInfo() );
		logTabularData("returnWorkflowJobTopicInfo",workflow.returnWorkflowJobTopicInfo() );
		logCount("returnFailedWorkflowCount",workflow.returnFailedWorkflowCount( model) );
		logTabularData("returnFailedWorkflowCountPerModel",workflow.returnFailedWorkflowCountPerModel() );
		logTabularData("terminateFailedInstances",workflow.terminateFailedInstances( restartInstance, dryRun, model) );
		logTabularData("retryFailedWorkItems",workflow.retryFailedWorkItems( dryRun, model)); 
		
	}
	
	public static void logTabularData(String operation, TabularData data) {
		System.out.println("-----Operation "+operation+"--------------");
		try {
			System.out.println("Number of records "+data.size());
			int counter = 0;
			for (Object o : data.values()) {
				System.out.println("Record Number "+(++counter));
				CompositeData row = (CompositeData) o;
			    CompositeType type = row.getCompositeType();
			    	for (Object k : type.keySet()) {
			    		String key = k.toString();
						System.out.println(key + " -- "+ row.get(key));
			    }
			}
		} catch (Exception e) {
			System.out.println("-----Error during operation "+operation+"--------------"+e.getMessage());		
		}
		System.out.println("-----Completed "+operation+"--------------");		
		System.out.println("       ");		

	}

	public static void logCount(String operation, int counter) {
		System.out.println("--------------"+operation+"--------------");
		try {
			System.out.println("count is "+counter);
		} catch (Exception e) {
			System.out.println("-----Error during operation "+operation+"--------------"+e.getMessage());		
		}
		System.out.println("-----Completed "+operation+"--------------");		
		System.out.println("       ");		
	}
	
	public static interface WorkflowMBean extends DynamicMBean {
		public TabularData purgeCompleted(String model,Integer numberOfDays,Boolean dryRun);
		public TabularData purgeActive(String model, Integer numberOfDays, Boolean dryRun);
		public int countStaleWorkflows(String model);
		public TabularData restartStaleWorkflows(String model,Boolean dryRun) ;
		public TabularData fetchModelList() ;
		public int countRunningWorkflows(String model) ;
		public int countCompletedWorkflows(String model) ;
		public TabularData listRunningWorkflowsPerModel() ;
		public TabularData listCompletedWorkflowsPerModel() ;
		public TabularData returnWorkflowQueueInfo() ;
		public TabularData returnWorkflowJobTopicInfo() ;
		public int returnFailedWorkflowCount(String model) ;
		public TabularData returnFailedWorkflowCountPerModel() ;
		public TabularData terminateFailedInstances(boolean restartInstance,boolean dryRun,String model) ;
		public TabularData retryFailedWorkItems(boolean dryRun,String model); 
    }
}

Vídeo

Observação:

Se houver problema na reprodução do vídeo, assista no YouTube em http://youtu.be/aXQgd-Vuqzg

Como monitorar o Workflow via JMX

Como monitorar o Workflow via JMX

Esta obra está licenciada sob uma licença não adaptada da Creative Commons Attribution-Noncommercial-Share Alike 3.0  As publicações do Twitter™ e do Facebook não são cobertas pelos termos do Creative Commons.

Avisos legais   |   Política de privacidade online