77 sealed case class Session( |
77 sealed case class Session( |
78 name: String, threads: Int, entries: List[Entry], ml_statistics: ML_Statistics) |
78 name: String, threads: Int, entries: List[Entry], ml_statistics: ML_Statistics) |
79 { |
79 { |
80 require(entries.nonEmpty) |
80 require(entries.nonEmpty) |
81 |
81 |
82 def sort_entries: Session = |
82 lazy val sorted_entries: List[Entry] = |
83 copy(entries = entries.sortBy(entry => - entry.pull_date.unix_epoch)) |
83 entries.sortBy(entry => - entry.pull_date.unix_epoch) |
84 |
84 |
85 def head: Entry = entries.head |
85 def head: Entry = sorted_entries.head |
86 def order: Long = - head.timing.elapsed.ms |
86 def order: Long = - head.timing.elapsed.ms |
87 |
87 |
88 def finished_entries: List[Entry] = entries.filter(_.finished) |
88 def finished_entries: List[Entry] = sorted_entries.filter(_.finished) |
89 def finished_entries_size: Int = |
89 def finished_entries_size: Int = |
90 finished_entries.map(entry => entry.pull_date.unix_epoch).toSet.size |
90 finished_entries.map(entry => entry.pull_date.unix_epoch).toSet.size |
91 |
91 |
92 def check_timing: Boolean = finished_entries_size >= 3 |
92 def check_timing: Boolean = finished_entries_size >= 3 |
93 def check_heap: Boolean = |
93 def check_heap: Boolean = |
261 }) |
261 }) |
262 |
262 |
263 val sorted_entries = |
263 val sorted_entries = |
264 (for { |
264 (for { |
265 (name, sessions) <- data_entries.toList |
265 (name, sessions) <- data_entries.toList |
266 sorted_sessions <- proper_list(sessions.toList.map(p => p._2.sort_entries).sortBy(_.order)) |
266 sorted_sessions <- proper_list(sessions.toList.map(_._2).sortBy(_.order)) |
267 } |
267 } |
268 yield { |
268 yield { |
269 val hosts = get_hosts(name).toList.sorted |
269 val hosts = get_hosts(name).toList.sorted |
270 val stretch = data_stretch(name) |
270 val stretch = data_stretch(name) |
271 Data_Entry(name, hosts, stretch, sorted_sessions) |
271 Data_Entry(name, hosts, stretch, sorted_sessions) |