From c4d6d78b7900cddcc8fc0dd706043f0d77953987 Mon Sep 17 00:00:00 2001
From: Jan Kozusznik <jan@kozusznik.cz>
Date: Mon, 15 Jan 2018 15:39:54 +0100
Subject: [PATCH] Testing HaaS API for benchamrk

---
 .../cz/it4i/fiji/haas/BenchmarkJobManager.java  |  4 ++--
 .../src/main/java/cz/it4i/fiji/haas/Job.java    |  2 +-
 .../main/java/cz/it4i/fiji/haas/JobManager.java | 17 ++++++-----------
 .../java/cz/it4i/fiji/haas/RunWithHaaS.java     |  8 +++++++-
 .../java/cz/it4i/fiji/haas/RunBenchmark.java    |  2 +-
 .../it4i/fiji/haas_java_client/HaaSClient.java  | 15 ++++++++-------
 .../haas_java_client/TestHaaSJavaClient.java    |  2 +-
 7 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java
index 69a3fd25..4176ea17 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java
@@ -17,7 +17,7 @@ public class BenchmarkJobManager {
 	private Map<JobInfo, Path> uploadedFiles = new HashMap<>();
 
 	public BenchmarkJobManager(Path workDirectory, Progress progress) throws IOException {
-		jobManager = new JobManager(workDirectory, TestingConstants.getSettings(3, 6));
+		jobManager = new JobManager(workDirectory, TestingConstants.getSettings(2, 6));
 		this.progress = progress;
 	}
 
@@ -29,7 +29,7 @@ public class BenchmarkJobManager {
 	}
 
 	public void startJob(JobInfo jobInfo) {
-		jobInfo.uploadFiles(Arrays.asList(HaaSClient.getUploadingFile(uploadedFiles.get(jobInfo))).stream());
+		jobInfo.uploadFiles(() -> Arrays.asList(HaaSClient.getUploadingFile(uploadedFiles.get(jobInfo))).stream());
 		jobInfo.submit();
 	}
 
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
index 35dfbd96..353ec111 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java
@@ -94,7 +94,7 @@ public class Job {
 		loadJobInfo();
 	}
 
-	public void uploadFiles(Stream<UploadingFile> files) {
+	public void uploadFiles(Supplier<Stream<UploadingFile>> files) {
 		HaaSClient client = this.haasClientSupplier.get();
 		client.uploadFiles(jobId, files, notifier);
 	}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
index 6ee8d4ae..48d610a2 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java
@@ -7,6 +7,7 @@ import java.util.Calendar;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -47,7 +48,7 @@ public class JobManager {
 
 	public JobInfo createJob(Progress progress) throws IOException {
 		Job job;
-		jobs.add(job = new Job(settings.getJobName(),workDirectory, this::getHaasClient, progress));
+		jobs.add(job = new Job(settings.getJobName(), workDirectory, this::getHaasClient, progress));
 		return new JobInfo(job) {
 			@Override
 			public JobState getState() {
@@ -60,14 +61,13 @@ public class JobManager {
 			}
 		};
 	}
-	
-	public JobInfo startJob(Stream<UploadingFile> files, Progress progress) throws IOException {
+
+	public JobInfo startJob(Supplier<Stream<UploadingFile>> files, Progress progress) throws IOException {
 		JobInfo result = createJob(progress);
 		result.uploadFiles(files);
 		result.submit();
 		return result;
 	}
-	
 
 	public Iterable<JobInfo> getJobsNeedingDownload() {
 		return () -> jobs.stream().filter(j -> j.needsDownload()).map(j -> new JobInfo(j)).iterator();
@@ -103,16 +103,14 @@ public class JobManager {
 			this.job = job;
 		}
 
-		
-		public void uploadFiles(Stream<UploadingFile> files) {
+		public void uploadFiles(Supplier<Stream<UploadingFile>> files) {
 			job.uploadFiles(files);
 		}
-		
+
 		public void submit() {
 			job.submit();
 		}
 
-
 		public Long getId() {
 			return job.getJobId();
 		}
@@ -160,13 +158,10 @@ public class JobManager {
 			return time != null ? time.getTime().toString() : "N/A";
 		}
 
-
 		public Path storeDataInWorkdirectory(UploadingFile uploadingFile) throws IOException {
 			return job.storeDataInWorkdirectory(uploadingFile);
 		}
 
 	}
 
-	
-
 }
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java
index e057315c..5bfdc726 100644
--- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java
@@ -51,7 +51,13 @@ public class RunWithHaaS implements Command {
 	public void run() {
 		try {
 			jobManager = new JobManager(getWorkingDirectoryPath(), TestingConstants.getSettings());
-			jobManager.startJob(getContent(dataDirectory).stream().map(HaaSClient::getUploadingFile), ModalDialogs.doModal(new ProgressDialog(getFrame())));
+			jobManager.startJob(() -> {
+				try {
+					return getContent(dataDirectory).stream().map(HaaSClient::getUploadingFile);
+				} catch (IOException e) {
+					throw new RuntimeException(e);
+				}
+			}, ModalDialogs.doModal(new ProgressDialog(getFrame())));
 		} catch (IOException e) {
 			log.error(e);
 		}
diff --git a/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/RunBenchmark.java b/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/RunBenchmark.java
index f03b9160..be06c4e4 100644
--- a/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/RunBenchmark.java
+++ b/haas-imagej-client/src/test/java/cz/it4i/fiji/haas/RunBenchmark.java
@@ -19,7 +19,7 @@ public class RunBenchmark {
 			if(!Files.exists(p)) {
 				Files.createDirectory(p);
 			}
-			BenchmarkJobManager benchmarkJobManager = new BenchmarkJobManager(Paths.get("/tmp"), new P_Progress());
+			BenchmarkJobManager benchmarkJobManager = new BenchmarkJobManager(p, new P_Progress());
 			JobInfo ji = benchmarkJobManager.createJob();
 			log.info("job: " + ji + " created.");
 		}
diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
index 0d476174..f8bd00fe 100644
--- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
+++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java
@@ -16,6 +16,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.function.Predicate;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
@@ -166,8 +167,8 @@ public class HaaSClient {
 		return start(files, name, templateParameters, dummyNotifier);
 	}
 
-	public long start(Stream<UploadingFile> files, String name, Collection<Entry<String, String>> templateParameters,
-			ProgressNotifier notifier) {
+	public long start(Supplier<Stream<UploadingFile>> files, String name,
+			Collection<Entry<String, String>> templateParameters, ProgressNotifier notifier) {
 		notifier.setTitle("Starting job");
 		try {
 			long jobId = doCreateJob(name, templateParameters, notifier);
@@ -189,7 +190,7 @@ public class HaaSClient {
 		}
 	}
 
-	public void uploadFiles(long jobId, Stream<UploadingFile> files, ProgressNotifier notifier) {
+	public void uploadFiles(long jobId, Supplier<Stream<UploadingFile>> files, ProgressNotifier notifier) {
 		try {
 			doUploadFiles(jobId, files, notifier);
 		} catch (ServiceException | JSchException | IOException e) {
@@ -341,16 +342,16 @@ public class HaaSClient {
 		notifier.done();
 	}
 
-	private void doUploadFiles(long jobId, Stream<UploadingFile> files, ProgressNotifier notifier)
+	private void doUploadFiles(long jobId, Supplier<Stream<UploadingFile>> files, ProgressNotifier notifier)
 			throws RemoteException, ServiceException, JSchException, IOException, UnsupportedEncodingException {
 		FileTransferMethodExt fileTransfer = getFileTransfer().getFileTransferMethod(jobId, getSessionID());
-		List<Long> totalSizes = StreamSupport.stream(files.spliterator(), false).map(f -> f.getLength())
+		List<Long> totalSizes = StreamSupport.stream(files.get().spliterator(), false).map(f -> f.getLength())
 				.collect(Collectors.toList());
 		long totalSize = totalSizes.stream().mapToLong(l -> l.longValue()).sum();
 		TransferFileProgressForHaaSClient progress = new TransferFileProgressForHaaSClient(totalSize, notifier);
 		try (ScpClient scpClient = getScpClient(fileTransfer)) {
 			int index = 0;
-			for (UploadingFile file : (Iterable<UploadingFile>) files::iterator) {
+			for (UploadingFile file : (Iterable<UploadingFile>) files.get()::iterator) {
 				String item;
 				progress.startNewFile(totalSizes.get(index));
 				notifier.addItem(item = "Uploading file: " + file.getName());
@@ -383,7 +384,7 @@ public class HaaSClient {
 
 	private long start(Iterable<Path> files, String name, Collection<Entry<String, String>> templateParameters,
 			ProgressNotifier notifier) {
-		Stream<UploadingFile> fileStream = StreamSupport.stream(files.spliterator(), false)
+		Supplier<Stream<UploadingFile>> fileStream = () -> StreamSupport.stream(files.spliterator(), false)
 				.map(file -> getUploadingFile(file));
 		return start(fileStream, name, templateParameters, notifier);
 	}
diff --git a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java
index c0737927..a17c391a 100644
--- a/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java
+++ b/haas-java-client/src/test/java/cz/it4i/fiji/haas_java_client/TestHaaSJavaClient.java
@@ -21,7 +21,7 @@ public class TestHaaSJavaClient {
 		params.put("inputParam", "someStringParam");
 		Path baseDir = Paths.get("/home/koz01/aaa");
 		HaaSClient client = new HaaSClient(TestingConstants.getSettings(1l, 600,7l, "DD-17-31"));
-		long jobId = client.start(Arrays.asList(Paths.get("/home/koz01/.inputrc")), "TestOutRedirect", params.entrySet());
+		long jobId = client.start(Arrays.asList(Paths.get("/home/koz01/aaa/vecmath.jar")), "TestOutRedirect", params.entrySet());
 		Path workDir = baseDir.resolve("" + jobId);
 		if (!Files.isDirectory(workDir)) {
 			Files.createDirectories(workDir);
-- 
GitLab