Introduzione

In AEM(CQ) 5.6 è stato aggiunto il supporto workflow JMX MBean per mantenere il sistema di workflow. Il workflow è registrato nel registro di servizio OSGi come servizio MBean. Questa MBean è disponibile nella console JMX che espone le operazioni del workflow. Puoi eseguire 15 operazioni, elencate nella sezione Funzioni supportate. Alcuni dei modi per monitorare il workflow sono

  • Utilizzo dell'interfaccia utente attraverso la console Felix
  • Utilizzo di CURL
  • Creazione di un client JMX che utilizza Workflow MBean

Funzioni supportate

Workflow JMX

Eliminazione dei workflow completati

  • Dopo un certo numero di giorni dal completamento del workflow. 
  • Con un'opzione per modello dopo un certo numero di giorni dal completamento del workflow del modello.
  • Puoi anche eseguire un'esecuzione di prova per visualizzare in anteprima un workflow completo che verrebbe eliminato.

Eliminazione dei workflow attivi

  • Dopo un certo numero di giorni da quando il workflow è stato attivo. 
  • Con un'opzione per modello dopo un certo numero di giorni dall'esecuzione del workflow del modello.
  • Puoi anche eseguire un'esecuzione di prova per visualizzare in anteprima un workflow in esecuzione che verrebbe eliminato.

Conteggio del workflow datato

  • Restituisci il conteggio dei workflow datati nel sistema.
  • Con un'opzione di restituzione del conteggio dei workflow datati per modello.

Riavvia il workflow datato

  • Tutti i workflow datati nel sistema.
  • Con l'opzione di riavviare tutti i workflow datati per modello.
  • Puoi anche eseguire un'esecuzione di prova per visualizzare in anteprima un workflow datato che verrebbe riavviato.

Elenco dei modelli di workflow

  • Restituisce tutte le informazioni sul modello di workflow con id e nome nel sistema.

Conteggio del workflow in esecuzione

  • Restituisci il conteggio del workflow in esecuzione nel sistema.
  • Con un'opzione di restituire il conteggio del workflow in esecuzione per modello.

Conteggio del workflow completato

  • Restituisci il conteggio dei workflow completati nel sistema.
  • Con l'opzione di restituire il conteggio dei workflow completati per modello.

Elenco dei modelli di workflow in esecuzione

  • Elenca tutti i workflow per modello in esecuzione nel sistema.

Elenco dei modelli di workflow completati

  • Elenca tutti i workflow per modello che sono stati completati nel sistema.

Informazioni sulla coda del workflow

  • Dall'avvio del sistema recupera informazioni come lavori, nome della coda, lavori attivi, tempo medio di elaborazione, tempo medio di attesa, lavori annullati, lavori non riusciti, lavori completati, lavori elaborati e lavori in coda.

Informazioni sull'argomento del lavoro del workflow

  • Recupera informazioni sull'argomento del workflow, come nome dell'argomento, tempo medio di elaborazione, tempo medio di attesa, lavori annullati, lavori non riusciti, lavori completati e lavori elaborati

Conteggio del workflow non riuscito

  • Restituisci il conteggio dei workflow non riusciti nel sistema.
  • Con l'opzione di restituire il conteggio dei workflow non riusciti per modello.

Elenco dei modelli di workflow non riusciti

  • Elenca tutti i workflow per modello che non sono riusciti nel sistema.

Istanze non riuscite

  • Termina tutte le istanze del workflow non riuscito nel sistema.
  • Con l'opzione di terminare tutte le istanze dei workflow non riusciti per modello.
  • Esegui un funzionamento di prova per visualizzare in anteprima le istanze di un workflow non riuscito che verrebbero interrotte.
  • Riavvia tutte le istanze del workflow non riuscito nel sistema.
  • Con l'opzione di riavviare tutte le istanze dei workflow non riusciti per modello.
  • Esegui un funzionamento di prova per visualizzare in anteprima le istanze di un workflow non riuscito che verrebbe riavviato.

Elementi di lavoro non riusciti

  • Riprova gli elementi di lavoro non riusciti nel sistema.
  • Con un'opzione per riprovare tutti gli elementi di lavoro non riusciti per modello nel sistema.
  • Eseguire un funzionamento di prova per visualizzare in anteprima gli elementi di lavoro non riusciti che sarebbero stati riprovati.

Nota:

Attualmente è possibile eliminare i workflow maggiori di un giorno.

Parametri di input

Ci sono 15 operazioni in totale e alcune operazioni possono avere uno qualsiasi dei seguenti cinque parametri. Vale a dire

  • modello [facoltativo]: - Questo è facoltativo e il valore dovrebbe essere l'id del modello del workflow. Es.:- /etc/workflow/models/request_for_activation/jcr:content/model
  • numero di giorni dal completamento del workflow: - Questo è un campo obbligatorio per l'operazione purgeComplete. Questo dovrebbe essere uguale o maggiore di uno.
  • numero di giorni dall'inizio del workflow: - Questo è un campo obbligatorio per l'operazione purgeActive. Questo dovrebbe essere uguale o maggiore di uno.
  • funzionamento di prova: - Il valore può essere true o false. L'impostazione predefinita è falsa. 
  • riavvia l'istanza: - Il valore può essere true o false. L'impostazione predefinita è falsa.

Opzioni per monitorare il workflow

Ci sono tre modi per farlo, cioè

Interfaccia utente attraverso la console Felix

Utilizza il tuo browser Web preferito e accedi alla console Felix o da

  • http://localhost:4502/system/console/jmx/com.adobe.granite.workflow:type=Maintenance OPPURE Console Web > Principale > JMX > com.adobe.granite.workflow > Manutenzione
  • Seleziona una delle 15 operazioni che desideri eseguire.
  • Immetti i parametri e Invoke.
Purge Completed

cURL

Sostituire tutti i valori tra parentesi con il valore effettivo. Ad es.:- <dryRun> con true

Workflow con pulizia completa

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

Ad es.:- Il comando cURL per visualizzare in anteprima tutti i workflow nel modello request_for_activation in un giorno che verrebbe eliminato è

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

Eliminazione di workflow attivi

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

Conteggio del workflow datato

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

Riavvio del workflow datato

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

Elenco dei modelli di workflow

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

Conteggio del workflow in esecuzione

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

Conteggio del workflow completato

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

Elenco modelli di workflow in esecuzione

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

Elenco dei modelli di workflow completato

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

Informazioni sul workflow in coda

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

Informazioni sull'argomento del lavoro del workflow

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

Conteggio del workflow non riuscito

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

Elenco dei modelli di workflow non riuscito

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

Istanze non riuscite

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

Elementi di lavoro non riusciti

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

Creazione di un client JMX che utilizza Workflow MBean

Di seguito è riportato il codice jmx client di prova che esegue tutte le 15 operazioni del workflow e stampa l'output. I parametri di input sono esecuzione di prova, numero dei giorni a 1 e per tutti i modelli.

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); 
    }
}

Video

Nota:

In caso di problemi di riproduzione video, guarda su YouTube al link http://youtu.be/aXQgd-Vuqzg

Come monitorare il workflow tramite JMX

Come monitorare il workflow tramite JMX

Questo prodotto è concesso in licenza in base alla licenza di Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Unported di Creative Commons.  I post su Twitter™ e Facebook non sono coperti dai termini di Creative Commons.

Note legali   |   Informativa sulla privacy online