1 /* Copyright (c) 2011 Peter Troshin
\r
3 * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.0
\r
5 * This library is free software; you can redistribute it and/or modify it under the terms of the
\r
6 * Apache License version 2 as published by the Apache Software Foundation
\r
8 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
\r
9 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache
\r
10 * License for more details.
\r
12 * A copy of the license is in apache_license.txt. It is also available here:
\r
13 * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
\r
15 * Any republication or derived work distributed in source code form
\r
16 * must include this copyright and license notice.
\r
18 package compbio.stat.collector;
\r
20 import java.util.ArrayList;
\r
21 import java.util.Collections;
\r
22 import java.util.List;
\r
24 import compbio.ws.client.Services;
\r
26 public class StatProcessor {
\r
28 List<JobStat> stats;
\r
30 public StatProcessor(List<JobStat> stats) {
\r
34 public List<JobStat> getClusterJobs() {
\r
35 return getJobSubset(true);
\r
38 public List<JobStat> getLocalJobs() {
\r
39 return getJobSubset(false);
\r
42 private List<JobStat> getJobSubset(boolean cluster) {
\r
43 List<JobStat> clusterjobs = new ArrayList<JobStat>();
\r
44 for (JobStat js : stats) {
\r
46 if (js.isClusterJob()) {
\r
47 clusterjobs.add(js);
\r
50 if (!js.isClusterJob()) {
\r
51 clusterjobs.add(js);
\r
60 * TODO List<JobStat> getNewStat() throws SQLException { Set<String> jobids
\r
61 * = new HashSet<String>(); for(JobStat js: stats) { jobids.add(js.jobname);
\r
62 * } StatDB.removeRecordedJobs(jobids); List<String> newjobs = new
\r
63 * HashSet<String>(); for(String jobid: jobids) { if(newjobs.co)
\r
64 * jobids.add(js.jobname); } }
\r
68 * Not collected. Excludes all cancelled jobs, and jobs with no results as
\r
69 * these are reported separately.
\r
71 public List<JobStat> getAbandonedJobs() {
\r
72 List<JobStat> abJobs = new ArrayList<JobStat>();
\r
73 for (JobStat js : stats) {
\r
74 if (!js.isCollected && !js.isCancelled && js.hasResult()) {
\r
82 * Started & finished but did not produce result
\r
86 public List<JobStat> getFailedJobs() {
\r
87 List<JobStat> failedJobs = new ArrayList<JobStat>();
\r
88 for (JobStat js : stats) {
\r
89 if (js.hasStarted() && js.getIsFinished() && !js.hasResult()) {
\r
96 public List<JobStat> getCancelledJobs() {
\r
97 List<JobStat> abJobs = new ArrayList<JobStat>();
\r
98 for (JobStat js : stats) {
\r
99 if (js.isCancelled) {
\r
106 public List<JobStat> sortByRuntime() {
\r
107 List<JobStat> abJobs = new ArrayList<JobStat>(stats);
\r
108 Collections.sort(abJobs, JobStat.RUNTIME);
\r
112 public List<JobStat> sortByStartTime() {
\r
113 List<JobStat> abJobs = new ArrayList<JobStat>(stats);
\r
114 Collections.sort(abJobs, JobStat.STARTTIME);
\r
118 public List<JobStat> sortByResultSize() {
\r
119 List<JobStat> abJobs = new ArrayList<JobStat>(stats);
\r
120 Collections.sort(abJobs, JobStat.RESULTSIZE);
\r
124 public int getJobNumber() {
\r
125 return stats.size();
\r
128 public List<JobStat> getJobs() {
\r
132 public StatProcessor getSingleWSStat(Services webService) {
\r
133 List<JobStat> wsStat = new ArrayList<JobStat>();
\r
134 for (JobStat js : stats) {
\r
135 if (js.webService == webService) {
\r
139 return new StatProcessor(wsStat);
\r
142 public long getTotalRuntime() {
\r
144 for (JobStat js : stats) {
\r
145 int jobtime = js.getRuntime();
\r
146 if (jobtime != ExecutionStatCollector.UNDEFINED) {
\r
147 counter += jobtime;
\r
153 public List<JobStat> getIncompleteJobs() {
\r
154 List<JobStat> aJobs = new ArrayList<JobStat>();
\r
155 for (JobStat js : stats) {
\r
156 if (!js.hasResult() && !js.getIsCancelled()) {
\r
163 public String reportStat() {
\r
164 String report = "Total Jobs: " + getJobNumber() + "\n";
\r
165 report += "Abandoned Jobs: " + getAbandonedJobs().size() + "\n";
\r
166 report += "Cancelled Jobs: " + getCancelledJobs().size() + "\n";
\r
167 report += "Total Runtime (s): " + getTotalRuntime() + "\n";
\r
168 report += "Unsuccessful Jobs: " + getIncompleteJobs().size() + "\n";
\r
169 if (sortByRuntime().size() > 10) {
\r
170 report += "10 longest jobs: \n\n" + sortByRuntime().subList(0, 9)
\r
173 report += "longest jobs: \n\n" + sortByRuntime() + "\n";
\r
175 if (sortByResultSize().size() > 10)
\r
176 report += "10 biggest jobs: \n\n"
\r
177 + sortByResultSize().subList(0, 9) + "\n";
\r
179 report += "biggest jobs: \n\n" + sortByResultSize() + "\n";
\r
185 public String toString() {
\r
186 return this.reportStat();
\r