Skip to content
This repository has been archived by the owner on Oct 20, 2023. It is now read-only.

Commit

Permalink
improve logging, try to fix wps session variables
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel Nüst committed Apr 7, 2014
1 parent ff85e3c commit 744c857
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 22 deletions.
37 changes: 29 additions & 8 deletions 52n-wps-r/src/main/java/org/n52/wps/server/r/GenericRProcess.java
Expand Up @@ -87,6 +87,7 @@
import org.n52.wps.server.r.util.RSessionInfo;
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.REngine;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RFileInputStream;
import org.rosuda.REngine.Rserve.RFileOutputStream;
Expand Down Expand Up @@ -463,10 +464,12 @@ private String prepareWorkspace(Map<String, List<IData>> inputData, RConnection
REXPMismatchException,
ExceptionReport {
log.debug("[R] preparing workspace...");

RLogger.logGenericRProcess(rCon,
"Running algorithm with input "
+ Arrays.deepToString(inputData.entrySet().toArray()));
log.debug("[R] Rengine: {}", REngine.getLastEngine());
log.debug("[R] R server version: {}", rCon.getServerVersion());

log.debug("[R] cleaning session.");
// ensure that session is clean;
Expand Down Expand Up @@ -695,42 +698,60 @@ private void cleanUpRSession(RConnection rCon, String r_basedir) throws RserveEx

private void loadWPSSessionVariables(RConnection rCon) throws RserveException, RAnnotationException {
R_Config config = R_Config.getInstance();

// rCon.eval("test.env <- new.env()");
// rCon.eval("assign('var', 100, envir=test.env)");
// rCon.eval("cat('grp here\n')");
// rCon.eval("print(get('var', envir=test.env))");
// rCon.eval("lasttry <<- \"lalaaaa\"");
rCon.eval("assign(\"bar\", \"in baz\", envir = .GlobalEnv)");
rCon.eval("print(bar)");

RLogger.log(rCon, "Environments:");
rCon.eval("environment()");

// assign link to resource folder to an R variable
String cmd = RWPSSessionVariables.WPS_SERVER_NAME + " <- TRUE";
rCon.eval(cmd);
log.debug("[R] {}", cmd);

RLogger.logVariable(rCon, RWPSSessionVariables.WPS_SERVER_NAME);

rCon.assign(RWPSSessionVariables.RESOURCE_URL_NAME, config.getResourceDirURL());
// should have the same result as rCon.eval(resourceUrl <- "lala");
log.debug("[R] assigned resource directory to variable '{}' --> {}",
log.debug("[R] assigned resource directory to variable '{}': {}",
RWPSSessionVariables.RESOURCE_URL_NAME,
config.getResourceDirURL());
RLogger.logVariable(rCon, RWPSSessionVariables.RESOURCE_URL_NAME);

List<RAnnotation> resAnnotList = RAnnotation.filterAnnotations(this.annotations, RAnnotationType.RESOURCE);
String wpsScriptResources = null;

// Assign and concatenate lists of resources given by the
// resourse-Annotations
wpsScriptResources = "list()";
rCon.eval(RWPSSessionVariables.R_SESSION_SCRIPT_RESOURCES + " = " + wpsScriptResources);
rCon.eval(RWPSSessionVariables.R_SESSION_SCRIPT_RESOURCES + " <- " + wpsScriptResources);
for (RAnnotation annotation : resAnnotList) {
wpsScriptResources = annotation.getStringValue(RAttribute.NAMED_LIST_R_SYNTAX);
rCon.eval(RWPSSessionVariables.R_SESSION_SCRIPT_RESOURCES + " = " + "append("
rCon.eval(RWPSSessionVariables.R_SESSION_SCRIPT_RESOURCES + " <- " + "append("
+ RWPSSessionVariables.R_SESSION_SCRIPT_RESOURCES + ", " + wpsScriptResources + ")");
}

log.debug("[R] assigned recource urls to variable '{}' --> {}",
log.debug("[R] assigned recource urls to variable '{}': {}",
RWPSSessionVariables.R_SESSION_SCRIPT_RESOURCES,
wpsScriptResources);
RLogger.logVariable(rCon, RWPSSessionVariables.R_SESSION_SCRIPT_RESOURCES);

String processDescription = R_Config.getInstance().getUrlPathUpToWebapp()
+ "/WebProcessingService?Request=DescribeProcess&identifier=" + this.getWellKnownName();

rCon.assign(RWPSSessionVariables.PROCESS_DESCRIPTION, processDescription);
log.debug("[R] assigned process description to variable '{}' --> {}",
RLogger.logVariable(rCon, RWPSSessionVariables.PROCESS_DESCRIPTION);

log.debug("[R] assigned process description to variable '{}': {}",
RWPSSessionVariables.PROCESS_DESCRIPTION,
processDescription);

RLogger.log(rCon, "workspace content after loading session variables:");
rCon.eval("ls()");
}

private void loadUtilityScripts(RConnection rCon) throws RserveException,
Expand Down
Expand Up @@ -26,8 +26,19 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*/

package org.n52.wps.server.r;

/**
*
* names of the variables that are put into the R session prior to execution of a script.
*
* TODO: create a complex object called "wps" with the slots processDescriptionLink, serverRuntime (52N WPS
* build version), serverName, resourceBaseUrl, scriptBaseUrl, ...
*
* @author Daniel
*
*/
public class RWPSSessionVariables {

public static final String PROCESS_DESCRIPTION = "wpsProcessDescription";
Expand Down
56 changes: 42 additions & 14 deletions 52n-wps-r/src/main/java/org/n52/wps/server/r/util/RLogger.java
Expand Up @@ -26,6 +26,7 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*/

package org.n52.wps.server.r.util;

import java.text.DateFormat;
Expand All @@ -42,9 +43,7 @@ public class RLogger {

private static DateFormat format = DateFormat.getDateTimeInstance();

public static void logGenericRProcess(RConnection rCon,
String message)
{
public static void logGenericRProcess(RConnection rCon, String message) {
String msg = prepareMessage(message);

StringBuilder evalString = new StringBuilder();
Expand All @@ -56,34 +55,63 @@ public static void logGenericRProcess(RConnection rCon,

try {
rCon.eval(evalString.toString());
} catch (RserveException e) {
}
catch (RserveException e) {
LOGGER.warn("Could not log message '" + msg + "'", e);
}
}

public static void log(RConnection rCon,
String message)
{
public static void log(RConnection rCon, String message) {
String msg = prepareMessage(message);

StringBuilder evalString = new StringBuilder();
evalString.append("cat(\"[WPS4R @ ");
evalString.append(format.format(new Date(System.currentTimeMillis())));
evalString.append("] ");
evalString.append("cat(");
appendPre(evalString);
evalString.append(" ");
evalString.append(msg);
evalString.append("\\n\")");

logIt(rCon, evalString);
}

private static void logIt(RConnection rCon, StringBuilder evalString) {
try {
rCon.eval(evalString.toString());
} catch (RserveException e) {
LOGGER.warn("Could not log message '" + msg + "'", e);
}
catch (RserveException e) {
LOGGER.warn("Could not log message '{}'", evalString.toString(), e);
}
}

private static String prepareMessage(String message)
{
private static void appendPre(StringBuilder evalString) {
evalString.append("\"[WPS4R @ ");
evalString.append(format.format(new Date(System.currentTimeMillis())));
evalString.append("]");
}

private static String prepareMessage(String message) {
// return message.replace("\"", "\\\"");
return new String(message);
}

public static void logVariable(RConnection rCon, String var) {
StringBuilder evalString = new StringBuilder();
evalString.append("cat(");
appendPre(evalString);
evalString.append("\"");
evalString.append(", ");

evalString.append("\"");
evalString.append(var);
evalString.append(" =\", ");

evalString.append("toString(");
evalString.append(var);
evalString.append(")");

evalString.append(", \"");
evalString.append("\\n\")");
logIt(rCon, evalString);
}

}

0 comments on commit 744c857

Please sign in to comment.