src/Pure/Admin/build_log.scala
changeset 73340 0ffcad1f6130
parent 73033 d2690444c00a
child 73342 0bf768567d9f
equal deleted inserted replaced
73339:9efdebe24c65 73340:0ffcad1f6130
   872           if (ssh_host == "") None
   872           if (ssh_host == "") None
   873           else Some(SSH.open_session(options, host = ssh_host, user = ssh_user, port = ssh_port)),
   873           else Some(SSH.open_session(options, host = ssh_host, user = ssh_user, port = ssh_port)),
   874         ssh_close = true)
   874         ssh_close = true)
   875     }
   875     }
   876 
   876 
   877     def update_database(db: PostgreSQL.Database, dirs: List[Path], ml_statistics: Boolean = false)
   877     def update_database(
       
   878       db: PostgreSQL.Database, dirs: List[Path], ml_statistics: Boolean = false): Unit =
   878     {
   879     {
   879       val log_files =
   880       val log_files =
   880         dirs.flatMap(dir =>
   881         dirs.flatMap(dir =>
   881           File.find_files(dir.file, pred = Log_File.is_log(_), follow_links = true))
   882           File.find_files(dir.file, pred = Log_File.is_log(_), follow_links = true))
   882       write_info(db, log_files, ml_statistics = ml_statistics)
   883       write_info(db, log_files, ml_statistics = ml_statistics)
   885       db.create_view(Data.pull_date_table(afp = true))
   886       db.create_view(Data.pull_date_table(afp = true))
   886       db.create_view(Data.universal_table)
   887       db.create_view(Data.universal_table)
   887     }
   888     }
   888 
   889 
   889     def snapshot_database(db: PostgreSQL.Database, sqlite_database: Path,
   890     def snapshot_database(db: PostgreSQL.Database, sqlite_database: Path,
   890       days: Int = 100, ml_statistics: Boolean = false)
   891       days: Int = 100, ml_statistics: Boolean = false): Unit =
   891     {
   892     {
   892       Isabelle_System.make_directory(sqlite_database.dir)
   893       Isabelle_System.make_directory(sqlite_database.dir)
   893       sqlite_database.file.delete
   894       sqlite_database.file.delete
   894 
   895 
   895       using(SQLite.open_database(sqlite_database))(db2 =>
   896       using(SQLite.open_database(sqlite_database))(db2 =>
   950 
   951 
   951     def domain(db: SQL.Database, table: SQL.Table, column: SQL.Column): Set[String] =
   952     def domain(db: SQL.Database, table: SQL.Table, column: SQL.Column): Set[String] =
   952       db.using_statement(table.select(List(column), distinct = true))(stmt =>
   953       db.using_statement(table.select(List(column), distinct = true))(stmt =>
   953         stmt.execute_query().iterator(_.string(column)).toSet)
   954         stmt.execute_query().iterator(_.string(column)).toSet)
   954 
   955 
   955     def update_meta_info(db: SQL.Database, log_name: String, meta_info: Meta_Info)
   956     def update_meta_info(db: SQL.Database, log_name: String, meta_info: Meta_Info): Unit =
   956     {
   957     {
   957       val table = Data.meta_info_table
   958       val table = Data.meta_info_table
   958       db.using_statement(db.insert_permissive(table))(stmt =>
   959       db.using_statement(db.insert_permissive(table))(stmt =>
   959       {
   960       {
   960         stmt.string(1) = log_name
   961         stmt.string(1) = log_name
   966         }
   967         }
   967         stmt.execute()
   968         stmt.execute()
   968       })
   969       })
   969     }
   970     }
   970 
   971 
   971     def update_sessions(db: SQL.Database, log_name: String, build_info: Build_Info)
   972     def update_sessions(db: SQL.Database, log_name: String, build_info: Build_Info): Unit =
   972     {
   973     {
   973       val table = Data.sessions_table
   974       val table = Data.sessions_table
   974       db.using_statement(db.insert_permissive(table))(stmt =>
   975       db.using_statement(db.insert_permissive(table))(stmt =>
   975       {
   976       {
   976         val sessions =
   977         val sessions =
   997           stmt.execute()
   998           stmt.execute()
   998         }
   999         }
   999       })
  1000       })
  1000     }
  1001     }
  1001 
  1002 
  1002     def update_theories(db: SQL.Database, log_name: String, build_info: Build_Info)
  1003     def update_theories(db: SQL.Database, log_name: String, build_info: Build_Info): Unit =
  1003     {
  1004     {
  1004       val table = Data.theories_table
  1005       val table = Data.theories_table
  1005       db.using_statement(db.insert_permissive(table))(stmt =>
  1006       db.using_statement(db.insert_permissive(table))(stmt =>
  1006       {
  1007       {
  1007         val sessions =
  1008         val sessions =
  1021           stmt.execute()
  1022           stmt.execute()
  1022         }
  1023         }
  1023       })
  1024       })
  1024     }
  1025     }
  1025 
  1026 
  1026     def update_ml_statistics(db: SQL.Database, log_name: String, build_info: Build_Info)
  1027     def update_ml_statistics(db: SQL.Database, log_name: String, build_info: Build_Info): Unit =
  1027     {
  1028     {
  1028       val table = Data.ml_statistics_table
  1029       val table = Data.ml_statistics_table
  1029       db.using_statement(db.insert_permissive(table))(stmt =>
  1030       db.using_statement(db.insert_permissive(table))(stmt =>
  1030       {
  1031       {
  1031         val ml_stats: List[(String, Option[Bytes])] =
  1032         val ml_stats: List[(String, Option[Bytes])] =
  1040           stmt.execute()
  1041           stmt.execute()
  1041         }
  1042         }
  1042       })
  1043       })
  1043     }
  1044     }
  1044 
  1045 
  1045     def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false)
  1046     def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false): Unit =
  1046     {
  1047     {
  1047       abstract class Table_Status(table: SQL.Table)
  1048       abstract class Table_Status(table: SQL.Table)
  1048       {
  1049       {
  1049         db.create_table(table)
  1050         db.create_table(table)
  1050         private var known: Set[String] = domain(db, table, Data.log_name)
  1051         private var known: Set[String] = domain(db, table, Data.log_name)
  1051 
  1052 
  1052         def required(file: JFile): Boolean = !known(Log_File.plain_name(file.getName))
  1053         def required(file: JFile): Boolean = !known(Log_File.plain_name(file.getName))
  1053 
  1054 
  1054         def update_db(db: SQL.Database, log_file: Log_File): Unit
  1055         def update_db(db: SQL.Database, log_file: Log_File): Unit
  1055         def update(log_file: Log_File)
  1056         def update(log_file: Log_File): Unit =
  1056         {
  1057         {
  1057           if (!known(log_file.name)) {
  1058           if (!known(log_file.name)) {
  1058             update_db(db, log_file)
  1059             update_db(db, log_file)
  1059             known += log_file.name
  1060             known += log_file.name
  1060           }
  1061           }