# HG changeset patch # User wenzelm # Date 1493629134 -7200 # Node ID 2773b6859c55895f5cac226e5aa70201b6102858 # Parent c266f045258bc13b98e5f20e67e545157e00ab89 download Jenkins logs with inlined ml_statistics; diff -r c266f045258b -r 2773b6859c55 src/Pure/Admin/jenkins.scala --- a/src/Pure/Admin/jenkins.scala Mon May 01 10:55:46 2017 +0200 +++ b/src/Pure/Admin/jenkins.scala Mon May 01 10:58:54 2017 +0200 @@ -39,6 +39,19 @@ name <- JSON.string(job, "name") } yield name + + def download_logs(job_names: List[String], dir: Path) + { + val store = Sessions.store() + for { + job_name <- job_names.iterator + info <- build_job_infos(job_name).iterator + } info.download_log(store, dir) + } + + + /* job info */ + sealed case class Job_Info( job_name: String, timestamp: Long, @@ -74,6 +87,25 @@ } } } + + def download_log(store: Sessions.Store, dir: Path) + { + val log_dir = dir + Build_Log.log_subdir(date) + val log_path = log_dir + log_filename + + if (!log_path.is_file) { + val ml_statistics = + session_logs.map(_._1).toSet.toList.sorted.flatMap(session_name => + read_ml_statistics(store, session_name). + map(props => (Build_Log.SESSION_NAME -> session_name) :: props)) + + Isabelle_System.mkdirs(log_dir) + File.write_xz(log_path.ext("xz"), + terminate_lines(Url.read(main_log) :: + ml_statistics.map(Build_Log.Log_File.print_props(Build_Log.ML_STATISTICS_MARKER, _))), + XZ.options(6)) + } + } } def build_job_infos(job_name: String): List[Job_Info] =