use of org.talend.designer.runprocess.ui.actions.ClearPerformanceAction in project tdi-studio-se by Talend.
the class RunProcessContext method exec.
/**
* Launch the process.
*/
public void exec(final Shell shell) {
if (process instanceof org.talend.designer.core.ui.editor.process.Process) {
org.talend.designer.core.ui.editor.process.Process prs = (org.talend.designer.core.ui.editor.process.Process) process;
prs.checkDifferenceWithRepository();
}
checkTraces();
if (ProcessContextComposite.promptConfirmLauch(shell, getSelectedContext(), process)) {
if (getSelectedTargetExecutionConfig() == null || !getSelectedTargetExecutionConfig().isRemote()) {
// tos run to collect
IPreferenceStore preferenceStore = RunProcessPlugin.getDefault().getPreferenceStore();
int num = preferenceStore.getInt(RunProcessTokenCollector.TOS_COUNT_RUNS.getPrefKey());
preferenceStore.setValue(RunProcessTokenCollector.TOS_COUNT_RUNS.getPrefKey(), num + 1);
}
ClearPerformanceAction clearPerfAction = new ClearPerformanceAction();
clearPerfAction.setProcess(process);
clearPerfAction.run();
ClearTraceAction clearTraceAction = new ClearTraceAction();
clearTraceAction.setProcess(process);
clearTraceAction.run();
if (monitorPerf) {
this.getStatisticsPort();
}
final IProcessor processor = getProcessor(process, process.getProperty());
IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
try {
progressService.run(false, true, new IRunnableWithProgress() {
@Override
public void run(final IProgressMonitor monitor) {
final IProgressMonitor progressMonitor = new EventLoopProgressMonitor(monitor);
//$NON-NLS-1$
progressMonitor.beginTask(Messages.getString("ProcessComposite.buildTask"), IProgressMonitor.UNKNOWN);
testPort();
// findNewStatsPort();
if (monitorPerf || monitorTrace) {
if (traceConnectionsManager != null) {
traceConnectionsManager.clear();
}
traceConnectionsManager = getTraceConnectionsManager(process);
traceConnectionsManager.init();
}
final IContext context = getSelectedContext();
if (monitorPerf) {
clearThreads();
perfMonitor = getPerformanceMonitor();
//$NON-NLS-1$
new Thread(perfMonitor, "PerfMonitor_" + process.getLabel()).start();
perMonitorList.add(perfMonitor);
}
// findNewTracesPort();
if (monitorTrace) {
traceMonitor = new TraceMonitor();
//$NON-NLS-1$
new Thread(traceMonitor, "TraceMonitor_" + process.getLabel()).start();
}
final String watchParam = RunProcessContext.this.isWatchAllowed() ? TalendProcessArgumentConstant.CMD_ARG_WATCH : null;
final String log4jRuntimeLevel = getLog4jRuntimeLevel();
processor.setContext(context);
((IEclipseProcessor) processor).setTargetExecutionConfig(getSelectedTargetExecutionConfig());
final boolean oldMeasureActived = TimeMeasure.measureActive;
if (!oldMeasureActived) {
// not active before.
TimeMeasure.display = TimeMeasure.displaySteps = TimeMeasure.measureActive = CommonsPlugin.isDebugMode();
}
//$NON-NLS-1$
final String generateCodeId = "Generate job source codes and compile before run";
TimeMeasure.begin(generateCodeId);
try {
ProcessorUtilities.generateCode(processor, process, context, getStatisticsPort() != IProcessor.NO_STATISTICS, getTracesPort() != IProcessor.NO_TRACES && hasConnectionTrace(), true, progressMonitor);
} catch (Throwable e) {
// catch any Exception or Error to kill the process,
// see bug 0003567
running = true;
ExceptionHandler.process(e);
kill();
} finally {
progressMonitor.done();
// System.out.println("exitValue:" +
// ps.exitValue());
}
TimeMeasure.end(generateCodeId);
// if active before, not disable and active still.
if (!oldMeasureActived) {
TimeMeasure.display = TimeMeasure.displaySteps = TimeMeasure.measureActive = false;
}
final boolean[] refreshUiAndWait = new boolean[1];
refreshUiAndWait[0] = true;
final Display display = shell.getDisplay();
new Thread(new Runnable() {
@Override
public void run() {
display.syncExec(new Runnable() {
@Override
public void run() {
try {
startingMessageWritten = false;
// before launching
if (!JobErrorsChecker.hasErrors(shell)) {
ps = processor.run(getStatisticsPort(), getTracesPort(), watchParam, log4jRuntimeLevel, progressMonitor, processMessageManager);
}
if (ps != null && !progressMonitor.isCanceled()) {
setRunning(true);
psMonitor = createProcessMonitor(ps);
startingMessageWritten = true;
final String startingPattern = Messages.getString(//$NON-NLS-1$
"ProcessComposite.startPattern");
MessageFormat mf = new MessageFormat(startingPattern);
String welcomeMsg = mf.format(new Object[] { process.getLabel(), new Date() });
processMessageManager.addMessage(new ProcessMessage(MsgType.CORE_OUT, //$NON-NLS-1$
welcomeMsg + "\r\n"));
processMonitorThread = new Thread(psMonitor);
processMonitorThread.start();
} else {
kill();
running = true;
setRunning(false);
}
} catch (Throwable e) {
// catch any Exception or Error
// to kill the process, see bug
// 0003567
running = true;
Throwable cause = e.getCause();
if (cause != null && cause.getClass().equals(InterruptedException.class)) {
setRunning(false);
addErrorMessage(e);
} else {
ExceptionHandler.process(e);
addErrorMessage(e);
kill();
}
} finally {
// progressMonitor.done();
refreshUiAndWait[0] = false;
}
}
});
}
}, "RunProcess_" + process.getLabel()).start();
while (refreshUiAndWait[0] && !progressMonitor.isCanceled()) {
if (!display.readAndDispatch()) {
display.sleep();
}
synchronized (this) {
try {
final long waitTime = 50;
wait(waitTime);
} catch (InterruptedException e) {
// Do nothing
}
}
}
}
});
} catch (InvocationTargetException e1) {
addErrorMessage(e1);
} catch (InterruptedException e1) {
addErrorMessage(e1);
}
} else {
// See bug 0003567: When a prompt from context is cancelled or a
// fatal error occurs during a job exec the
// Kill button have to be pressed manually.
this.running = true;
setRunning(false);
}
}
Aggregations