src/Pure/Admin/build_log.scala
changeset 65627 bb185e442c95
parent 65626 55d7a4fe8236
child 65628 fd87fb909b89
equal deleted inserted replaced
65626:55d7a4fe8236 65627:bb185e442c95
   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     }