[yocto] [PATCH 7/8] Refactor powertop, oprofile and ust2 models to remote duplicate code

Ioana Grigoropol ioanax.grigoropol at intel.com
Tue Apr 30 07:36:30 PDT 2013


- each of the powertop, oprofile and ust2 commands runs a command remote using RemoteShellExec(former RemoteApplication) following these steps:
	- start the command
	- wait to terminate
	- terminate the command
	- check exit code
- in order to remove duplicate code in these models
	-> move this code stub to BaseModel in the method runRemoteShellExec
	-> customize the retrieval of remote file after running the command (special case for ust2)

Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
---
 .../yocto/sdk/remotetools/actions/BaseModel.java   |   19 +++++++++
 .../sdk/remotetools/actions/OprofileModel.java     |   32 +--------------
 .../sdk/remotetools/actions/PowertopModel.java     |   20 +---------
 .../yocto/sdk/remotetools/actions/Ust2Model.java   |   41 +++++++-------------
 4 files changed, 37 insertions(+), 75 deletions(-)

diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/BaseModel.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/BaseModel.java
index 51ab09b..d7a201e 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/BaseModel.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/BaseModel.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.yocto.sdk.remotetools.actions;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -17,6 +19,7 @@ import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.rse.core.model.IHost;
 import org.yocto.sdk.remotetools.RSEHelper;
+import org.yocto.sdk.remotetools.remote.RemoteShellExec;
 
 abstract public class BaseModel implements IRunnableWithProgress {
 	protected IHost host;
@@ -41,6 +44,7 @@ abstract public class BaseModel implements IRunnableWithProgress {
 	private static final String POST_PROCESS_MSG = "Finishing ";
 	private static final String CLEAN_MSG = "Cleaning ";
 	private static final String DOTS = "...";
+	private static final String FAILED_ERR_MSG = " failed with exit code ";
 
 	public void preProcess(IProgressMonitor monitor) throws InvocationTargetException,	InterruptedException{
 		//upload script to remote
@@ -100,4 +104,19 @@ abstract public class BaseModel implements IRunnableWithProgress {
 	protected void getDataFile(IProgressMonitor monitor) throws Exception {
 		RSEHelper.getRemoteFile( host, localFile, remoteFile, monitor);
 	}
+	protected void runRemoteShellExec(IProgressMonitor monitor, String args, boolean cancelable) throws Exception {
+		try {
+			RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
+			exec.start(null, args, monitor);
+			monitor.worked(1);
+			checkTerminate(exec.getInputStream());
+			int exit_code = exec.waitFor(cancelable ? monitor : null);
+			exec.terminate();
+			if(exit_code != 0)
+				throw new Exception(taskName + FAILED_ERR_MSG + new Integer(exit_code).toString());
+		} finally {
+			monitor.done();
+		}
+	}
+	protected void checkTerminate(InputStream inputStream) throws IOException {}
 }
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java
index d11c343..6e8d044 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java
@@ -26,7 +26,6 @@ import org.yocto.sdk.ide.preferences.PreferenceConstants;
 import org.yocto.sdk.remotetools.CommonHelper;
 import org.yocto.sdk.remotetools.LocalJob;
 import org.yocto.sdk.remotetools.Messages;
-import org.yocto.sdk.remotetools.remote.RemoteShellExec;
 
 public class OprofileModel extends BaseModel {
 	
@@ -44,40 +43,13 @@ public class OprofileModel extends BaseModel {
 	}
 	
 	private void startServer(IProgressMonitor monitor) throws Exception {
-		int exit_code;
-		RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
 		String args="start -d oprofile-server";
-		
-		try {
-			monitor.beginTask("Starting oprofile-server", 2);
-			//starting oprofile-server
-			exec.start(null,args,monitor);
-			monitor.worked(1);
-
-			exit_code = exec.waitFor(monitor);
-			exec.terminate();
-			if(exit_code!=0) {
-				throw new RuntimeException("Starting oprofile-server failed with exit code " + new Integer(exit_code).toString());
-			}
-		}finally {
-			monitor.done();
-		}
+		runRemoteShellExec(monitor, args, true);
 	}
 	
 	private void stopServer(IProgressMonitor monitor) throws Exception {
-		
-		RemoteShellExec exec = new RemoteShellExec(host, remoteExec); 
 		String args = "stop -d oprofile-server";
-		try {
-			monitor.beginTask("Stopping oprofile-server", 2);
-			exec.start(null, args, monitor);
-			monitor.worked(1);
-			//no cancel for stop server
-			exec.waitFor(null);
-			exec.terminate();
-		}finally {
-			monitor.done();
-		}
+		runRemoteShellExec(monitor, args, false);
 	}
 	
 	private String getSearchPath()
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java
index 37af342..f2a1f99 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java
@@ -13,7 +13,6 @@ package org.yocto.sdk.remotetools.actions;
 import java.io.File;
 import java.lang.reflect.InvocationTargetException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
 import java.util.Calendar;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -23,8 +22,6 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
-import org.yocto.sdk.remotetools.RSEHelper;
-import org.yocto.sdk.remotetools.remote.RemoteShellExec;
 import org.yocto.sdk.remotetools.views.BaseFileView;
 
 public class PowertopModel extends BaseModel {
@@ -58,8 +55,6 @@ public class PowertopModel extends BaseModel {
 	}
 	
 	private void generateData(IProgressMonitor monitor) throws Exception {
-		int exit_code;
-		RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
 		String currentDate = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()).toString();
 		remoteFile = new String(REMOTE_FILE_PREFIX + currentDate);
 		localFile = new String(remoteFile + LOCAL_FILE_SUFFIX);
@@ -67,20 +62,7 @@ public class PowertopModel extends BaseModel {
 		String args = "start -l " + remoteFile + " powertop -d -t " + time.toString();
 		if(showpid)
 			args += " -p";
-		
-		try {
-			monitor.beginTask("Starting powertop", 2);
-			//starting oprofile-server
-			exec.start(null,args,monitor);
-			monitor.worked(1);
-			exit_code = exec.waitFor(monitor);
-			exec.terminate();
-			if(exit_code != 0) {
-				throw new Exception("Starting powertop failed with exit code " + new Integer(exit_code).toString());
-			}
-		}finally {
-			monitor.done();
-		}
+		runRemoteShellExec(monitor, args, true);
 	}
 
 	@Override
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java
index ce58546..b9eca2f 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java
@@ -12,6 +12,8 @@ package org.yocto.sdk.remotetools.actions;
 
 import java.io.BufferedReader;
 import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.reflect.InvocationTargetException;
 
@@ -26,7 +28,6 @@ import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.ui.IWorkbenchWindow;
-import org.yocto.sdk.remotetools.remote.RemoteShellExec;
 
 public class Ust2Model extends BaseModel {
 	
@@ -55,33 +56,21 @@ public class Ust2Model extends BaseModel {
 		this.window = window;
 	}
 	
-	private void generateData(IProgressMonitor monitor) throws Exception {
-		int exit_code;
-		RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
-		
-		try {
-			String temp;
-			int idx;
-			monitor.beginTask("Getting remote ust2 trace", 2);
-			//starting usttrace
-			exec.start(null, trace_loc, monitor);
-			monitor.worked(1);
-			BufferedReader in = new BufferedReader(new InputStreamReader(exec.getInputStream()));
-			while((temp = in.readLine())!=null) {
-				idx = temp.indexOf(DATAFILE_PREFIX);
-				if(idx != -1) {
-					remoteFile = temp.substring(idx + DATAFILE_PREFIX.length());
-					break;
-				}
-			}
-			exit_code = exec.waitFor(monitor);
-			exec.terminate();
-			if(exit_code!=0) {
-				throw new Exception("Getting remote ust2 trace failed with exit code " + new Integer(exit_code).toString());
+	@Override
+	protected void checkTerminate(InputStream is) throws IOException {
+		String temp;
+		BufferedReader in = new BufferedReader(new InputStreamReader(is));
+		while((temp = in.readLine())!=null) {
+			int idx = temp.indexOf(DATAFILE_PREFIX);
+			if(idx != -1) {
+				remoteFile = temp.substring(idx + DATAFILE_PREFIX.length());
+				break;
 			}
-		}finally {
-			monitor.done();
 		}
+	}
+	
+	private void generateData(IProgressMonitor monitor) throws Exception {
+		runRemoteShellExec(monitor, trace_loc, true);
 		if(remoteFile == null)
 			throw new Exception("Ust: null remote data file");
 		if(remoteFile.endsWith(REMOTE_FILE_SUFFIX)==false)
-- 
1.7.9.5




More information about the yocto mailing list