From 741c061e793af317555788442dbb69c36d59c0d7 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Fri, 13 May 2016 16:55:07 +0000 Subject: [PATCH] refs 2521: Explore the possibility to port the StatMan interface onto Dataminer https://support.d4science.org/issues/2521 Added DataMiner Exception visualization git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/data-miner-manager@128606 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/DataMinerManagerController.java | 10 +- .../client/bean/ComputationStatus.java | 127 ++++++++---------- .../experiments/ComputationStatusPanel.java | 16 +-- .../server/smservice/SClient4WPS.java | 116 +++++++++------- .../exception/DataMinerServiceException.java | 37 +++++ 5 files changed, 166 insertions(+), 140 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/shared/exception/DataMinerServiceException.java diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java index 03f81f8..e940c20 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java @@ -286,13 +286,11 @@ public class DataMinerManagerController { private void startComputationRequest( final StartComputationExecutionRequestEvent event) { - final StatusMonitor monitor = new StatusMonitor(); DataMinerPortletServiceAsync.INSTANCE.startComputation(event.getOp(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { - monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session!"); EventBusProvider.INSTANCE @@ -308,7 +306,6 @@ public class DataMinerManagerController { @Override public void onSuccess(ComputationId computationId) { - monitor.hide(); if (computationId == null) UtilsGXT3.alert("Error", "Failed start computation " @@ -333,13 +330,11 @@ public class DataMinerManagerController { private void cancelComputationRequest( CancelComputationExecutionRequestEvent event) { final ComputationId computationId = event.getComputationId(); - final StatusMonitor monitor = new StatusMonitor(); DataMinerPortletServiceAsync.INSTANCE.cancelComputation(computationId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { - monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session!"); EventBusProvider.INSTANCE @@ -355,7 +350,6 @@ public class DataMinerManagerController { @Override public void onSuccess(String result) { - monitor.hide(); Log.debug("Computation Deleted!"); } @@ -364,13 +358,12 @@ public class DataMinerManagerController { private void resubmitComputationRequest( final ResubmitComputationExecutionRequestEvent event) { - final StatusMonitor monitor = new StatusMonitor(); + DataMinerPortletServiceAsync.INSTANCE.resubmit( event.getItemDescription(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { - monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session!"); EventBusProvider.INSTANCE @@ -385,7 +378,6 @@ public class DataMinerManagerController { @Override public void onSuccess(ComputationId result) { - monitor.hide(); if (result == null) UtilsGXT3 .alert("Error", diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java index 94922d9..fa3e12a 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java @@ -3,40 +3,32 @@ package org.gcube.portlets.user.dataminermanager.client.bean; import java.io.Serializable; import java.util.Date; -import org.gcube.portlets.user.dataminermanager.shared.data.output.Resource; +import org.gcube.portlets.user.dataminermanager.shared.exception.DataMinerServiceException; /** * - * @author Giancarlo Panichi - * email: g.panichi@isti.cnr.it + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it * */ public class ComputationStatus implements Serializable { - /** - * - */ private static final long serialVersionUID = -1943128398882978439L; - - public enum Status{ - PENDING, - RUNNING, - COMPLETE, - FAILED + + public enum Status { + ACCEPTED, RUNNING, COMPLETE, FAILED }; - private double percentage; private Status status; private Date endDate; private String message; - private Resource errResource; - - + private DataMinerServiceException error; + public ComputationStatus() { - this.status = Status.PENDING; + this.status = Status.ACCEPTED; } - + public ComputationStatus(double percentage) { super(); this.percentage = percentage; @@ -48,88 +40,83 @@ public class ComputationStatus implements Serializable { this.percentage = percentage; this.status = status; } - - public double getPercentage() { - return percentage; - } - public void setPercentage(float percentage) { - this.percentage = percentage; - } - - public Status getStatus() { - return status; - } - - public void setStatus(Status status) { - this.status = status; + public ComputationStatus(DataMinerServiceException error) { + super(); + this.percentage = 100f; + this.status = Status.FAILED; } public boolean isComplete() { return this.status == Status.COMPLETE; } - + public boolean isFailed() { return this.status == Status.FAILED; } - + public boolean isRunning() { return this.status == Status.RUNNING; } - - public boolean isPending() { - return this.status == Status.PENDING; + + public boolean isAccepted() { + return this.status == Status.ACCEPTED; } + public boolean isPaused() { + return false; + //return this.status == Status.FAILED; + } + public boolean isTerminated() { - return status==Status.COMPLETE || status==Status.FAILED; + return status == Status.COMPLETE || status == Status.FAILED; } - - /** - * @param endDate the endDate to set - */ - public void setEndDate(Date endDate) { - this.endDate = endDate; + + public double getPercentage() { + return percentage; } - - /** - * @return the endDate - */ + + public void setPercentage(double percentage) { + this.percentage = percentage; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + public Date getEndDate() { return endDate; } - - /** - * @param message the message to set - */ - public void setMessage(String message) { - this.message = message; + + public void setEndDate(Date endDate) { + this.endDate = endDate; } - - /** - * @return the message - */ + public String getMessage() { return message; } - - public Resource getErrResource() - { - return errResource; + + public void setMessage(String message) { + this.message = message; } - - public void setErrResource(Resource errRes) - { - this.errResource= errRes; + + public DataMinerServiceException getError() { + return error; + } + + public void setError(DataMinerServiceException error) { + this.error = error; } @Override public String toString() { return "ComputationStatus [percentage=" + percentage + ", status=" + status + ", endDate=" + endDate + ", message=" + message - + ", errResource=" + errResource + "]"; + + ", error=" + error + "]"; } - - - + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java index f5a8342..af5f8bb 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java @@ -16,7 +16,6 @@ import org.gcube.portlets.user.dataminermanager.shared.data.computations.Computa import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sencha.gxt.core.client.util.Margins; @@ -148,12 +147,10 @@ public class ComputationStatusPanel extends SimpleContainer { } else if (computationStatus.isFailed()) { Log.debug("Computation is Failed"); String errorMessage; - if (computationStatus.getErrResource() == null - || computationStatus.getErrResource().getDescription() == null) { + if (computationStatus.getError() == null) { errorMessage = new String("Computation Failed!"); } else { - errorMessage = computationStatus.getErrResource() - .getDescription(); + errorMessage = computationStatus.getError().getLocalizedMessage(); } Info.display("Failed", "The computation " + computationId.getId() + " of " @@ -206,14 +203,15 @@ public class ComputationStatusPanel extends SimpleContainer { */ private void updateStatus(ComputationStatus computationStatus) { Log.debug("Conputation Status Panel ::Update Status "); - if (computationStatus.getStatus() == Status.PENDING) - progressBar.updateText("Pending..."); + if (computationStatus.getStatus().compareTo(Status.ACCEPTED)==0) + progressBar.updateText("Accepted..."); else { double percentage = computationStatus.getPercentage(); - progressBar.updateProgress(percentage / 100, "Running, " - + NumberFormat.getFormat("0.00").format(percentage) + progressBar.updateProgress(percentage/100, "Running, " + + percentage + "% Complete"); } + forceLayout(); } private class ComputationTimer extends Timer { diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java index b3bb968..e4b3a9a 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java @@ -53,6 +53,7 @@ import org.gcube.portlets.user.dataminermanager.shared.data.output.ImageResource import org.gcube.portlets.user.dataminermanager.shared.data.output.MapResource; import org.gcube.portlets.user.dataminermanager.shared.data.output.ObjectResource; import org.gcube.portlets.user.dataminermanager.shared.data.output.Resource; +import org.gcube.portlets.user.dataminermanager.shared.exception.DataMinerServiceException; import org.gcube.portlets.user.dataminermanager.shared.parameters.ObjectParameter; import org.gcube.portlets.user.dataminermanager.shared.parameters.Parameter; import org.gcube.portlets.user.dataminermanager.shared.parameters.TabularListParameter; @@ -846,64 +847,71 @@ public class SClient4WPS extends SClient { Status.FAILED, 100f); } else { - int status = statusType.getProcessStarted() == null ? -1 - : statusType.getProcessStarted() - .getPercentCompleted(); - /* - * String processStarted = - * statusType.getProcessStarted() == null ? null - * : - * statusType.getProcessStarted().getStringValue - * (); - */ String failure = statusType.getProcessFailed() == null ? null : statusType.getProcessFailed() .getExceptionReport() .toString(); - String accepted = statusType - .getProcessAccepted() == null ? null - : statusType.getProcessAccepted(); - String success = statusType - .getProcessSucceeded() == null ? null - : statusType.getProcessSucceeded(); - String paused = statusType.getProcessPaused() == null ? null - : statusType.getProcessPaused() - .getStringValue(); - - if ((failure != null && failure.length() > 0) - || (paused != null && paused.length() > 0)) { - logger.debug("WPS FAILURE: " + failure - + " OR PAUSED: " + paused); + if ((failure != null && !failure.isEmpty())) { + logger.debug("WPS FAILURE: " + failure); computationStatus = new ComputationStatus( - Status.FAILED, 100f); + new DataMinerServiceException( + failure)); } else { - if (accepted != null - && accepted.length() > 0) { - logger.debug("WPS ACCEPTED"); + String paused = statusType + .getProcessPaused() == null ? null + : statusType.getProcessPaused() + .getStringValue(); + if (paused != null && !paused.isEmpty()) { + logger.debug("WPS PAUSED: " + paused); computationStatus = new ComputationStatus( - Status.PENDING, 0f); + new DataMinerServiceException( + paused)); } else { + String success = statusType + .getProcessSucceeded() == null ? null + : statusType + .getProcessSucceeded(); + if (success != null - && success.length() > 0) { + && !success.isEmpty()) { logger.debug("WPS SUCCESS"); computationStatus = new ComputationStatus( Status.COMPLETE, 100f); } else { - if (status >= 0) { - Float statusd = (float) status; - try { - statusd = Float - .parseFloat(statusType - .getProcessStarted() - .getStringValue()); - } catch (Exception e) { + String accepted = statusType + .getProcessAccepted() == null ? null + : statusType + .getProcessAccepted(); + if (accepted != null + && !accepted.isEmpty()) { + logger.debug("WPS ACCEPTED"); + computationStatus = new ComputationStatus( + Status.ACCEPTED, 0f); + } else { + int status = statusType + .getProcessStarted() == null ? -1 + : statusType + .getProcessStarted() + .getPercentCompleted(); + + if (status >= 0) { + Float statusd = (float) status; + try { + statusd = Float + .parseFloat(statusType + .getProcessStarted() + .getStringValue()); + } catch (Exception e) { + + } + logger.debug("WPS STATUS:" + + statusd); + computationStatus = new ComputationStatus( + Status.RUNNING, + statusd); + } else { } - logger.debug("WPS STATUS:" - + statusd); - computationStatus = new ComputationStatus( - Status.RUNNING, statusd); - } else { } } } @@ -1281,18 +1289,22 @@ public class SClient4WPS extends SClient { } } - - ComputationValueBuilder computationValueBuilder=new ComputationValueBuilder(inputValueParameters); - LinkedHashMap inputParameters = computationValueBuilder.create(); - computationValueBuilder=new ComputationValueBuilder(outputValueParameters); - LinkedHashMap outputParameters = computationValueBuilder.create(); - + + ComputationValueBuilder computationValueBuilder = new ComputationValueBuilder( + inputValueParameters); + LinkedHashMap inputParameters = computationValueBuilder + .create(); + computationValueBuilder = new ComputationValueBuilder( + outputValueParameters); + LinkedHashMap outputParameters = computationValueBuilder + .create(); + ComputationData computationData = new ComputationData(computationId, inputParameters, outputParameters, operatorDescritpion, startDate, endDate, status, executionType, vre); - - logger.debug("ComputationData: "+computationData); + + logger.debug("ComputationData: " + computationData); return computationData; - } + } } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/shared/exception/DataMinerServiceException.java b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/exception/DataMinerServiceException.java new file mode 100644 index 0000000..fb667ba --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/exception/DataMinerServiceException.java @@ -0,0 +1,37 @@ +package org.gcube.portlets.user.dataminermanager.shared.exception; + +/** + * DataMiner Service Exception + * + * @author "Giancarlo Panichi" + * + */ +public class DataMinerServiceException extends + ServiceException { + + private static final long serialVersionUID = -4831171355042165166L; + + /** + * + */ + public DataMinerServiceException() { + super(); + } + + /** + * @param message + */ + public DataMinerServiceException(String message) { + super(message); + } + + /** + * + * @param message + * @param t + */ + public DataMinerServiceException(String message, Throwable t) { + super(message, t); + } + +}