equal
deleted
inserted
replaced
124 |
124 |
125 object Timing_Data { |
125 object Timing_Data { |
126 def median_time(obs: List[Time]): Time = obs.sortBy(_.ms).drop(obs.length / 2).head |
126 def median_time(obs: List[Time]): Time = obs.sortBy(_.ms).drop(obs.length / 2).head |
127 def mean_time(obs: Iterable[Time]): Time = Time.ms(obs.map(_.ms).sum / obs.size) |
127 def mean_time(obs: Iterable[Time]): Time = Time.ms(obs.map(_.ms).sum / obs.size) |
128 |
128 |
129 private val dummy_entries = |
129 private def dummy_entries(host: Host, host_factor: Double) = |
130 List( |
130 List( |
131 Timing_Entry("dummy", "dummy", 1, Time.minutes(5)), |
131 Timing_Entry("dummy", host.info.hostname, 1, Time.minutes(5).scale(host_factor)), |
132 Timing_Entry("dummy", "dummy", 8, Time.minutes(1))) |
132 Timing_Entry("dummy", host.info.hostname, 8, Time.minutes(1).scale(host_factor))) |
133 |
|
134 def dummy: Timing_Data = new Timing_Data(dummy_entries, Host_Infos.dummy) |
|
135 |
133 |
136 def make( |
134 def make( |
137 host_infos: Host_Infos, |
135 host_infos: Host_Infos, |
138 build_history: List[(Build_Log.Meta_Info, Build_Log.Build_Info)], |
136 build_history: List[(Build_Log.Meta_Info, Build_Log.Build_Info)], |
139 ): Timing_Data = { |
137 ): Timing_Data = { |
148 host <- hosts.find(_.info.hostname == build_host).toList |
146 host <- hosts.find(_.info.hostname == build_host).toList |
149 threads = session_info.threads.getOrElse(host.info.num_cpus) |
147 threads = session_info.threads.getOrElse(host.info.num_cpus) |
150 } yield (job_name, hostname, threads) -> session_info.timing.elapsed |
148 } yield (job_name, hostname, threads) -> session_info.timing.elapsed |
151 |
149 |
152 val entries = |
150 val entries = |
153 if (measurements.isEmpty) dummy_entries |
151 if (measurements.isEmpty) { |
|
152 val default_host = host_infos.hosts.sorted(host_infos.host_speeds).head |
|
153 host_infos.hosts.flatMap(host => |
|
154 dummy_entries(host, host_infos.host_factor(default_host, host))) |
|
155 } |
154 else |
156 else |
155 measurements.groupMap(_._1)(_._2).toList.map { |
157 measurements.groupMap(_._1)(_._2).toList.map { |
156 case ((job_name, hostname, threads), timings) => |
158 case ((job_name, hostname, threads), timings) => |
157 Timing_Entry(job_name, hostname, threads, median_time(timings)) |
159 Timing_Entry(job_name, hostname, threads, median_time(timings)) |
158 } |
160 } |