src/Pure/Admin/build_log.scala
changeset 64298 0f000101652a
parent 64297 12a47f263122
child 64299 4f11063c6e55
equal deleted inserted replaced
64297:12a47f263122 64298:0f000101652a
    16 import scala.util.matching.Regex
    16 import scala.util.matching.Regex
    17 
    17 
    18 
    18 
    19 object Build_Log
    19 object Build_Log
    20 {
    20 {
    21   /** directory content **/
    21   /** content **/
    22 
    22 
    23   /* file names */
    23   /* properties */
    24 
    24 
    25   def log_date(date: Date): String =
    25   object Prop
    26     String.format(Locale.ROOT, "%s.%05d",
    26   {
    27       DateTimeFormatter.ofPattern("yyyy-MM-dd").format(date.rep),
    27     val build_tags = "build_tags"
    28       new java.lang.Long((date.time - date.midnight.time).ms / 1000))
    28     val build_group_id = "build_group_id"
    29 
    29     val build_id = "build_id"
    30   def log_subdir(date: Date): Path =
    30     val build_engine = "build_engine"
    31     Path.explode("log") + Path.explode(date.rep.getYear.toString)
    31     val build_host = "build_host"
    32 
    32     val build_start = "build_start"
    33   def log_filename(engine: String, date: Date, more: List[String] = Nil): Path =
    33     val build_end = "build_end"
    34     Path.explode((engine :: log_date(date) :: more).mkString("", "_", ".log"))
    34     val isabelle_version = "isabelle_version"
    35 
    35     val afp_version = "afp_version"
    36 
    36   }
    37   /* log file collections */
    37 
    38 
    38 
    39   def is_log(file: JFile): Boolean =
    39   /* settings */
    40     List(".log", ".log.gz", ".log.xz").exists(ext => file.getName.endsWith(ext))
       
    41 
       
    42   def isatest_files(dir: Path): List[JFile] =
       
    43     File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("isatest-makeall-"))
       
    44 
       
    45   def afp_test_files(dir: Path): List[JFile] =
       
    46     File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("afp-test-devel-"))
       
    47 
       
    48 
       
    49 
       
    50   /** settings **/
       
    51 
    40 
    52   object Settings
    41   object Settings
    53   {
    42   {
    54     val build_settings = List("ISABELLE_BUILD_OPTIONS")
    43     val build_settings = List("ISABELLE_BUILD_OPTIONS")
    55     val ml_settings = List("ML_PLATFORM", "ML_HOME", "ML_SYSTEM", "ML_OPTIONS")
    44     val ml_settings = List("ML_PLATFORM", "ML_HOME", "ML_SYSTEM", "ML_OPTIONS")
    74 
    63 
    75     def show(): String =
    64     def show(): String =
    76       cat_lines(
    65       cat_lines(
    77         build_settings.map(Entry.getenv(_)) ::: List("") ::: ml_settings.map(Entry.getenv(_)))
    66         build_settings.map(Entry.getenv(_)) ::: List("") ::: ml_settings.map(Entry.getenv(_)))
    78   }
    67   }
       
    68 
       
    69 
       
    70   /* file names */
       
    71 
       
    72   def log_date(date: Date): String =
       
    73     String.format(Locale.ROOT, "%s.%05d",
       
    74       DateTimeFormatter.ofPattern("yyyy-MM-dd").format(date.rep),
       
    75       new java.lang.Long((date.time - date.midnight.time).ms / 1000))
       
    76 
       
    77   def log_subdir(date: Date): Path =
       
    78     Path.explode("log") + Path.explode(date.rep.getYear.toString)
       
    79 
       
    80   def log_filename(engine: String, date: Date, more: List[String] = Nil): Path =
       
    81     Path.explode((engine :: log_date(date) :: more).mkString("", "_", ".log"))
       
    82 
       
    83 
       
    84   /* log file collections */
       
    85 
       
    86   def is_log(file: JFile): Boolean =
       
    87     List(".log", ".log.gz", ".log.xz").exists(ext => file.getName.endsWith(ext))
       
    88 
       
    89   def isatest_files(dir: Path): List[JFile] =
       
    90     File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("isatest-makeall-"))
       
    91 
       
    92   def afp_test_files(dir: Path): List[JFile] =
       
    93     File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("afp-test-devel-"))
    79 
    94 
    80 
    95 
    81 
    96 
    82   /** log file **/
    97   /** log file **/
    83 
    98 
   243 
   258 
   244 
   259 
   245 
   260 
   246   /** meta info **/
   261   /** meta info **/
   247 
   262 
   248   object Field
       
   249   {
       
   250     val build_tags = "build_tags"
       
   251     val build_group_id = "build_group_id"
       
   252     val build_id = "build_id"
       
   253     val build_engine = "build_engine"
       
   254     val build_host = "build_host"
       
   255     val build_start = "build_start"
       
   256     val build_end = "build_end"
       
   257     val isabelle_version = "isabelle_version"
       
   258     val afp_version = "afp_version"
       
   259   }
       
   260 
       
   261   object Meta_Info
   263   object Meta_Info
   262   {
   264   {
   263     val empty: Meta_Info = Meta_Info(Nil, Nil)
   265     val empty: Meta_Info = Meta_Info(Nil, Nil)
   264   }
   266   }
   265 
   267 
   309       val build_id =
   311       val build_id =
   310       {
   312       {
   311         val prefix = if (host != "") host else if (engine != "") engine else ""
   313         val prefix = if (host != "") host else if (engine != "") engine else ""
   312         (if (prefix == "") "build" else prefix) + ":" + start.time.ms
   314         (if (prefix == "") "build" else prefix) + ":" + start.time.ms
   313       }
   315       }
   314       val build_engine = if (engine == "") Nil else List(Field.build_engine -> engine)
   316       val build_engine = if (engine == "") Nil else List(Prop.build_engine -> engine)
   315       val build_host = if (host == "") Nil else List(Field.build_host -> host)
   317       val build_host = if (host == "") Nil else List(Prop.build_host -> host)
   316 
   318 
   317       val start_date = List(Field.build_start -> start.toString)
   319       val start_date = List(Prop.build_start -> start.toString)
   318       val end_date =
   320       val end_date =
   319         log_file.lines.last match {
   321         log_file.lines.last match {
   320           case End(log_file.Strict_Date(end_date)) =>
   322           case End(log_file.Strict_Date(end_date)) =>
   321             List(Field.build_end -> end_date.toString)
   323             List(Prop.build_end -> end_date.toString)
   322           case _ => Nil
   324           case _ => Nil
   323         }
   325         }
   324 
   326 
   325       val isabelle_version =
   327       val isabelle_version =
   326         log_file.find_match(Isabelle_Version).map(Field.isabelle_version -> _)
   328         log_file.find_match(Isabelle_Version).map(Prop.isabelle_version -> _)
   327       val afp_version =
   329       val afp_version =
   328         log_file.find_match(AFP_Version).map(Field.afp_version -> _)
   330         log_file.find_match(AFP_Version).map(Prop.afp_version -> _)
   329 
   331 
   330       Meta_Info((Field.build_id -> build_id) :: build_engine ::: build_host :::
   332       Meta_Info((Prop.build_id -> build_id) :: build_engine ::: build_host :::
   331           start_date ::: end_date ::: isabelle_version.toList ::: afp_version.toList,
   333           start_date ::: end_date ::: isabelle_version.toList ::: afp_version.toList,
   332         log_file.get_settings(Settings.all_settings))
   334         log_file.get_settings(Settings.all_settings))
   333     }
   335     }
   334 
   336 
   335     log_file.lines match {
   337     log_file.lines match {