src/Pure/Admin/build_log.scala
changeset 65703 cead65c19f2e
parent 65702 7c6a91deb212
child 65705 d0ca2a3ea657
equal deleted inserted replaced
65702:7c6a91deb212 65703:cead65c19f2e
   794     def update_meta_info(db: SQL.Database, log_file: Log_File)
   794     def update_meta_info(db: SQL.Database, log_file: Log_File)
   795     {
   795     {
   796       val meta_info = log_file.parse_meta_info()
   796       val meta_info = log_file.parse_meta_info()
   797       val table = Data.meta_info_table
   797       val table = Data.meta_info_table
   798 
   798 
   799       db.transaction {
   799       db.using_statement(db.insert_permissive(table))(stmt =>
   800         db.using_statement(table.delete(Data.log_name.where_equal(log_file.name)))(_.execute)
   800       {
   801         db.using_statement(table.insert())(stmt =>
   801         db.set_string(stmt, 1, log_file.name)
   802         {
   802         for ((c, i) <- table.columns.tail.zipWithIndex) {
   803           db.set_string(stmt, 1, log_file.name)
   803           if (c.T == SQL.Type.Date)
   804           for ((c, i) <- table.columns.tail.zipWithIndex) {
   804             db.set_date(stmt, i + 2, meta_info.get_date(c))
   805             if (c.T == SQL.Type.Date)
   805           else
   806               db.set_date(stmt, i + 2, meta_info.get_date(c))
   806             db.set_string(stmt, i + 2, meta_info.get(c))
   807             else
   807         }
   808               db.set_string(stmt, i + 2, meta_info.get(c))
   808         stmt.execute()
   809           }
   809       })
   810           stmt.execute()
       
   811         })
       
   812       }
       
   813     }
   810     }
   814 
   811 
   815     def update_sessions(db: SQL.Database, log_file: Log_File)
   812     def update_sessions(db: SQL.Database, log_file: Log_File)
   816     {
   813     {
   817       val build_info = log_file.parse_build_info()
   814       val build_info = log_file.parse_build_info()
   818       val table = Data.sessions_table
   815       val table = Data.sessions_table
   819 
   816 
   820       db.transaction {
   817       db.using_statement(db.insert_permissive(table))(stmt =>
   821         db.using_statement(table.delete(Data.log_name.where_equal(log_file.name)))(_.execute)
   818       {
   822         db.using_statement(table.insert())(stmt =>
   819         val entries_iterator =
   823         {
   820           if (build_info.sessions.isEmpty) Iterator("" -> Session_Entry.empty)
   824           val entries_iterator =
   821           else build_info.sessions.iterator
   825             if (build_info.sessions.isEmpty) Iterator("" -> Session_Entry.empty)
   822         for ((session_name, session) <- entries_iterator) {
   826             else build_info.sessions.iterator
   823           db.set_string(stmt, 1, log_file.name)
   827           for ((session_name, session) <- entries_iterator) {
   824           db.set_string(stmt, 2, session_name)
   828             db.set_string(stmt, 1, log_file.name)
   825           db.set_string(stmt, 3, session.proper_chapter)
   829             db.set_string(stmt, 2, session_name)
   826           db.set_string(stmt, 4, session.proper_groups)
   830             db.set_string(stmt, 3, session.proper_chapter)
   827           db.set_int(stmt, 5, session.threads)
   831             db.set_string(stmt, 4, session.proper_groups)
   828           db.set_long(stmt, 6, session.timing.elapsed.proper_ms)
   832             db.set_int(stmt, 5, session.threads)
   829           db.set_long(stmt, 7, session.timing.cpu.proper_ms)
   833             db.set_long(stmt, 6, session.timing.elapsed.proper_ms)
   830           db.set_long(stmt, 8, session.timing.gc.proper_ms)
   834             db.set_long(stmt, 7, session.timing.cpu.proper_ms)
   831           db.set_double(stmt, 9, session.timing.factor)
   835             db.set_long(stmt, 8, session.timing.gc.proper_ms)
   832           db.set_long(stmt, 10, session.ml_timing.elapsed.proper_ms)
   836             db.set_double(stmt, 9, session.timing.factor)
   833           db.set_long(stmt, 11, session.ml_timing.cpu.proper_ms)
   837             db.set_long(stmt, 10, session.ml_timing.elapsed.proper_ms)
   834           db.set_long(stmt, 12, session.ml_timing.gc.proper_ms)
   838             db.set_long(stmt, 11, session.ml_timing.cpu.proper_ms)
   835           db.set_double(stmt, 13, session.ml_timing.factor)
   839             db.set_long(stmt, 12, session.ml_timing.gc.proper_ms)
   836           db.set_long(stmt, 14, session.heap_size)
   840             db.set_double(stmt, 13, session.ml_timing.factor)
   837           db.set_string(stmt, 15, session.status.map(_.toString))
   841             db.set_long(stmt, 14, session.heap_size)
   838           stmt.execute()
   842             db.set_string(stmt, 15, session.status.map(_.toString))
   839         }
   843             stmt.execute()
   840       })
   844           }
       
   845         })
       
   846       }
       
   847     }
   841     }
   848 
   842 
   849     def update_ml_statistics(db: SQL.Database, log_file: Log_File)
   843     def update_ml_statistics(db: SQL.Database, log_file: Log_File)
   850     {
   844     {
   851       val build_info = log_file.parse_build_info(ml_statistics = true)
   845       val build_info = log_file.parse_build_info(ml_statistics = true)
   852       val table = Data.ml_statistics_table
   846       val table = Data.ml_statistics_table
   853 
   847 
   854       db.transaction {
   848       db.using_statement(db.insert_permissive(table))(stmt =>
   855         db.using_statement(table.delete(Data.log_name.where_equal(log_file.name)))(_.execute)
   849       {
   856         db.using_statement(table.insert())(stmt =>
   850         val ml_stats: List[(String, Option[Bytes])] =
   857         {
   851           Par_List.map[(String, Session_Entry), (String, Option[Bytes])](
   858           val ml_stats: List[(String, Option[Bytes])] =
   852             { case (a, b) => (a, compress_properties(b.ml_statistics).proper) },
   859             Par_List.map[(String, Session_Entry), (String, Option[Bytes])](
   853             build_info.sessions.iterator.filter(p => p._2.ml_statistics.nonEmpty).toList)
   860               { case (a, b) => (a, compress_properties(b.ml_statistics).proper) },
   854         val entries = if (ml_stats.nonEmpty) ml_stats else List("" -> None)
   861               build_info.sessions.iterator.filter(p => p._2.ml_statistics.nonEmpty).toList)
   855         for ((session_name, ml_statistics) <- entries) {
   862           val entries = if (ml_stats.nonEmpty) ml_stats else List("" -> None)
   856           db.set_string(stmt, 1, log_file.name)
   863           for ((session_name, ml_statistics) <- entries) {
   857           db.set_string(stmt, 2, session_name)
   864             db.set_string(stmt, 1, log_file.name)
   858           db.set_bytes(stmt, 3, ml_statistics)
   865             db.set_string(stmt, 2, session_name)
   859           stmt.execute()
   866             db.set_bytes(stmt, 3, ml_statistics)
   860         }
   867             stmt.execute()
   861       })
   868           }
       
   869         })
       
   870       }
       
   871     }
   862     }
   872 
   863 
   873     def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false)
   864     def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false)
   874     {
   865     {
   875       class Table_Status(table: SQL.Table, update_db: (SQL.Database, Log_File) => Unit)
   866       class Table_Status(table: SQL.Table, update_db: (SQL.Database, Log_File) => Unit)