From 17fd5484eb7234cbed9f4a34ec8197902e142a98 Mon Sep 17 00:00:00 2001 From: fuwenkai <834260992@qq.com> Date: Sun, 28 Apr 2024 21:16:06 +0800 Subject: [PATCH] [INLONG-10096][Manager] Add doc --- .../service/cmd/CommandExecutorImpl.java | 24 +- .../manager/service/cmd/CommandResult.java | 26 +- .../manager/service/cmd/shell/IExecutor.java | 38 --- .../service/cmd/shell/ShellExecutor.java | 217 +--------------- .../service/cmd/shell/ShellExecutorImpl.java | 232 ++++++++++++++++++ .../service/cmd/shell/ShellTracker.java | 36 ++- ...mpleTracker.java => ShellTrackerImpl.java} | 51 +--- 7 files changed, 292 insertions(+), 332 deletions(-) delete mode 100644 inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/IExecutor.java create mode 100644 inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutorImpl.java rename inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/{SimpleTracker.java => ShellTrackerImpl.java} (61%) diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandExecutorImpl.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandExecutorImpl.java index 76720b08a1..7a64568bc4 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandExecutorImpl.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandExecutorImpl.java @@ -19,8 +19,8 @@ import org.apache.inlong.manager.common.consts.InlongConstants; import org.apache.inlong.manager.pojo.cluster.agent.AgentClusterNodeRequest; -import org.apache.inlong.manager.service.cmd.shell.ShellExecutor; -import org.apache.inlong.manager.service.cmd.shell.SimpleTracker; +import org.apache.inlong.manager.service.cmd.shell.ShellExecutorImpl; +import org.apache.inlong.manager.service.cmd.shell.ShellTrackerImpl; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -54,19 +54,19 @@ private String join(String... strings) { @Override public CommandResult exec(String cmd) throws Exception { - SimpleTracker shellTracker = new SimpleTracker(); - ShellExecutor shellExecutor = new ShellExecutor(shellTracker); + ShellTrackerImpl shellTracker = new ShellTrackerImpl(); + ShellExecutorImpl shellExecutor = new ShellExecutorImpl(shellTracker); shellExecutor.syncExec("sh", "-c", cmd); String cmdMsg = join("sh", "-c", cmd); LOG.debug("run command : " + cmdMsg); CommandResult commandResult = new CommandResult(); commandResult.setCode(shellTracker.getCode()); - commandResult.setStdout(join(shellTracker.getResult())); + commandResult.setResult(join(shellTracker.getResult())); if (commandResult.getCode() != 0) { throw new Exception("command " + cmdMsg + " exec failed, code = " + - commandResult.getCode() + ", output = " + commandResult.getStdout()); + commandResult.getCode() + ", output = " + commandResult.getResult()); } - LOG.debug(commandResult.getStdout()); + LOG.debug(commandResult.getResult()); return commandResult; } @@ -83,19 +83,19 @@ public CommandResult execRemote(AgentClusterNodeRequest clusterNodeRequest, Stri String cmdMsg = join(cmdShell, ip, user, password, remoteCommandTimeout, cmd, port); LOG.info("run remote command : " + cmdMsg); - SimpleTracker shellTracker = new SimpleTracker(); - ShellExecutor shellExecutor = new ShellExecutor(shellTracker); + ShellTrackerImpl shellTracker = new ShellTrackerImpl(); + ShellExecutorImpl shellExecutor = new ShellExecutorImpl(shellTracker); shellExecutor.syncExec(cmdShell, ip, user, password, remoteCommandTimeout, cmd, port); CommandResult commandResult = new CommandResult(); commandResult.setCode(shellTracker.getCode()); - commandResult.setStdout(join(shellTracker.getResult())); + commandResult.setResult(join(shellTracker.getResult())); - LOG.debug(commandResult.getStdout()); + LOG.debug(commandResult.getResult()); if (commandResult.getCode() != 0) { throw new Exception( "remote command " + cmdMsg + " exec failed, code = " + commandResult.getCode() + ", output = " - + commandResult.getStdout()); + + commandResult.getResult()); } return commandResult; } diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandResult.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandResult.java index c373b7018d..6cbb594d1f 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandResult.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/CommandResult.java @@ -18,13 +18,13 @@ package org.apache.inlong.manager.service.cmd; /** - * Created by florianfan on 2015/11/9. + * Command result */ public class CommandResult { private int code = 0; - private String stdout; - private String stderr; + private String result; + private String errMsg; public int getCode() { return code; @@ -34,28 +34,28 @@ public void setCode(int code) { this.code = code; } - public String getStdout() { - return stdout; + public String getResult() { + return result; } - public void setStdout(String stdout) { - this.stdout = stdout; + public void setResult(String result) { + this.result = result; } - public String getStderr() { - return stderr; + public String getErrMsg() { + return errMsg; } - public void setStderr(String stderr) { - this.stderr = stderr; + public void setErrMsg(String errMsg) { + this.errMsg = errMsg; } @Override public String toString() { return "CommandResult{" + "code=" + code + - ", stdout='" + stdout + '\'' + - ", stderr='" + stderr + '\'' + + ", stdout='" + result + '\'' + + ", stderr='" + errMsg + '\'' + '}'; } } diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/IExecutor.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/IExecutor.java deleted file mode 100644 index af6dc2431f..0000000000 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/IExecutor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.inlong.manager.service.cmd.shell; - -public interface IExecutor { - - /** - * 异步执行shell文件 - * - * @param shellPath shell路径 - * @param params 参数 - */ - public void asynExec(String shellPath, String... params); - - /** - * 执行shell文件 - * - * @param shellPath shell路径 - * @param params 参数 - */ - public void syncExec(String shellPath, String... params); - -} diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutor.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutor.java index 925f877616..b3a43025c0 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutor.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutor.java @@ -17,215 +17,14 @@ package org.apache.inlong.manager.service.cmd.shell; -import lombok.extern.slf4j.Slf4j; +public interface ShellExecutor { -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; + /** + * Execute shell commands + * + * @param shellPath shell path + * @param params params + */ + public void syncExec(String shellPath, String... params); -@Slf4j -public class ShellExecutor implements IExecutor { - - private static final String[] EXCEPTION_REG = new String[]{"(.*)Caused by: (.*)Exception(.*)", - "(.*)java.net.UnknownHostException(.*)", - "(.*)Copy failed: java.io.IOException: Job failed!(.*)"}; - private ShellTracker tracker; - - public ShellExecutor(ShellTracker tracker) { - this.tracker = tracker; - } - - private static long getPid(Process process) { - try { - Field f = process.getClass().getDeclaredField("pid"); - f.setAccessible(true); - long procHandle = f.getLong(process); - return procHandle; - } catch (Exception e) { - e.printStackTrace(); - return -1; - } - } - - private static String[] merge(String shellPath, String[] paths) { - List cmds = new ArrayList(); - cmds.add(shellPath); - for (String path : paths) { - if (path.equals("")) { - continue; - } - cmds.add(path); - } - String[] strings = new String[cmds.size()]; - cmds.toArray(strings); - return strings; - } - - private static String arrayToString(Object[] array, String split) { - if (array == null || array.length == 0) { - return ""; - } - StringBuilder str = new StringBuilder(); - for (int i = 0, length = array.length; i < length; i++) { - if (i != 0) { - str.append(split); - } - str.append(array[i]); - } - return str.toString(); - } - - private static boolean HasException(String str) { - for (String reg : EXCEPTION_REG) { - Pattern pattern = Pattern.compile(reg); - Matcher matcher = pattern.matcher(str); - if (matcher.find()) { - return true; - } - } - return false; - } - - public void asynExec(String shellPath, String... params) { - this.tracker.beforeStart(); - AsyncShellRunnable asyncShell = new AsyncShellRunnable(shellPath, this.tracker, params); - Thread thread = new Thread(asyncShell); - thread.start(); - } - - public void syncExec(String shellPath, String... params) { - List result = new ArrayList(); - String[] cmds = merge(shellPath, params); - try { - tracker.start(); - Process ps = Runtime.getRuntime().exec(cmds); - long pid = getPid(ps); - tracker.setProcessId(pid); - BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); - String line; - boolean hasException = false; - while ((line = br.readLine()) != null) { - if (HasException(line)) { - hasException = true; - } - result.add(line); - tracker.setRunInfo(arrayToString(result.toArray(), "\n")); - tracker.lineChange(line); - } - if (hasException) { - tracker.lineChange("Java exception exist in output"); - tracker.fail(-1); - return; - } - ps.waitFor(); - int exitValue = ps.exitValue(); - if (exitValue != 0) { - tracker.fail(exitValue); - return; - } - tracker.success(); - } catch (Exception e) { - e.printStackTrace(); - result.add(e.getMessage()); - tracker.setRunInfo(arrayToString(result.toArray(), "\n")); - tracker.lineChange(e.getMessage()); - tracker.fail(-1); - } - } - - public void syncScriptExec(String script, String[] envConfig) { - List result = new ArrayList(); - try { - tracker.start(); - Process ps = Runtime.getRuntime().exec("bash +x " + script, envConfig); - long pid = getPid(ps); - tracker.setProcessId(pid); - BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); - String line; - boolean hasException = false; - while ((line = br.readLine()) != null) { - if (HasException(line)) { - hasException = true; - } - result.add(line); - tracker.setRunInfo(arrayToString(result.toArray(), "\n")); - tracker.lineChange(line); - } - if (hasException) { - tracker.lineChange("Java exception exist in output"); - tracker.fail(-1); - return; - } - ps.waitFor(); - int exitValue = ps.exitValue(); - if (exitValue != 0) { - tracker.fail(exitValue); - return; - } - tracker.success(); - } catch (Exception e) { - e.printStackTrace(); - result.add(e.getMessage()); - tracker.setRunInfo(arrayToString(result.toArray(), "\n")); - tracker.lineChange(e.getMessage()); - tracker.fail(-1); - } - } - - public static class AsyncShellRunnable implements Runnable { - - private String shellPath; - private String[] params; - private List result = new ArrayList(); - private ShellTracker tracker; - - public AsyncShellRunnable(String shellPath, ShellTracker tracker, String... params) { - this.shellPath = shellPath; - this.params = params; - this.tracker = tracker; - } - - public void run() { - String[] cmds = merge(shellPath, params); - try { - tracker.start(); - Process ps = Runtime.getRuntime().exec(cmds); - long pid = getPid(ps); - tracker.setProcessId(pid); - BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); - String line; - boolean hasException = false; - while ((line = br.readLine()) != null) { - if (HasException(line)) { - hasException = true; - } - result.add(line); - tracker.setRunInfo(arrayToString(result.toArray(), "\n")); - tracker.lineChange(line); - } - if (hasException) { - tracker.lineChange("Java exception exist in output"); - tracker.fail(-1); - return; - } - ps.waitFor(); - int exitValue = ps.exitValue(); - if (exitValue != 0) { - tracker.fail(exitValue); - return; - } - tracker.success(); - } catch (Exception e) { - e.printStackTrace(); - result.add(e.getMessage()); - tracker.setRunInfo(arrayToString(result.toArray(), "\n")); - tracker.lineChange(e.getMessage()); - tracker.fail(-1); - } - } - } } diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutorImpl.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutorImpl.java new file mode 100644 index 0000000000..fc77f6e780 --- /dev/null +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellExecutorImpl.java @@ -0,0 +1,232 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.inlong.manager.service.cmd.shell; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.inlong.manager.common.consts.InlongConstants; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Slf4j +public class ShellExecutorImpl implements ShellExecutor { + + private static final String[] EXCEPTION_REG = new String[]{"(.*)Caused by: (.*)Exception(.*)", + "(.*)java.net.UnknownHostException(.*)", + "(.*)Copy failed: java.io.IOException: Job failed!(.*)"}; + private ShellTracker tracker; + + public ShellExecutorImpl(ShellTracker tracker) { + this.tracker = tracker; + } + + private static long getPid(Process process) { + try { + Field f = process.getClass().getDeclaredField("pid"); + f.setAccessible(true); + long procHandle = f.getLong(process); + return procHandle; + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + } + + private static String[] merge(String shellPath, String[] paths) { + List cmds = new ArrayList(); + cmds.add(shellPath); + for (String path : paths) { + if (StringUtils.isBlank(path)) { + continue; + } + cmds.add(path); + } + String[] strings = new String[cmds.size()]; + cmds.toArray(strings); + return strings; + } + + private static String arrayToString(Object[] array, String split) { + if (array == null || array.length == 0) { + return InlongConstants.BLANK; + } + StringBuilder str = new StringBuilder(); + for (int i = 0, length = array.length; i < length; i++) { + if (i != 0) { + str.append(split); + } + str.append(array[i]); + } + return str.toString(); + } + + private static boolean HasException(String str) { + for (String reg : EXCEPTION_REG) { + Pattern pattern = Pattern.compile(reg); + Matcher matcher = pattern.matcher(str); + if (matcher.find()) { + return true; + } + } + return false; + } + + public void asyncExec(String shellPath, String... params) { + AsyncShellRunnable asyncShell = new AsyncShellRunnable(shellPath, this.tracker, params); + Thread thread = new Thread(asyncShell); + thread.start(); + } + + public void syncExec(String shellPath, String... params) { + List result = new ArrayList(); + String[] cmds = merge(shellPath, params); + try { + tracker.start(); + Process ps = Runtime.getRuntime().exec(cmds); + long pid = getPid(ps); + tracker.setProcessId(pid); + BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); + String line; + boolean hasException = false; + while ((line = br.readLine()) != null) { + if (HasException(line)) { + hasException = true; + } + result.add(line); + tracker.setRunResult(arrayToString(result.toArray(), InlongConstants.NEW_LINE)); + tracker.lineChange(line); + } + if (hasException) { + tracker.lineChange("Java exception exist in output"); + tracker.fail(-1); + return; + } + ps.waitFor(); + int exitValue = ps.exitValue(); + if (exitValue != 0) { + tracker.fail(exitValue); + return; + } + tracker.success(); + } catch (Exception e) { + e.printStackTrace(); + result.add(e.getMessage()); + tracker.setRunResult(arrayToString(result.toArray(), InlongConstants.NEW_LINE)); + tracker.lineChange(e.getMessage()); + tracker.fail(-1); + } + } + + public void syncScriptExec(String script, String[] envConfig) { + List result = new ArrayList(); + try { + tracker.start(); + Process ps = Runtime.getRuntime().exec("bash +x " + script, envConfig); + long pid = getPid(ps); + tracker.setProcessId(pid); + BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); + String line; + boolean hasException = false; + while ((line = br.readLine()) != null) { + if (HasException(line)) { + hasException = true; + } + result.add(line); + tracker.setRunResult(arrayToString(result.toArray(), InlongConstants.NEW_LINE)); + tracker.lineChange(line); + } + if (hasException) { + tracker.lineChange("Java exception exist in output"); + tracker.fail(-1); + return; + } + ps.waitFor(); + int exitValue = ps.exitValue(); + if (exitValue != 0) { + tracker.fail(exitValue); + return; + } + tracker.success(); + } catch (Exception e) { + e.printStackTrace(); + result.add(e.getMessage()); + tracker.setRunResult(arrayToString(result.toArray(), InlongConstants.NEW_LINE)); + tracker.lineChange(e.getMessage()); + tracker.fail(-1); + } + } + + public static class AsyncShellRunnable implements Runnable { + + private String shellPath; + private String[] params; + private List result = new ArrayList(); + private ShellTracker tracker; + + public AsyncShellRunnable(String shellPath, ShellTracker tracker, String... params) { + this.shellPath = shellPath; + this.params = params; + this.tracker = tracker; + } + + public void run() { + String[] cmds = merge(shellPath, params); + try { + tracker.start(); + Process ps = Runtime.getRuntime().exec(cmds); + long pid = getPid(ps); + tracker.setProcessId(pid); + BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); + String line; + boolean hasException = false; + while ((line = br.readLine()) != null) { + if (HasException(line)) { + hasException = true; + } + result.add(line); + tracker.setRunResult(arrayToString(result.toArray(), InlongConstants.NEW_LINE)); + tracker.lineChange(line); + } + if (hasException) { + tracker.lineChange("Java exception exist in output"); + tracker.fail(-1); + return; + } + ps.waitFor(); + int exitValue = ps.exitValue(); + if (exitValue != 0) { + tracker.fail(exitValue); + return; + } + tracker.success(); + } catch (Exception e) { + e.printStackTrace(); + result.add(e.getMessage()); + tracker.setRunResult(arrayToString(result.toArray(), InlongConstants.NEW_LINE)); + tracker.lineChange(e.getMessage()); + tracker.fail(-1); + } + } + } +} diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellTracker.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellTracker.java index 03f39b6eac..3e75b006e4 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellTracker.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellTracker.java @@ -20,46 +20,44 @@ public interface ShellTracker { /** - * 每次输出行发生改变时,会调用此方法 * - * @param runInfo shell运行信息 + * Update run result for shell cmd + * @param runResult shell result */ - public void setRunInfo(String runInfo); + void setRunResult(String runResult); /** - * 每次输出行改变时,回调此函数 * - * @param line shell最新行信息 + * Update line info + * @param line shell line info */ - public void lineChange(String line); + void lineChange(String line); /** - * 当执行shell文件返回进程id时调用次方法 - * 更新process进程Id * - * @param processId + * Set process ID + * @param processId process id */ - public void setProcessId(long processId); + void setProcessId(long processId); /** - * 多线程开启之前的准备工作 - * 任务开始之前 + * Preparation work */ - public void beforeStart(); + void beforeStart(); /** - * 任务开始 + * Begin exec */ - public void start(); + void start(); /** - * 任务失败 + * Exec failed */ - public void fail(int code); + void fail(int code); /** - * 任务成功 + * Exec success */ - public void success(); + void success(); } diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/SimpleTracker.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellTrackerImpl.java similarity index 61% rename from inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/SimpleTracker.java rename to inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellTrackerImpl.java index 4d32b93191..268ca6470b 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/SimpleTracker.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/cmd/shell/ShellTrackerImpl.java @@ -17,79 +17,48 @@ package org.apache.inlong.manager.service.cmd.shell; +import lombok.Data; + import java.util.ArrayList; import java.util.List; -public class SimpleTracker implements ShellTracker { +@Data +public class ShellTrackerImpl implements ShellTracker { private List result = new ArrayList(); private int code; + private Long processId; + private String runResult; public int getCode() { return code; } - /* - * (non-Javadoc) - * - * @see com.yy.hiido.ShellTracker#fail() - */ public void fail(int code) { this.code = code; } - /* - * (non-Javadoc) - * - * @see com.yy.hiido.ShellTracker#lineChange(java.lang.String) - */ public void lineChange(String line) { result.add(line); } - /* - * (non-Javadoc) - * - * @see com.yy.hiido.ShellTracker#setProcessId(long) - */ - public void setProcessId(long arg0) { + public void setProcessId(long processId) { + this.processId = processId; } - /* - * (non-Javadoc) - * - * @see com.yy.hiido.ShellTracker#setRunInfo(java.lang.String) - */ - public void setRunInfo(String arg0) { + public void setRunResult(String runResult) { + this.runResult = runResult; } - /* - * (non-Javadoc) - * - * @see com.yy.hiido.ShellTracker#beforeStart() - */ public void beforeStart() { } - /* - * (non-Javadoc) - * - * @see com.yy.hiido.ShellTracker#start() - */ public void start() { } - /* - * (non-Javadoc) - * - * @see com.yy.hiido.ShellTracker#success() - */ public void success() { } - /** - * @return the result - */ public List getResult() { return result; }