Compare commits
No commits in common. 'b20f752bc706586fe14c9d8c7c5fc2b1bcabe114' and 'bee21d279a62b71ee12be15f57c337b473ea0ab7' have entirely different histories.
b20f752bc7
...
bee21d279a
8 changed files with 43 additions and 333 deletions
@ -1,4 +1,2 @@ |
|||||||
# scheduler4e |
# scheduler4e |
||||||
|
|
||||||
This is the repository of 4E scheduler moved from Alphien github. |
|
||||||
FourElements scheduler from release 2.1.2 plus source and target setup for java8 |
FourElements scheduler from release 2.1.2 plus source and target setup for java8 |
||||||
|
@ -1,117 +0,0 @@ |
|||||||
/* |
|
||||||
* To change this license header, choose License Headers in Project Properties. |
|
||||||
* To change this template file, choose Tools | Templates |
|
||||||
* and open the template in the editor. |
|
||||||
*/ |
|
||||||
package com.fourelementscapital.scheduler.engines; |
|
||||||
|
|
||||||
import org.quartz.JobExecutionException; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
import java.io.FileWriter; |
|
||||||
import java.io.IOException; |
|
||||||
import java.io.InputStreamReader; |
|
||||||
import java.io.BufferedReader; |
|
||||||
import com.fourelementscapital.scheduler.exception.SchedulerException; |
|
||||||
|
|
||||||
/** |
|
||||||
* |
|
||||||
* @author bernarto |
|
||||||
*/ |
|
||||||
public abstract class PythonScript extends ScheduledTask { |
|
||||||
|
|
||||||
|
|
||||||
public PythonScript(String name, String uid) { |
|
||||||
super(name, uid); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
public void execute(StackFrame sframe) throws JobExecutionException, |
|
||||||
SchedulerException, |
|
||||||
Exception { |
|
||||||
if (sframe == null || sframe.getData() == null || |
|
||||||
sframe.getData().get("rscript") == null || |
|
||||||
sframe.getData().get("id") == null) { |
|
||||||
return; |
|
||||||
} |
|
||||||
String script = (String)sframe.getData().get("rscript"); |
|
||||||
|
|
||||||
Number nid = (Number)sframe.getData().get("id"); |
|
||||||
File py = File.createTempFile( nid.intValue() + "-" + |
|
||||||
sframe.getTrigger_time(), ".py"); |
|
||||||
try ( FileWriter writer = new FileWriter(py) ) { |
|
||||||
writer.write( script ); |
|
||||||
} |
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder(1024); |
|
||||||
Process process = runPythonScript( py.getName() ); |
|
||||||
int exitcode = 0; |
|
||||||
try ( InputStreamReader isr = |
|
||||||
new InputStreamReader(process.getInputStream()) ) { |
|
||||||
try ( BufferedReader reader = new BufferedReader(isr) ) { |
|
||||||
|
|
||||||
String line = reader.readLine(); |
|
||||||
while (line != null) { |
|
||||||
sb.append(line).append("\n"); |
|
||||||
line = reader.readLine(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
finally { |
|
||||||
sframe.setConsole_message( sb.toString() ); |
|
||||||
exitcode = process.waitFor(); |
|
||||||
sframe.setTasklog(null); |
|
||||||
py.delete(); |
|
||||||
} |
|
||||||
if (exitcode != 0) { |
|
||||||
throw new SyntaxError("Syntax errors in python script"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Process runPythonScript(String scriptfile) throws IOException { |
|
||||||
synchronized (this) { |
|
||||||
getBuilder().command("python", scriptfile); |
|
||||||
return getBuilder().start(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private ProcessBuilder getBuilder() { |
|
||||||
ProcessBuilder local = null; |
|
||||||
if ((local = _builder) == null) { |
|
||||||
synchronized (this) { |
|
||||||
if ((local = _builder) == null) { |
|
||||||
|
|
||||||
_builder = new ProcessBuilder(); |
|
||||||
_builder.redirectErrorStream( true ); |
|
||||||
// _builder.environment().put("PYTHONPATH", "");
|
|
||||||
// _builder.environment().put("PYTHONHOME", "");
|
|
||||||
String tmpdir = System.getProperty("java.io.tmpdir"); |
|
||||||
if (tmpdir != null && tmpdir.length() > 0) { |
|
||||||
_builder.directory( new File(tmpdir) ); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
return _builder; |
|
||||||
} |
|
||||||
private volatile ProcessBuilder _builder; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class SyntaxError extends SchedulerException { |
|
||||||
|
|
||||||
public SyntaxError(String msg) { |
|
||||||
super(msg); |
|
||||||
} |
|
||||||
|
|
||||||
public int getErrorcode() { |
|
||||||
return ERROR_SERVER_GENERAL_SCRIPT_ERROR; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,77 +0,0 @@ |
|||||||
/* |
|
||||||
* To change this license header, choose License Headers in Project Properties. |
|
||||||
* To change this template file, choose Tools | Templates |
|
||||||
* and open the template in the editor. |
|
||||||
*/ |
|
||||||
package com.fourelementscapital.scheduler.group; |
|
||||||
|
|
||||||
import com.fourelementscapital.db.vo.FlexiField; |
|
||||||
import com.fourelementscapital.scheduler.engines.PythonScript; |
|
||||||
import com.fourelementscapital.scheduler.engines.ScheduledTaskField; |
|
||||||
import java.util.Vector; |
|
||||||
/** |
|
||||||
* |
|
||||||
* @author bernarto |
|
||||||
*/ |
|
||||||
public class PythonScriptTask extends PythonScript { |
|
||||||
public static final String ENGINE_NAME = "pscript4pythonengine"; |
|
||||||
|
|
||||||
public PythonScriptTask(String name, String uid) { |
|
||||||
super (name, uid); |
|
||||||
try { |
|
||||||
addFormFields( getMyFields() ); |
|
||||||
} |
|
||||||
catch ( Exception e ) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected Vector<ScheduledTaskField> getMyFields(){ |
|
||||||
Vector<ScheduledTaskField> fields = new Vector<>(); |
|
||||||
|
|
||||||
//list
|
|
||||||
ScheduledTaskField f3 = new ScheduledTaskField(); |
|
||||||
f3.setShortname( "rscript_param" ); |
|
||||||
f3.setFieldlabel(""); |
|
||||||
f3.setFieldtype( FlexiField.TYPE_RSCRIPTEDITOR_PARAM ); |
|
||||||
f3.setPlacementform( "codeinject" ); |
|
||||||
fields.add( f3 ); |
|
||||||
|
|
||||||
ScheduledTaskField f4 = new ScheduledTaskField(); |
|
||||||
f4.setShortname( "rscript" ); |
|
||||||
f4.setFieldlabel( "Python Script" ); |
|
||||||
f4.setFieldtype( FlexiField.TYPE_RSCRIPTEDITOR ); |
|
||||||
fields.add(f4); |
|
||||||
|
|
||||||
fields.addAll( getAdditionalRScriptField() ); |
|
||||||
return fields; |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Vector<ScheduledTaskField> getAdditionalRScriptField(){ |
|
||||||
Vector<ScheduledTaskField> fields = new Vector<>(); |
|
||||||
|
|
||||||
ScheduledTaskField f5=new ScheduledTaskField(); |
|
||||||
f5.setShortname( "trigger_commodity" ); |
|
||||||
f5.setFieldlabel( "Trigger Commodity" ); |
|
||||||
f5.setFieldtype( FlexiField.TYPE_TEXTBOX ); |
|
||||||
f5.setFineprint( "Building block which fixing time defines the " |
|
||||||
+ "trigger time for Zero-day lag indicators e.g: CL,C,JNso"); |
|
||||||
f5.setPlacementform( "buildingblock" ); |
|
||||||
fields.add( f5 ); |
|
||||||
|
|
||||||
ScheduledTaskField f6 = new ScheduledTaskField(); |
|
||||||
f6.setShortname( "trigger_frequency" ); |
|
||||||
f6.setFieldlabel( "Trigger Frequency" ); |
|
||||||
f6.setFieldtype( FlexiField.TYPE_TEXTBOX ); |
|
||||||
f6.setFineprint( "Specific Intervals: 1/3 (starting at 1 and every 3 minutes)" ); |
|
||||||
f6.setPlacementform( "buildingblock" ); |
|
||||||
fields.add( f6 ); |
|
||||||
|
|
||||||
return fields; |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue