Search in sources :

Example 6 with ClearPerformanceAction

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);
    }
}
Also used : IContext(org.talend.core.model.process.IContext) ClearTraceAction(org.talend.designer.runprocess.ui.actions.ClearTraceAction) IProcess(org.talend.core.model.process.IProcess) IRunnableWithProgress(org.eclipse.jface.operation.IRunnableWithProgress) IProgressService(org.eclipse.ui.progress.IProgressService) MessageFormat(java.text.MessageFormat) EventLoopProgressMonitor(org.talend.commons.ui.swt.dialogs.EventLoopProgressMonitor) Date(java.util.Date) InvocationTargetException(java.lang.reflect.InvocationTargetException) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) ClearPerformanceAction(org.talend.designer.runprocess.ui.actions.ClearPerformanceAction) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) Display(org.eclipse.swt.widgets.Display)

Aggregations

ClearPerformanceAction (org.talend.designer.runprocess.ui.actions.ClearPerformanceAction)6 ClearTraceAction (org.talend.designer.runprocess.ui.actions.ClearTraceAction)5 InvocationTargetException (java.lang.reflect.InvocationTargetException)3 MessageFormat (java.text.MessageFormat)3 Date (java.util.Date)3 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)3 IRunnableWithProgress (org.eclipse.jface.operation.IRunnableWithProgress)3 IPreferenceStore (org.eclipse.jface.preference.IPreferenceStore)3 IProgressService (org.eclipse.ui.progress.IProgressService)3 IContext (org.talend.core.model.process.IContext)3 IStatus (org.eclipse.core.runtime.IStatus)2 Status (org.eclipse.core.runtime.Status)2 DebugException (org.eclipse.debug.core.DebugException)2 ILaunchConfiguration (org.eclipse.debug.core.ILaunchConfiguration)2 IProcess (org.eclipse.debug.core.model.IProcess)2 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)2 SelectionEvent (org.eclipse.swt.events.SelectionEvent)2 Display (org.eclipse.swt.widgets.Display)2 Processor (org.talend.designer.core.runprocess.Processor)2 Process (org.talend.designer.core.ui.editor.process.Process)2