diff --git a/distro/changelog.xml b/distro/changelog.xml index 09a72e9..882032c 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,6 +1,9 @@ + + added accounting on algorithm execution + - service interface classes movedo to wps project + service interface classes moved to wps project First Release diff --git a/pom.xml b/pom.xml index 6357b88..5868f71 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ org.gcube.dataanalysis dataminer - 1.5.0-SNAPSHOT + 1.5.1-SNAPSHOT dataminer An e-Infrastructure service providing state-of-the art DataMining algorithms and ecological modelling approaches under the Web Processing Service (WPS) standard. @@ -140,6 +140,13 @@ xercesImpl 2.11.0 + + + org.gcube.accounting + accounting-lib + [3.0.0-SNAPSHOT,4.0.0-SNAPSHOT) + provided + diff --git a/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/AbstractEcologicalEngineMapper.java b/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/AbstractEcologicalEngineMapper.java index b20c810..245665f 100644 --- a/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/AbstractEcologicalEngineMapper.java +++ b/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/AbstractEcologicalEngineMapper.java @@ -4,12 +4,17 @@ import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.UUID; +import org.gcube.accounting.datamodel.UsageRecord.OperationResult; +import org.gcube.accounting.datamodel.usagerecords.JobUsageRecord; +import org.gcube.accounting.persistence.AccountingPersistence; +import org.gcube.accounting.persistence.AccountingPersistenceFactory; import org.gcube.dataanalysis.ecoengine.configuration.AlgorithmConfiguration; import org.gcube.dataanalysis.ecoengine.datatypes.StatisticalType; import org.gcube.dataanalysis.ecoengine.interfaces.ComputationalAgent; @@ -36,6 +41,7 @@ import org.gcube.dataanalysis.wps.statisticalmanager.synchserver.utils.Observabl import org.gcube.dataanalysis.wps.statisticalmanager.synchserver.utils.Observer; import org.hibernate.SessionFactory; import org.n52.wps.algorithm.annotation.Execute; +import org.n52.wps.commons.WPSConfig; import org.n52.wps.server.AbstractAnnotatedAlgorithm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +51,7 @@ public class AbstractEcologicalEngineMapper extends AbstractAnnotatedAlgorithm i /** * Deploying procedure: 1 - modify configuration files 2 - modify resource file: resources/templates/setup.cfg 3 - generate classes with ClassGenerator 4 - add new classes in the wps_config.xml on the wps web app config folder 5 - produce the Jar file of this project 6 - copy the jar file in the lib folder of the wps web app change the server parameters in the wps_config.xml file */ - + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractEcologicalEngineMapper.class); private Observer observer = null; @@ -235,7 +241,7 @@ public class AbstractEcologicalEngineMapper extends AbstractAnnotatedAlgorithm i } float previousStatus = -3; - + String host = WPSConfig.getInstance().getWPSConfig().getServer().getHostname(); public void updateStatus(float status) { if (agent != null) { if (status != previousStatus) { @@ -295,7 +301,11 @@ public class AbstractEcologicalEngineMapper extends AbstractAnnotatedAlgorithm i public void run() throws Exception { if (observer!=null) observer.isStarted(this); - + + long startTimeLong = System.currentTimeMillis(); + + OperationResult operationResult = null; + String algorithm = ""; List generatedInputTables = null; List generatedOutputTables = null; @@ -308,6 +318,8 @@ public class AbstractEcologicalEngineMapper extends AbstractAnnotatedAlgorithm i } else LOGGER.info("Wps External ID not set"); InputsManager inputsManager = null; + ConfigurationManager configManager = new ConfigurationManager(); // initializes parameters from file + manageUserToken(); try { // wait for server resources to be available @@ -315,8 +327,7 @@ public class AbstractEcologicalEngineMapper extends AbstractAnnotatedAlgorithm i time("WPS Algorithm objects Initialization: Session " + computationSession); // set the configuration environment for this algorithm - ConfigurationManager configManager = new ConfigurationManager(); // initializes parameters from file - manageUserToken(); + configManager.configAlgorithmEnvironment(inputs); configManager.setComputationId(computationSession); config = configManager.getConfig(); @@ -430,7 +441,9 @@ public class AbstractEcologicalEngineMapper extends AbstractAnnotatedAlgorithm i throw new Exception("Computation cancelled"); } LOGGER.debug("All done"); + operationResult = OperationResult.SUCCESS; } catch (Exception e) { + operationResult = OperationResult.FAILED; LOGGER.error("Error execution Algorithm {}",algorithm,e); int exitstatus = -2; if (isCancelled()) @@ -459,7 +472,29 @@ public class AbstractEcologicalEngineMapper extends AbstractAnnotatedAlgorithm i cleanResources(); if (observer!=null) observer.isFinished(this); LOGGER.debug("All done - Computation Finished"); + accountAlgorithmExecution(configManager, startTimeLong, System.currentTimeMillis(), operationResult); + } + } + + private void accountAlgorithmExecution(ConfigurationManager confManager, long start, long end, OperationResult result) { + try{ + JobUsageRecord jobUsageRecord = new JobUsageRecord(); + jobUsageRecord.setJobName(this.getAlgorithmClass().getSimpleName()); + jobUsageRecord.setConsumerId(confManager.getUsername()); + Calendar startCal = Calendar.getInstance(); + startCal.setTimeInMillis(start); + jobUsageRecord.setDuration(end-start); + jobUsageRecord.setOperationResult(result); + jobUsageRecord.setServiceName("DataMiner"); + jobUsageRecord.setServiceClass("WPS"); + jobUsageRecord.setHost(WPSConfig.getInstance().getWPSConfig().getServer().getHostname()); + + AccountingPersistence accountingPersistence = + AccountingPersistenceFactory.getPersistence(); + accountingPersistence.account(jobUsageRecord); + }catch(Exception e){ + LOGGER.error("error accounting algorithm execution",e); } }