437 chapter: String, |
437 chapter: String, |
438 groups: List[String], |
438 groups: List[String], |
439 threads: Option[Int], |
439 threads: Option[Int], |
440 timing: Timing, |
440 timing: Timing, |
441 ml_timing: Timing, |
441 ml_timing: Timing, |
442 ml_statistics: List[Properties.T], |
|
443 heap_size: Option[Long], |
442 heap_size: Option[Long], |
444 status: Session_Status.Value) |
443 status: Session_Status.Value, |
|
444 ml_statistics: List[Properties.T]) |
445 { |
445 { |
446 def finished: Boolean = status == Session_Status.FINISHED |
446 def finished: Boolean = status == Session_Status.FINISHED |
447 } |
447 } |
448 |
448 |
449 object Build_Info |
449 object Build_Info |
456 val timing_cpu = SQL.Column.long("timing_cpu") |
456 val timing_cpu = SQL.Column.long("timing_cpu") |
457 val timing_gc = SQL.Column.long("timing_gc") |
457 val timing_gc = SQL.Column.long("timing_gc") |
458 val ml_timing_elapsed = SQL.Column.long("ml_timing_elapsed") |
458 val ml_timing_elapsed = SQL.Column.long("ml_timing_elapsed") |
459 val ml_timing_cpu = SQL.Column.long("ml_timing_cpu") |
459 val ml_timing_cpu = SQL.Column.long("ml_timing_cpu") |
460 val ml_timing_gc = SQL.Column.long("ml_timing_gc") |
460 val ml_timing_gc = SQL.Column.long("ml_timing_gc") |
461 val ml_statistics = SQL.Column.bytes("ml_statistics") |
|
462 val heap_size = SQL.Column.long("heap_size") |
461 val heap_size = SQL.Column.long("heap_size") |
463 val status = SQL.Column.string("status") |
462 val status = SQL.Column.string("status") |
|
463 val ml_statistics = SQL.Column.bytes("ml_statistics") |
464 |
464 |
465 val table = SQL.Table("isabelle_build_log_build_info", |
465 val table = SQL.Table("isabelle_build_log_build_info", |
466 List(Meta_Info.log_name, session_name, chapter, groups, threads, timing_elapsed, timing_cpu, |
466 List(Meta_Info.log_name, session_name, chapter, groups, threads, timing_elapsed, timing_cpu, |
467 timing_gc, ml_timing_elapsed, ml_timing_cpu, ml_timing_gc, ml_statistics, heap_size, status)) |
467 timing_gc, ml_timing_elapsed, ml_timing_cpu, ml_timing_gc, heap_size, status, ml_statistics)) |
468 |
468 |
469 val table0 = table.copy(columns = table.columns.take(2)) |
469 val table0 = table.copy(columns = table.columns.take(2)) |
470 } |
470 } |
471 |
471 |
472 sealed case class Build_Info(sessions: Map[String, Session_Entry]) |
472 sealed case class Build_Info(sessions: Map[String, Session_Entry]) |
518 var timing = Map.empty[String, Timing] |
518 var timing = Map.empty[String, Timing] |
519 var ml_timing = Map.empty[String, Timing] |
519 var ml_timing = Map.empty[String, Timing] |
520 var started = Set.empty[String] |
520 var started = Set.empty[String] |
521 var failed = Set.empty[String] |
521 var failed = Set.empty[String] |
522 var cancelled = Set.empty[String] |
522 var cancelled = Set.empty[String] |
|
523 var heap_sizes = Map.empty[String, Long] |
523 var ml_statistics = Map.empty[String, List[Properties.T]] |
524 var ml_statistics = Map.empty[String, List[Properties.T]] |
524 var heap_sizes = Map.empty[String, Long] |
|
525 |
525 |
526 def all_sessions: Set[String] = |
526 def all_sessions: Set[String] = |
527 chapter.keySet ++ groups.keySet ++ threads.keySet ++ timing.keySet ++ ml_timing.keySet ++ |
527 chapter.keySet ++ groups.keySet ++ threads.keySet ++ timing.keySet ++ ml_timing.keySet ++ |
528 failed ++ cancelled ++ started ++ ml_statistics.keySet ++ heap_sizes.keySet |
528 failed ++ cancelled ++ started ++ heap_sizes.keySet ++ ml_statistics.keySet |
529 |
529 |
530 |
530 |
531 for (line <- log_file.lines) { |
531 for (line <- log_file.lines) { |
532 line match { |
532 line match { |
533 case Session_No_Groups(Chapter_Name(chapt, name)) => |
533 case Session_No_Groups(Chapter_Name(chapt, name)) => |
591 chapter.getOrElse(name, ""), |
591 chapter.getOrElse(name, ""), |
592 groups.getOrElse(name, Nil), |
592 groups.getOrElse(name, Nil), |
593 threads.get(name), |
593 threads.get(name), |
594 timing.getOrElse(name, Timing.zero), |
594 timing.getOrElse(name, Timing.zero), |
595 ml_timing.getOrElse(name, Timing.zero), |
595 ml_timing.getOrElse(name, Timing.zero), |
596 ml_statistics.getOrElse(name, Nil).reverse, |
|
597 heap_sizes.get(name), |
596 heap_sizes.get(name), |
598 status) |
597 status, |
|
598 ml_statistics.getOrElse(name, Nil).reverse) |
599 (name -> entry) |
599 (name -> entry) |
600 }):_*) |
600 }):_*) |
601 Build_Info(sessions) |
601 Build_Info(sessions) |
602 } |
602 } |
603 |
603 |
748 db.set_long(stmt, 7, session.timing.cpu.proper_ms) |
748 db.set_long(stmt, 7, session.timing.cpu.proper_ms) |
749 db.set_long(stmt, 8, session.timing.gc.proper_ms) |
749 db.set_long(stmt, 8, session.timing.gc.proper_ms) |
750 db.set_long(stmt, 9, session.ml_timing.elapsed.proper_ms) |
750 db.set_long(stmt, 9, session.ml_timing.elapsed.proper_ms) |
751 db.set_long(stmt, 10, session.ml_timing.cpu.proper_ms) |
751 db.set_long(stmt, 10, session.ml_timing.cpu.proper_ms) |
752 db.set_long(stmt, 11, session.ml_timing.gc.proper_ms) |
752 db.set_long(stmt, 11, session.ml_timing.gc.proper_ms) |
753 db.set_bytes(stmt, 12, compress_properties(session.ml_statistics)) |
753 db.set_long(stmt, 12, session.heap_size) |
754 db.set_long(stmt, 13, session.heap_size) |
754 db.set_string(stmt, 13, session.status.toString) |
755 db.set_string(stmt, 14, session.status.toString) |
755 db.set_bytes(stmt, 14, compress_properties(session.ml_statistics)) |
756 stmt.execute() |
756 stmt.execute() |
757 } |
757 } |
758 }) |
758 }) |
759 } |
759 } |
760 } |
760 } |
791 Time.ms(db.long(rs, Build_Info.timing_gc))), |
791 Time.ms(db.long(rs, Build_Info.timing_gc))), |
792 ml_timing = |
792 ml_timing = |
793 Timing(Time.ms(db.long(rs, Build_Info.ml_timing_elapsed)), |
793 Timing(Time.ms(db.long(rs, Build_Info.ml_timing_elapsed)), |
794 Time.ms(db.long(rs, Build_Info.ml_timing_cpu)), |
794 Time.ms(db.long(rs, Build_Info.ml_timing_cpu)), |
795 Time.ms(db.long(rs, Build_Info.ml_timing_gc))), |
795 Time.ms(db.long(rs, Build_Info.ml_timing_gc))), |
796 ml_statistics = uncompress_properties(db.bytes(rs, Build_Info.ml_statistics)), |
|
797 heap_size = db.get(rs, Build_Info.heap_size, db.long _), |
796 heap_size = db.get(rs, Build_Info.heap_size, db.long _), |
798 status = Session_Status.withName(db.string(rs, Build_Info.status))) |
797 status = Session_Status.withName(db.string(rs, Build_Info.status)), |
|
798 ml_statistics = uncompress_properties(db.bytes(rs, Build_Info.ml_statistics))) |
799 session_name -> session_entry |
799 session_name -> session_entry |
800 }).toMap |
800 }).toMap |
801 }) |
801 }) |
802 Build_Info(sessions) |
802 Build_Info(sessions) |
803 } |
803 } |