} $cmd = 'screen -L -S ' . $rInstanceScreenName . ' -p 0 -X stuff "' . $command . "\n" . '"'; logMessage(" - " . $command); shell_exec($cmd); } //initialize service if not already initialized if (!isDaemonsCreated()) { logMessage('<pre>'); if (!isServiceInitiating()) { deleteRInstances(); serviceInitiating(); for ($daemonIndex = 1; $daemonIndex <= $maxNumberOfDaemons; $daemonIndex++) { $rInstanceScreenName = 'r.instance.' . $daemonIndex; initializingRInstance($rInstanceScreenName); // Initialize a screen with R either with the useXVirtualFrameBuffer or not $initiateRInstanceCommand = 'cd ' . $projectHome . '/workspace/;export LC_ALL=en_US.UTF-8;export LANG=en_US.UTF-8;export LANGUAGE=en_US.UTF-8;export LESSCHARSET=utf-8;' . 'screen -U -A -m -d -S ' . $rInstanceScreenName . ($useXVirtualFrameBuffer ? ' xvfb-run -a ' . ($setXVirtualFrameBufferBitDepth ? '-s "-screen 0 1024x768x16" ' : '') : '') . ' R --no-save'; logMessage($initiateRInstanceCommand); shell_exec($initiateRInstanceCommand); // inform R instance of its name $RInitializeCommand = 'r.instance.screen.name <- \\"' . $rInstanceScreenName . '\\";'; // load its sources $RInitializeCommand = $RInitializeCommand . 'source(\\"' . $projectHome . $layerHome . '/initialization/0.initialize.R\\");'; //the last daemon sets the service as initialized if ($daemonIndex == $maxNumberOfDaemons) { $RInitializeCommand = $RInitializeCommand . 'mark.service.as.available();'; } executeRCommand($rInstanceScreenName, $RInitializeCommand, 0); } logMessage('</pre>'); } }
if (isPlotParametersValid($_GET)) { #----------------------------------------------------------------------------- $millisecondsStart = round(microtime(true) * 1000); $plotFileName = $projectHome . $plotsDirectory . getPlotFileName($_GET); $isCached = FALSE; if (file_exists($plotFileName . ($_GET["media"] == "svg" ? ".gz" : "")) && $cache) { $isCached = TRUE; } else { include 'RRML/reserve.php'; $rInstanceScreenName = reserveRDaemon(); if (!is_null($rInstanceScreenName)) { if (file_exists($plotFileName)) { unlink($plotFileName); } $reservedRDaemonAvailable = false; executeRCommand($rInstanceScreenName, getRFunctionCall($_GET)); for ($counter = 1; $counter <= 1000; $counter++) { $reservedRDaemonAvailable = isReservedRDaemonAvailable($rInstanceScreenName); if ($reservedRDaemonAvailable) { break; } time_nanosleep(0, 100000000); } if (!$reservedRDaemonAvailable) { die('Please try again in a few minutes'); } } else { die('Could not reserve Instance. Please try again in a few seconds'); } } $millisecondsEnd = round(microtime(true) * 1000);