1 package org.kuali.common.devops.jenkins.scan;
2
3 import static com.google.common.collect.Lists.newArrayList;
4 import static org.kuali.common.devops.jenkins.scan.Stats.buildSummaryFromIntegers;
5 import static org.kuali.common.devops.jenkins.scan.Stats.buildSummaryFromLongs;
6
7 import java.util.Arrays;
8 import java.util.List;
9
10 import com.google.common.collect.ImmutableList;
11
12 public class Jobs {
13
14 public static SummaryStatistics getStartTimeStats(List<Job> jobs) {
15 List<Long> longs = newArrayList();
16 for (Job job : jobs) {
17 for (JobExecution execution : job.getExecutions()) {
18 longs.add(execution.getStartTime());
19 }
20 }
21 return buildSummaryFromLongs(longs);
22 }
23
24 public static int getLastBuildNumber(Job job) {
25 List<Integer> integers = newArrayList();
26 for (JobExecution execution : job.getExecutions()) {
27 integers.add(execution.getNumber());
28 }
29 SummaryStatistics summary = buildSummaryFromIntegers(integers);
30 return new Double(summary.getMax()).intValue();
31 }
32
33 public static long getTotalExecutions(List<Job> jobs) {
34 int builds = 0;
35 for (Job job : jobs) {
36 builds += getLastBuildNumber(job);
37 }
38 return builds;
39 }
40
41 public static JobDurationStatistics getRecordedDurationStatistics(Job job) {
42 List<Long> durations = newArrayList();
43 for (JobExecution execution : job.getExecutions()) {
44 durations.add(execution.getDuration());
45 }
46 SummaryStatistics summary = buildSummaryFromLongs(durations);
47 return JobDurationStatistics.builder().withName(job.getName()).withSummary(summary).withValues(durations).build();
48 }
49
50 public static SummaryStatistics getCalculatedDurationStatistics(List<Job> jobs) {
51 List<Long> durations = newArrayList();
52 for (Job job : jobs) {
53 JobDurationStatistics jds = getCalculatedDurationStatistics(job);
54 durations.addAll(jds.getValues());
55 }
56 return buildSummaryFromLongs(durations);
57 }
58
59 public static JobDurationStatistics getCalculatedDurationStatistics(Job job) {
60 JobDurationStatistics recorded = getRecordedDurationStatistics(job);
61 List<JobExecution> executions = job.getExecutions();
62 if (executions.isEmpty()) {
63 return recorded;
64 }
65 int size = executions.size();
66 JobExecution last = executions.get(size - 1);
67 int latestBuildNumber = last.getNumber();
68 Long[] values = new Long[latestBuildNumber];
69 long duration = new Double(recorded.getSummary().getAvg()).longValue();
70 Arrays.fill(values, duration);
71 List<Long> durations = ImmutableList.copyOf(values);
72 SummaryStatistics summary = buildSummaryFromLongs(durations);
73 return JobDurationStatistics.builder().withName(job.getName()).withSummary(summary).withValues(durations).build();
74 }
75
76 }