1 package compbio.stat.collector;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
5 import java.util.List;
\r
7 import compbio.ws.client.Services;
\r
9 public class StatProcessor {
\r
11 List<JobStat> stats;
\r
13 public StatProcessor(List<JobStat> stats) {
\r
17 public List<JobStat> getClusterJobs() {
\r
18 return getJobSubset(true);
\r
21 public List<JobStat> getLocalJobs() {
\r
22 return getJobSubset(false);
\r
25 private List<JobStat> getJobSubset(boolean cluster) {
\r
26 List<JobStat> clusterjobs = new ArrayList<JobStat>();
\r
27 for (JobStat js : stats) {
\r
29 if (js.isClusterJob()) {
\r
30 clusterjobs.add(js);
\r
33 if (!js.isClusterJob()) {
\r
34 clusterjobs.add(js);
\r
43 * TODO List<JobStat> getNewStat() throws SQLException { Set<String> jobids
\r
44 * = new HashSet<String>(); for(JobStat js: stats) { jobids.add(js.jobname);
\r
45 * } StatDB.removeRecordedJobs(jobids); List<String> newjobs = new
\r
46 * HashSet<String>(); for(String jobid: jobids) { if(newjobs.co)
\r
47 * jobids.add(js.jobname); } }
\r
51 * Not collected. Excludes all cancelled jobs, and jobs with no results as
\r
52 * these are reported separately.
\r
54 public List<JobStat> getAbandonedJobs() {
\r
55 List<JobStat> abJobs = new ArrayList<JobStat>();
\r
56 for (JobStat js : stats) {
\r
57 if (!js.isCollected && !js.isCancelled && js.hasResult()) {
\r
65 * Started & finished but did not produce result
\r
69 public List<JobStat> getFailedJobs() {
\r
70 List<JobStat> failedJobs = new ArrayList<JobStat>();
\r
71 for (JobStat js : stats) {
\r
72 if (js.hasStarted() && js.getIsFinished() && !js.hasResult()) {
\r
79 public List<JobStat> getCancelledJobs() {
\r
80 List<JobStat> abJobs = new ArrayList<JobStat>();
\r
81 for (JobStat js : stats) {
\r
82 if (js.isCancelled) {
\r
89 public List<JobStat> sortByRuntime() {
\r
90 List<JobStat> abJobs = new ArrayList<JobStat>(stats);
\r
91 Collections.sort(abJobs, JobStat.RUNTIME);
\r
95 public List<JobStat> sortByStartTime() {
\r
96 List<JobStat> abJobs = new ArrayList<JobStat>(stats);
\r
97 Collections.sort(abJobs, JobStat.STARTTIME);
\r
101 public List<JobStat> sortByResultSize() {
\r
102 List<JobStat> abJobs = new ArrayList<JobStat>(stats);
\r
103 Collections.sort(abJobs, JobStat.RESULTSIZE);
\r
107 public int getJobNumber() {
\r
108 return stats.size();
\r
111 public List<JobStat> getJobs() {
\r
115 public StatProcessor getSingleWSStat(Services webService) {
\r
116 List<JobStat> wsStat = new ArrayList<JobStat>();
\r
117 for (JobStat js : stats) {
\r
118 if (js.webService == webService) {
\r
122 return new StatProcessor(wsStat);
\r
125 public long getTotalRuntime() {
\r
127 for (JobStat js : stats) {
\r
128 int jobtime = js.getRuntime();
\r
129 if (jobtime != ExecutionStatCollector.UNDEFINED) {
\r
130 counter += jobtime;
\r
136 public List<JobStat> getIncompleteJobs() {
\r
137 List<JobStat> aJobs = new ArrayList<JobStat>();
\r
138 for (JobStat js : stats) {
\r
139 if (!js.hasResult() && !js.getIsCancelled()) {
\r
146 public String reportStat() {
\r
147 String report = "Total Jobs: " + getJobNumber() + "\n";
\r
148 report += "Abandoned Jobs: " + getAbandonedJobs().size() + "\n";
\r
149 report += "Cancelled Jobs: " + getCancelledJobs().size() + "\n";
\r
150 report += "Total Runtime (s): " + getTotalRuntime() + "\n";
\r
151 report += "Unsuccessful Jobs: " + getIncompleteJobs().size() + "\n";
\r
152 if (sortByRuntime().size() > 10) {
\r
153 report += "10 longest jobs: \n\n" + sortByRuntime().subList(0, 9)
\r
156 report += "longest jobs: \n\n" + sortByRuntime() + "\n";
\r
158 if (sortByResultSize().size() > 10)
\r
159 report += "10 biggest jobs: \n\n"
\r
160 + sortByResultSize().subList(0, 9) + "\n";
\r
162 report += "biggest jobs: \n\n" + sortByResultSize() + "\n";
\r
168 public String toString() {
\r
169 return this.reportStat();
\r