247 threads: Option[Int], |
247 threads: Option[Int], |
248 timing: Option[Timing], |
248 timing: Option[Timing], |
249 ml_timing: Option[Timing], |
249 ml_timing: Option[Timing], |
250 status: Session_Status.Value) |
250 status: Session_Status.Value) |
251 { |
251 { |
252 def ok: Boolean = status == Session_Status.EXISTING || status == Session_Status.FINISHED |
|
253 def finished: Boolean = status == Session_Status.FINISHED |
252 def finished: Boolean = status == Session_Status.FINISHED |
254 } |
253 } |
255 |
254 |
256 sealed case class Build_Info(sessions: Map[String, Session_Entry]) |
255 sealed case class Build_Info(sessions: Map[String, Session_Entry]) |
257 { |
256 { |
288 new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time, (\d+):(\d+):(\d+) cpu time.*$""") |
287 new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time, (\d+):(\d+):(\d+) cpu time.*$""") |
289 val Session_Finished2 = |
288 val Session_Finished2 = |
290 new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time.*$""") |
289 new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time.*$""") |
291 val Session_Timing = |
290 val Session_Timing = |
292 new Regex("""^Timing (\S+) \((\d) threads, (\d+\.\d+)s elapsed time, (\d+\.\d+)s cpu time, (\d+\.\d+)s GC time.*$""") |
291 new Regex("""^Timing (\S+) \((\d) threads, (\d+\.\d+)s elapsed time, (\d+\.\d+)s cpu time, (\d+\.\d+)s GC time.*$""") |
|
292 val Session_Started = new Regex("""^(?:Running|Building) (\S+) \.\.\.$""") |
293 val Session_Failed = new Regex("""^(\S+) FAILED""") |
293 val Session_Failed = new Regex("""^(\S+) FAILED""") |
294 val Session_Cancelled = new Regex("""^(\S+) CANCELLED""") |
294 val Session_Cancelled = new Regex("""^(\S+) CANCELLED""") |
295 |
295 |
296 var chapter = Map.empty[String, String] |
296 var chapter = Map.empty[String, String] |
297 var groups = Map.empty[String, List[String]] |
297 var groups = Map.empty[String, List[String]] |
298 var threads = Map.empty[String, Int] |
298 var threads = Map.empty[String, Int] |
299 var timing = Map.empty[String, Timing] |
299 var timing = Map.empty[String, Timing] |
300 var ml_timing = Map.empty[String, Timing] |
300 var ml_timing = Map.empty[String, Timing] |
|
301 var started = Set.empty[String] |
301 var failed = Set.empty[String] |
302 var failed = Set.empty[String] |
302 var cancelled = Set.empty[String] |
303 var cancelled = Set.empty[String] |
303 def all_sessions: Set[String] = |
304 def all_sessions: Set[String] = |
304 chapter.keySet ++ groups.keySet ++ threads.keySet ++ |
305 chapter.keySet ++ groups.keySet ++ threads.keySet ++ |
305 timing.keySet ++ ml_timing.keySet ++ failed ++ cancelled |
306 timing.keySet ++ ml_timing.keySet ++ failed ++ cancelled ++ started |
306 |
307 |
307 |
308 |
308 for (line <- log_file.lines) { |
309 for (line <- log_file.lines) { |
309 line match { |
310 line match { |
310 case Session_No_Groups(Chapter_Name(chapt, name)) => |
311 case Session_No_Groups(Chapter_Name(chapt, name)) => |
311 chapter += (name -> chapt) |
312 chapter += (name -> chapt) |
312 groups += (name -> Nil) |
313 groups += (name -> Nil) |
313 case Session_Groups(Chapter_Name(chapt, name), grps) => |
314 case Session_Groups(Chapter_Name(chapt, name), grps) => |
314 chapter += (name -> chapt) |
315 chapter += (name -> chapt) |
315 groups += (name -> Word.explode(grps)) |
316 groups += (name -> Word.explode(grps)) |
|
317 case Session_Started(name) => |
|
318 started += name |
316 case Session_Finished1(name, |
319 case Session_Finished1(name, |
317 Value.Int(e1), Value.Int(e2), Value.Int(e3), |
320 Value.Int(e1), Value.Int(e2), Value.Int(e3), |
318 Value.Int(c1), Value.Int(c2), Value.Int(c3)) => |
321 Value.Int(c1), Value.Int(c2), Value.Int(c3)) => |
319 val elapsed = Time.hms(e1, e2, e3) |
322 val elapsed = Time.hms(e1, e2, e3) |
320 val cpu = Time.hms(c1, c2, c3) |
323 val cpu = Time.hms(c1, c2, c3) |
338 Map( |
341 Map( |
339 (for (name <- all_sessions.toList) yield { |
342 (for (name <- all_sessions.toList) yield { |
340 val status = |
343 val status = |
341 if (failed(name)) Session_Status.FAILED |
344 if (failed(name)) Session_Status.FAILED |
342 else if (cancelled(name)) Session_Status.CANCELLED |
345 else if (cancelled(name)) Session_Status.CANCELLED |
343 else if (timing.isDefinedAt(name)) Session_Status.FINISHED |
346 else if (timing.isDefinedAt(name) || ml_timing.isDefinedAt(name)) |
|
347 Session_Status.FINISHED |
|
348 else if (started(name)) Session_Status.FAILED |
344 else Session_Status.EXISTING |
349 else Session_Status.EXISTING |
345 val entry = |
350 val entry = |
346 Session_Entry( |
351 Session_Entry( |
347 chapter.getOrElse(name, ""), |
352 chapter.getOrElse(name, ""), |
348 groups.getOrElse(name, Nil), |
353 groups.getOrElse(name, Nil), |