From 26b84388ba3eb179f9d4a9d4e2d478eba3df8201 Mon Sep 17 00:00:00 2001 From: Jerry Flood Date: Fri, 5 Apr 2019 12:23:07 -0400 Subject: Integrate new mS into IT Issue-ID: OPTFRA-458 Change-Id: I42966034101baa54c1b60e07b74c17d97680da81 Signed-off-by: Jerry Flood --- cmso-optimizer/etc/config/optimizer.properties | 4 ++ cmso-optimizer/pom.xml | 14 ++++-- cmso-optimizer/scripts/minizinc/run.bat | 1 + cmso-optimizer/scripts/minizinc/run.sh | 1 + cmso-optimizer/src/main/docker/Dockerfile | 19 +++++++- .../src/main/docker/assembly/cmso-files.xml | 7 +++ .../clients/optimizer/OptimizerClient.java | 57 ++++++++++------------ .../cmso/optimizer/service/rs/HealthCheckImpl.java | 2 + 8 files changed, 70 insertions(+), 35 deletions(-) create mode 100644 cmso-optimizer/scripts/minizinc/run.bat create mode 100644 cmso-optimizer/scripts/minizinc/run.sh (limited to 'cmso-optimizer') diff --git a/cmso-optimizer/etc/config/optimizer.properties b/cmso-optimizer/etc/config/optimizer.properties index 641bbeb..653d21b 100644 --- a/cmso-optimizer/etc/config/optimizer.properties +++ b/cmso-optimizer/etc/config/optimizer.properties @@ -43,6 +43,10 @@ logging.level.org.hibernate.SQL=TRACE logging.level.org.hibernate=TRACE +healthcheck.cmso.topology.url=http://127.0.0.1:7998/topology/v1/health?checkInterfaces=true +healthcheck.cmso.ticketmgt.url=http://127.0.0.1:7999/ticketmgt/v1/health?checkInterfaces=true +healthcheck.cmso.topology.title="CMSO Topology Interface" +healthcheck.cmso.ticketmgt.title="CMSO Ticket Management Interface" cmso.topology.create.request.url=http://127.0.0.1:7998/topology/v1/current cmso.ticket.create.request.url=http://127.0.0.1:7999/ticketmgt/v1/activetickets diff --git a/cmso-optimizer/pom.xml b/cmso-optimizer/pom.xml index 2ede9e7..fa27b8e 100644 --- a/cmso-optimizer/pom.xml +++ b/cmso-optimizer/pom.xml @@ -27,7 +27,7 @@ jar - cmso + cmso-optimizer yyyyMMdd'T'HHmmss'Z' @@ -385,8 +385,8 @@ 1.23 - onap/optf-cmso-tciketmgt - onap-optf-cmso-tciketmgt + onap/optf-cmso-optimizer + onap-optf-cmso-optimizer true @@ -466,6 +466,14 @@ **/* + + ${basedir}/scripts + ${basedir}/target/scripts + true + + **/* + + diff --git a/cmso-optimizer/scripts/minizinc/run.bat b/cmso-optimizer/scripts/minizinc/run.bat new file mode 100644 index 0000000..dc40503 --- /dev/null +++ b/cmso-optimizer/scripts/minizinc/run.bat @@ -0,0 +1 @@ +%MINIZINC% --solver %MINIZINC_SOLVER% --time-limit %MINIZINC_TIMELIMIT% --soln-sep "" --search-complete-msg "" -o %MINIZINC_OUTPUT% %MINIZINC_MZN% %MINIZINC_DZN% \ No newline at end of file diff --git a/cmso-optimizer/scripts/minizinc/run.sh b/cmso-optimizer/scripts/minizinc/run.sh new file mode 100644 index 0000000..690c281 --- /dev/null +++ b/cmso-optimizer/scripts/minizinc/run.sh @@ -0,0 +1 @@ +${MINIZINC} --solver ${MINIZINC_SOLVER} --time-limit ${MINIZINC_TIMELIMIT} --soln-sep '' --search-complete-msg '' -o ${MINIZINC_OUTPUT} ${MINIZINC_MZN} ${MINIZINC_DZN} \ No newline at end of file diff --git a/cmso-optimizer/src/main/docker/Dockerfile b/cmso-optimizer/src/main/docker/Dockerfile index 9ef42ab..fde2caf 100644 --- a/cmso-optimizer/src/main/docker/Dockerfile +++ b/cmso-optimizer/src/main/docker/Dockerfile @@ -10,10 +10,26 @@ ENV HTTPS_PROXY=$https_proxy ENV http_proxy=$HTTP_PROXY ENV https_proxy=$HTTPS_PROXY +ENV MZN 2.2.3 +ENV MZN_BASENAME MiniZincIDE-${MZN}-bundle-linux-x86_64 +ENV MZN_UNZIPNAME MiniZincIDE-${MZN}-bundle-linux +ENV MZN_GH_BASE https://github.com/MiniZinc/MiniZincIDE +ENV MZN_DL_URL ${MZN_GH_BASE}/releases/download/${MZN}/${MZN_BASENAME}.tgz + RUN test -n "$http_proxy" && echo "Acquire::Proxy \"http://$http_proxy\";" > /etc/apt/apt.conf.d/02proxy || true && \ apt-get update && \ apt-get -y dist-upgrade && \ - apt-get install -y openjdk-8-jre-headless + apt-get install -y openjdk-8-jre-headless && \ + apt-get install wget + + +# Minizinc +RUN wget -q $MZN_DL_URL -O mz.tgz +RUN tar xzf mz.tgz +RUN mv $MZN_UNZIPNAME /mz-dist +RUN rm mz.tgz +RUN echo PATH=/mz-dist:$PATH >> ~/.bashrc + COPY onap-cmso-optimizer/cmso-optimizer.jar ${APP_HOME}/app.jar @@ -23,6 +39,7 @@ VOLUME /share/debug-logs COPY onap-cmso-optimizer/startService.sh ${APP_HOME}/startService.sh COPY onap-cmso-optimizer/data ${APP_HOME}/data +COPY onap-cmso-optimizer/scripts ${APP_HOME}/scripts RUN chmod 700 ${APP_HOME}/startService.sh RUN ln -s /share/etc ${APP_HOME}/etc diff --git a/cmso-optimizer/src/main/docker/assembly/cmso-files.xml b/cmso-optimizer/src/main/docker/assembly/cmso-files.xml index 2e3f19e..cf96a35 100644 --- a/cmso-optimizer/src/main/docker/assembly/cmso-files.xml +++ b/cmso-optimizer/src/main/docker/assembly/cmso-files.xml @@ -43,6 +43,13 @@ data /data + + + ** + + scripts + /scripts + ${project.basedir}/src/main/resources ./resources diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java index 3147bc5..9f2f8e6 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java @@ -32,7 +32,9 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.text.ParseException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import org.apache.commons.io.IOUtils; import org.onap.observations.Observation; @@ -206,22 +208,22 @@ public class OptimizerClient { workingFolder.mkdirs(); Long timeLimit = env.getProperty("cmso.minizinc.command.timelimit", Long.class); // TODO calculate time limit - Process p = null; + Process process = null; try { Path inputFileName = Paths.get(workingFolder.getAbsolutePath(), "input.dzn"); Path outputFileName = Paths.get(workingFolder.getAbsolutePath(), "results.yaml"); String dzn = request.toMiniZinc(); Files.write(inputFileName, dzn.getBytes()); - List command = buildCommand(inputFileName, outputFileName, timeLimit.toString()); - debug.debug("engine command=", command.toString()); - ProcessBuilder pb = new ProcessBuilder(command); - p = pb.start(); - String stdout = IOUtils.toString(p.getInputStream(), "UTF-8"); - String stderr = IOUtils.toString(p.getErrorStream(), "UTF-8"); + Map environment = new HashMap<>(); + ProcessBuilder processBuilder = buildCommand(inputFileName, outputFileName, timeLimit.toString()); + process = processBuilder.start(); + //debug.debug("engine command=" + commandString); + String stdout = IOUtils.toString(process.getInputStream(), "UTF-8"); + String stderr = IOUtils.toString(process.getErrorStream(), "UTF-8"); debug.debug("stdout=" + stdout); debug.debug("stderr=" + stderr); - if (p.isAlive()) { - p.wait(); + if (process.isAlive()) { + process.wait(); } OptimizerResponseUtility responseUtility = new OptimizerResponseUtility(); OptimizerResults optimizerResults = responseUtility.parseOptimizerResult(outputFileName.toFile()); @@ -233,7 +235,7 @@ public class OptimizerClient { apiResponse.setErrorMessage( LogMessages.OPTIMIZER_REQUEST_TIMEOUT.format(uuid.toString(), timeLimit.toString())); Observation.report(LogMessages.OPTIMIZER_REQUEST_TIMEOUT, uuid.toString(), timeLimit.toString()); - p.destroyForcibly(); + process.destroyForcibly(); } catch (Exception e) { apiResponse.setStatus(OptimizerEngineResponseStatus.FAILED); apiResponse.setErrorMessage(LogMessages.UNEXPECTED_EXCEPTION.format(e.getMessage())); @@ -246,32 +248,25 @@ public class OptimizerClient { return apiResponse; } - private List buildCommand(Path inputFileName, Path outputFileName, String timeLimit) { + private ProcessBuilder buildCommand(Path inputFileName, Path outputFileName, String timeLimit) { + ProcessBuilder processBuilder = new ProcessBuilder(); List command = new ArrayList<>(); + String commandline = env.getProperty("cmso.minizinc.command.commandline", "/bin/bash -x scripts/minizinc/run.sh"); String minizinc = env.getProperty("cmso.minizinc.command.exe", "minizinc"); String solver = env.getProperty("cmso.minizinc.command.solver", "OSICBC"); - String additional = env.getProperty("cmso.minizinc.command.additional", ""); String script = env.getProperty("cmso.minizinc.command.mzn", "scripts/minizinc/generic_attributes.mzn"); - - command.add(minizinc); - command.add("--solver"); - command.add(solver); - command.add("--time-limit"); - command.add(timeLimit); - command.add("--time-limit"); - command.add(timeLimit); - command.add("--soln-sep"); - command.add("\"\""); - command.add("--search-complete-msg"); - command.add("\"\""); - for (String add : additional.split(" ")) { - command.add(add); + Map environment = processBuilder.environment(); + environment.put("MINIZINC", minizinc); + environment.put("MINIZINC_SOLVER", solver); + environment.put("MINIZINC_TIMELIMIT", timeLimit); + environment.put("MINIZINC_OUTPUT", outputFileName.toString()); + environment.put("MINIZINC_MZN", script); + environment.put("MINIZINC_DZN", inputFileName.toString()); + for (String arg : commandline.split(" ")) { + command.add(arg); } - command.add("-o"); - command.add(outputFileName.toString()); - command.add(script); - command.add(inputFileName.toString()); - return command; + processBuilder.command(command); + return processBuilder; } diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/HealthCheckImpl.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/HealthCheckImpl.java index 80deaaf..bc7ce52 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/HealthCheckImpl.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/HealthCheckImpl.java @@ -103,4 +103,6 @@ public class HealthCheckImpl implements HealthCheck { return hcc; } + + } -- cgit 1.2.3-korg