+++ /dev/null
-package compbio.ws.execstat;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.Comparator;\r
-import java.util.Date;\r
-import java.util.List;\r
-\r
-import compbio.engine.client.ConfExecutable;\r
-import compbio.ws.client.Services;\r
-\r
-public class StatProcessor {\r
-\r
- List<JobStat> stats;\r
-\r
- StatProcessor(List<JobStat> stats) {\r
- this.stats = stats;\r
- }\r
-\r
- /*\r
- * TODO List<JobStat> getNewStat() throws SQLException { Set<String> jobids\r
- * = new HashSet<String>(); for(JobStat js: stats) { jobids.add(js.jobname);\r
- * } StatDB.removeRecordedJobs(jobids); List<String> newjobs = new\r
- * HashSet<String>(); for(String jobid: jobids) { if(newjobs.co)\r
- * jobids.add(js.jobname); } }\r
- */\r
-\r
- List<JobStat> getAbandonedJobs() {\r
- List<JobStat> abJobs = new ArrayList<StatProcessor.JobStat>();\r
- for (JobStat js : stats) {\r
- if (!js.isCollected) {\r
- abJobs.add(js);\r
- }\r
- }\r
- return abJobs;\r
- }\r
-\r
- List<JobStat> getCancelledJobs() {\r
- List<JobStat> abJobs = new ArrayList<StatProcessor.JobStat>();\r
- for (JobStat js : stats) {\r
- if (js.isCancelled) {\r
- abJobs.add(js);\r
- }\r
- }\r
- return abJobs;\r
- }\r
-\r
- List<JobStat> sortByRuntime() {\r
- List<JobStat> abJobs = new ArrayList<StatProcessor.JobStat>(stats);\r
- Collections.sort(abJobs, JobStat.RUNTIME);\r
- return abJobs;\r
- }\r
-\r
- List<JobStat> sortByStartTime() {\r
- List<JobStat> abJobs = new ArrayList<StatProcessor.JobStat>(stats);\r
- Collections.sort(abJobs, JobStat.STARTTIME);\r
- return abJobs;\r
- }\r
-\r
- List<JobStat> sortByResultSize() {\r
- List<JobStat> abJobs = new ArrayList<StatProcessor.JobStat>(stats);\r
- Collections.sort(abJobs, JobStat.RESULTSIZE);\r
- return abJobs;\r
- }\r
-\r
- int getJobNumber() {\r
- return stats.size();\r
- }\r
-\r
- public StatProcessor getSingleWSStat(Services webService) {\r
- List<JobStat> wsStat = new ArrayList<StatProcessor.JobStat>();\r
- for (JobStat js : stats) {\r
- if (js.webService == webService) {\r
- wsStat.add(js);\r
- }\r
- }\r
- return new StatProcessor(wsStat);\r
- }\r
-\r
- long getTotalRuntime() {\r
- long counter = 0;\r
- for (JobStat js : stats) {\r
- int jobtime = js.getRuntime();\r
- if (jobtime != ExecutionStatCollector.UNDEFINED) {\r
- counter += jobtime;\r
- }\r
- }\r
- return counter;\r
- }\r
-\r
- List<JobStat> getUnsuccessfulJobs() {\r
- List<JobStat> aJobs = new ArrayList<StatProcessor.JobStat>();\r
- for (JobStat js : stats) {\r
- int jobtime = js.getRuntime();\r
- if (js.resultSize == ExecutionStatCollector.UNDEFINED) {\r
- aJobs.add(js);\r
- }\r
- }\r
- return aJobs;\r
- }\r
-\r
- public String reportStat() {\r
- String report = "Total Jobs: " + getJobNumber() + "\n";\r
- report += "Abandoned Jobs: " + getAbandonedJobs().size() + "\n";\r
- report += "Cancelled Jobs: " + getCancelledJobs().size() + "\n";\r
- report += "Total Runtime (s): " + getTotalRuntime() + "\n";\r
- report += "Unsuccessful Jobs: " + getUnsuccessfulJobs().size() + "\n";\r
- if (sortByRuntime().size() > 10) {\r
- report += "10 longest jobs: \n\n" + sortByRuntime().subList(0, 9)\r
- + "\n";\r
- } else {\r
- report += "longest jobs: \n\n" + sortByRuntime() + "\n";\r
- }\r
- if (sortByResultSize().size() > 10)\r
- report += "10 biggest jobs: \n\n"\r
- + sortByResultSize().subList(0, 9) + "\n";\r
- else {\r
- report += "biggest jobs: \n\n" + sortByResultSize() + "\n";\r
- }\r
- return report;\r
- }\r
-\r
- static class JobStat {\r
-\r
- static final Comparator<JobStat> RUNTIME = new Comparator<JobStat>() {\r
- @Override\r
- public int compare(JobStat o1, JobStat o2) {\r
- return new Integer(o2.getRuntime()).compareTo(o1.getRuntime());\r
- }\r
- };\r
-\r
- static final Comparator<JobStat> STARTTIME = new Comparator<JobStat>() {\r
- @Override\r
- public int compare(JobStat o1, JobStat o2) {\r
- return new Long(o1.start).compareTo(o2.start);\r
- }\r
- };\r
-\r
- static final Comparator<JobStat> RESULTSIZE = new Comparator<JobStat>() {\r
- @Override\r
- public int compare(JobStat o1, JobStat o2) {\r
- return new Long(o2.resultSize).compareTo(o1.resultSize);\r
- }\r
- };\r
-\r
- Services webService;\r
- String clusterJobId;\r
- String jobname;\r
- long start;\r
- long finish;\r
- long inputSize;\r
- long resultSize;\r
- boolean isCollected;\r
- boolean isCancelled;\r
-\r
- JobStat(Services webService, String clusterJobId, String jobname,\r
- long start, long finish, long inputSize, long resultSize,\r
- boolean isCollected, boolean isCancelled) {\r
- super();\r
- this.webService = webService;\r
- this.clusterJobId = clusterJobId;\r
- this.jobname = jobname;\r
- this.start = start;\r
- this.finish = finish;\r
- this.inputSize = inputSize;\r
- this.resultSize = resultSize;\r
- this.isCollected = isCollected;\r
- this.isCancelled = isCancelled;\r
- }\r
-\r
- public boolean isClusterJob() {\r
- return jobname.startsWith(ConfExecutable.CLUSTER_TASK_ID_PREFIX);\r
- }\r
-\r
- @Override\r
- public int hashCode() {\r
- final int prime = 31;\r
- int result = 1;\r
- result = prime * result + (int) (finish ^ (finish >>> 32));\r
- result = prime * result + (int) (inputSize ^ (inputSize >>> 32));\r
- result = prime * result + (isCancelled ? 1231 : 1237);\r
- result = prime * result + (isCollected ? 1231 : 1237);\r
- result = prime * result\r
- + ((jobname == null) ? 0 : jobname.hashCode());\r
- result = prime * result + (int) (resultSize ^ (resultSize >>> 32));\r
- result = prime * result + (int) (start ^ (start >>> 32));\r
- return result;\r
- }\r
-\r
- @Override\r
- public boolean equals(Object obj) {\r
- if (this == obj)\r
- return true;\r
- if (obj == null)\r
- return false;\r
- if (getClass() != obj.getClass())\r
- return false;\r
- JobStat other = (JobStat) obj;\r
- if (finish != other.finish)\r
- return false;\r
- if (inputSize != other.inputSize)\r
- return false;\r
- if (isCancelled != other.isCancelled)\r
- return false;\r
- if (isCollected != other.isCollected)\r
- return false;\r
- if (jobname == null) {\r
- if (other.jobname != null)\r
- return false;\r
- } else if (!jobname.equals(other.jobname))\r
- return false;\r
- if (resultSize != other.resultSize)\r
- return false;\r
- if (start != other.start)\r
- return false;\r
- return true;\r
- }\r
-\r
- public int getRuntime() {\r
- if (start != ExecutionStatCollector.UNDEFINED\r
- && finish != ExecutionStatCollector.UNDEFINED) {\r
- return (int) (finish - start) / 1000;\r
- }\r
- return ExecutionStatCollector.UNDEFINED;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return getJobReport();\r
- }\r
-\r
- String getJobReport() {\r
- String report = "WS: " + webService + "\n";\r
- report += "JOB: " + jobname + "\n";\r
- if (start != ExecutionStatCollector.UNDEFINED) {\r
- report += "Started " + new Date(start) + "\n";\r
- }\r
- if (finish != ExecutionStatCollector.UNDEFINED) {\r
- report += "Finished " + new Date(finish) + "\n";\r
- }\r
- if (start != ExecutionStatCollector.UNDEFINED\r
- && finish != ExecutionStatCollector.UNDEFINED) {\r
- report += "Runtime " + getRuntime() + "\n";\r
- }\r
- report += "Input size " + inputSize + "\n";\r
- report += "Result size " + resultSize + "\n";\r
- report += "ClusterJobID " + clusterJobId + "\n";\r
- report += "Collected? " + isCollected + "\n";\r
- report += "Cancelled? " + isCancelled + "\n";\r
- return report;\r
- }\r
-\r
- /**\r
- * Header Job Started Finished Runtime Input Result\r
- */\r
- String getJobReportTabulated() {\r
- String report = webService + "\t";\r
- report += jobname + "\t";\r
- if (start != ExecutionStatCollector.UNDEFINED) {\r
- report += ExecutionStatCollector.DF.format(new Date(start))\r
- + "\t";\r
- } else {\r
- report += ExecutionStatCollector.UNDEFINED + "\t";\r
- }\r
- if (finish != ExecutionStatCollector.UNDEFINED) {\r
- report += ExecutionStatCollector.DF.format(new Date(finish))\r
- + "\t";\r
- } else {\r
- report += ExecutionStatCollector.UNDEFINED + "\t";\r
- }\r
- if (start != ExecutionStatCollector.UNDEFINED\r
- && finish != ExecutionStatCollector.UNDEFINED) {\r
- report += getRuntime() + "\t";\r
- } else {\r
- report += ExecutionStatCollector.UNDEFINED + "\t";\r
- }\r
- report += inputSize + "\t";\r
- report += resultSize + "\t";\r
- report += clusterJobId + "\t";\r
- report += isCollected + "\t";\r
- report += isCancelled + "\t";\r
- return report;\r
- }\r
-\r
- }\r
-\r
-}\r