r4023 - in trunk: . src/main/java/fr/ifremer/isisfish src/main/java/fr/ifremer/isisfish/actions src/main/resources/i18n
Author: dcosse Date: 2014-06-17 17:29:15 +0200 (Tue, 17 Jun 2014) New Revision: 4023 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4023 Log: mise en place d'un mechanisme de validation des simulations Added: trunk/src/main/java/fr/ifremer/isisfish/actions/ValidateSimulationAction.java Modified: trunk/go.sh trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java trunk/src/main/resources/i18n/isis-fish_en_GB.properties trunk/src/main/resources/i18n/isis-fish_fr_FR.properties Modified: trunk/go.sh =================================================================== --- trunk/go.sh 2014-06-17 14:30:35 UTC (rev 4022) +++ trunk/go.sh 2014-06-17 15:29:15 UTC (rev 4023) @@ -3,7 +3,7 @@ # Java executable JAVA=java -TEMP=`getopt -o dnt:: --long debug,nosuspend,trace:: \ +TEMP=`getopt -o dnt:: --long debug,nosuspend,cheked,trace:: \ -n 'go.sh' -- "$@"` if [ $? != 0 ] ; then @@ -14,26 +14,38 @@ eval set -- "$TEMP" while true ; do - case "$1" in - -d|--debug) - echo "Debug mode" - DEBUG="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=38000,server=y" - shift ;; - -n|--nosuspend) - echo "Debug no suspend mode" - DEBUG="$DEBUG,suspend=n" - shift ;; - -t|--trace) - echo "Trace mode" - case "$2" in - "") TRACE_FILE="-Daspectwerkz.definition.file=$rep/src/main/resources/trace-aop.xml" # -Daspectwerkz.transform.verbose=true" # -Daspectwerkz.transform.details=true" - ;; - *) TRACE_FILE="-Daspectwerkz.definition.file=$2" # -Daspectwerkz.transform.verbose=true" # -Daspectwerkz.transform.details=true" - esac - shift 2 ;; - --) shift ; break ;; - *) echo "Bad argument $1!" ; exit 1 ;; - esac + case "$1" in + -d|--debug) + echo "Debug mode" + DEBUG="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=38000,server=y" + shift ;; + -n|--nosuspend) + echo "Debug no suspend mode" + DEBUG="$DEBUG,suspend=n" + shift ;; + -c|--checked) + echo "Checked mode" + CHECK="-server -Djava.compiler=NONE ,address=38000,server=y" + shift ;; + -t|--trace) + echo "Trace mode" + + case "$2" in + "") + TRACE_FILE="-Daspectwerkz.definition.file=$rep/src/main/resources/trace-aop.xml" # -Daspectwerkz.transform.verbose=true" # -Daspectwerkz.transform.details=true" + ;; + *) + TRACE_FILE="-Daspectwerkz.definition.file=$2" # -Daspectwerkz.transform.verbose=true" # -Daspectwerkz.transform.details=true" + esac + + shift 2 ;; + --) + shift ; + break ;; + *) + echo "Bad argument $1!"; + exit 1 ;; + esac done dir=$(dirname $0) @@ -67,6 +79,6 @@ done LOG="-Dlog4j.configuration=file:$rep/src/main/resources/log4j.properties" # -Dlog4j.debug" -echo $JAVA -Xmx$MX -Xms$MX -classpath $CL $NOaspectwerkz $TRACE_FILE $LOG $JVM_OPT $DEBUG fr.ifremer.isisfish.IsisFish "$@" -$JAVA -Xmx$MX -Xms$MX -classpath $CL $NOaspectwerkz $TRACE_FILE $LOG $JVM_OPT $DEBUG fr.ifremer.isisfish.IsisFish "$@" +echo $JAVA -Xmx$MX -Xms$MX -classpath $CL $NOaspectwerkz $TRACE_FILE $LOG $JVM_OPT $DEBUG $CHECK fr.ifremer.isisfish.IsisFish "$@" +$JAVA -Xmx$MX -Xms$MX -classpath $CL $NOaspectwerkz $TRACE_FILE $LOG $JVM_OPT $DEBUG $CHECK fr.ifremer.isisfish.IsisFish "$@" #$JAVA -Xmx$MX -Xms$MX -classpath $CL $NOaspectwerkz $TRACE_FILE $LOG $JVM_OPT $DEBUG fr.ifremer.isisfish.ui.update.Counter "$@" Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-06-17 14:30:35 UTC (rev 4022) +++ trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-06-17 15:29:15 UTC (rev 4023) @@ -40,6 +40,7 @@ import java.util.Locale; import java.util.Map; +import fr.ifremer.isisfish.actions.ValidateSimulationAction; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.lang3.time.DurationFormatUtils; import org.nuiton.math.matrix.DoubleBigVector; @@ -285,7 +286,7 @@ } /** - * Retourne le repertoire ou sont stockes les informations relatives + * Retourne le repertoire ou sont stockées les informations relatives * aux simulations en cours. * * @return monitoring directory @@ -304,7 +305,7 @@ * Get javadoc directory. * * Create directory if not exists. - * + * * @return javadoc directory */ public File getJavadocDirectory() { @@ -1198,7 +1199,9 @@ SIMULATE_WITH_SIMULATION(n(""), SimulationAction.class.getName() + "#simulateWithSimulation", "--simulateWithSimulation"), SIMULATE_WITH_SIMULATION_AND_SCRIPT(n(""), SimulationAction.class.getName() + "#simulateWithSimulationAndScript", "--simulateWithSimulationAndScript"), SIMULATE_REMOTELLY(n(""), SimulationAction.class.getName() + "#simulateRemotelly", "--simulateRemotelly"), - SIMULATE_REMOTELLY_WITH_PRESCRIPT(n(""), SimulationAction.class.getName() + "#simulateRemotellyWithPreScript", "--simulateRemotellyWithPreScript"); + SIMULATE_REMOTELLY_WITH_PRESCRIPT(n(""), SimulationAction.class.getName() + "#simulateRemotellyWithPreScript", "--simulateRemotellyWithPreScript"), + + VALIDATE_WITH_SIMULATION(n(""), ValidateSimulationAction.class.getName() + "#validateSimulation", "--validate"); protected String description; protected String action; Copied: trunk/src/main/java/fr/ifremer/isisfish/actions/ValidateSimulationAction.java (from rev 4014, trunk/src/main/java/fr/ifremer/isisfish/actions/SimulationAction.java) =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/actions/ValidateSimulationAction.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/actions/ValidateSimulationAction.java 2014-06-17 15:29:15 UTC (rev 4023) @@ -0,0 +1,180 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2002 - 2014 Ifremer, Code Lutin, Benjamin Poussin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.actions; + +import fr.ifremer.isisfish.IsisConfig; +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.datastore.ResultStorage; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.SimulationControl; +import fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher; +import fr.ifremer.isisfish.simulator.launcher.SimulationItem; +import fr.ifremer.isisfish.simulator.launcher.SimulationService; +import fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher; +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.config.ApplicationConfig.Action.Step; +import org.nuiton.math.matrix.MatrixND; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Check that there are no regressions. + * Monitor execution. + * + */ +public class ValidateSimulationAction { + + /** to use log facility, just put in your code: log.info("..."); */ + private static Log log = LogFactory.getLog(ValidateSimulationAction.class); + + private static final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yy-HH:mm:ss.SS"); + + protected IsisConfig config = null; + + /** + * results from validated simulation + */ + protected static ResultStorage validatedResultStorage; + + public ValidateSimulationAction(IsisConfig config) { + this.config = config; + } + + + /** + * Launch a simulation + * with simulation params the similutaion at the given path. + * + * @param simulationName name of the simulation reference. + * @throws Exception + */ + @Step(IsisConfig.STEP_AFTER_INIT_VCS) + public static void validateSimulation(String simulationName) + throws Exception { + SimulationStorage simulation = SimulationStorage.getSimulation(simulationName); + validatedResultStorage = simulation.getResultStorage(); + + simulateWithSimulation("Validate-From-" + simulationName + "-" + df.format(new Date()), simulation.createZip()); + } + + /** + * Launch a simulation with specified simulationId and simulation zip. + * + * @param simulationId id de simulation + * @param simulationZip Zip de la simulation + * @throws Exception + */ + @Step(IsisConfig.STEP_AFTER_INIT_VCS) + public static void simulateWithSimulation(String simulationId, File simulationZip) + throws Exception { + // just call with null pre script + validateWithSimulationAndScript(simulationId, simulationZip, null); + } + + /** + * Launch a simulation with specified simulationId, simulationZip + * and simulationPrescript. + * + * @param simulationId id de simulation + * @param simulationZip Zip de la simulation + * @param simulationPrescript simulation prescript + * @throws Exception + */ + @Step(IsisConfig.STEP_AFTER_INIT_VCS) + public static void validateWithSimulationAndScript(String simulationId, File simulationZip, File simulationPrescript) + throws Exception { + + if (log.isInfoEnabled()) { + log.info("Command line action : validateWithSimulationAndScript (" + simulationId + ", " + simulationZip.getAbsolutePath() + ", " + simulationPrescript + ")"); + } + + // ne pas mettre la date, car le sub process la met deja + " " + new SimpleDateFormat("yyyy-MM-dd-HH-mm").format(new Date()); + String name = simulationId; + + //SimulationStorage simulation = launcher.simulate(null, control, simulationZip); + //simulation.getStorage().closeContext(); + String generatedPrescriptContent = null; + if (simulationPrescript != null && simulationPrescript.canRead()) { + generatedPrescriptContent = FileUtils.readFileToString(simulationPrescript); + } + + SimulationControl control = new SimulationControl(name); + control.setAutoSaveState(true); // needed for remote simulation + + SimulationItem item = new SimulationItem(control, null); + item.setSimulationZip(simulationZip); + item.setGeneratedPrescriptContent(generatedPrescriptContent); + + // lancement de la simulation + SimulatorLauncher launcher = new InProcessSimulatorLauncher(); + launcher.simulate(SimulationService.getService(), item); + SimulationStorage simulation = launcher.getSimulationStorage(SimulationService.getService(), control); + + validateResults(simulation.getResultStorage()); + + simulation.getStorage().closeContext(); + + // FIXME integrer ca dans le process normal d'init + IsisFish.quit(); + } + + /** + * Compare result simulation from the validated ones. + * @param newResultStorage + * @throws Exception + */ + public static void validateResults(ResultStorage newResultStorage) throws Exception { + + if (newResultStorage.getResultName().size() == validatedResultStorage.getResultName().size()) { + log.info(t("isisfish.common.ok") + " nombre de résultats obtenus équivalent :" + newResultStorage.getResultName().size() + "/" + validatedResultStorage.getResultName().size()); + } else { + log.error(t("isisfish.common.ko") + " nombre de résultats obtenus différent :" + newResultStorage.getResultName().size() + "/" + validatedResultStorage.getResultName().size()); + } + + List<String> simuNames = validatedResultStorage.getResultName(); + for (String simuName : simuNames) { + MatrixND validatedMatrix = validatedResultStorage.getMatrix(simuName); + MatrixND newMatrix = newResultStorage.getMatrix(simuName); + if (newMatrix == null) { + log.error(t("isisfish.common.ko") + " " + t("isisfish.error.validation.matrixNotComputed", validatedMatrix.getName())); + } else { + if (validatedMatrix.equalsValues(newMatrix)) { + log.info(t("isisfish.common.ok") + " MatrixND:" + validatedMatrix.getName()); + } else { + log.error(t("isisfish.common.ko") + " MatrixND:" + validatedMatrix.getName()); + } + } + } + } + +} Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-06-17 14:30:35 UTC (rev 4022) +++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-06-17 15:29:15 UTC (rev 4023) @@ -129,6 +129,7 @@ isisfish.common.gear=Gear isisfish.common.immigration=immigration isisfish.common.info=info +isisfish.common.ko=KO isisfish.common.migration=migration isisfish.common.module=Module isisfish.common.month=month %1$s @@ -406,6 +407,7 @@ isisfish.error.undefined.zone.recruitment=No recrutment's zone defined isisfish.error.undefined.zone.reproduction=No reprodution's zone defined isisfish.error.unsupported.equation.langage=Unsupported language '%1$s' for equation\: %2$s +isisfish.error.validation.matrixNotComputed=matrix not computed %s isisfish.error.wait.simThread=Can't wait SimThread isisfish.error.warning.title=Warning isisfish.error.write.simulation=Can't write information %1$s Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-06-17 14:30:35 UTC (rev 4022) +++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-06-17 15:29:15 UTC (rev 4023) @@ -129,6 +129,7 @@ isisfish.common.gear=Engin isisfish.common.immigration=immigration isisfish.common.info=Info +isisfish.common.ko=KO isisfish.common.migration=migration isisfish.common.module=Module isisfish.common.month=mois %1$s @@ -406,6 +407,7 @@ isisfish.error.undefined.zone.recruitment=il n'y a pas de zone de recrutement de définie isisfish.error.undefined.zone.reproduction=il n'y a pas de zone de reproduction de définie isisfish.error.unsupported.equation.langage=unsupported langage '%1$s' for equation\: %2$s +isisfish.error.validation.matrixNotComputed=matrice non calulée\:%s isisfish.error.wait.simThread=Can't wait SimThread isisfish.error.warning.title=Attention isisfish.error.write.simulation=Can't write information %1$s
participants (1)
-
dcosse@users.forge.codelutin.com