src/Pure/Admin/isabelle_cronjob.scala
changeset 67752 636f633552a3
parent 67751 361d41701de0
child 67753 f28aee3ad1e6
equal deleted inserted replaced
67751:361d41701de0 67752:636f633552a3
    27   val build_log_dirs =
    27   val build_log_dirs =
    28     List(Path.explode("~/log"), Path.explode("~/afp/log"), Path.explode("~/cronjob/log"))
    28     List(Path.explode("~/log"), Path.explode("~/afp/log"), Path.explode("~/cronjob/log"))
    29 
    29 
    30 
    30 
    31 
    31 
    32   /** particular tasks **/
    32   /** logger tasks **/
       
    33 
       
    34   sealed case class Logger_Task(name: String = "", body: Logger => Unit)
       
    35 
    33 
    36 
    34   /* init and identify Isabelle + AFP repository snapshots */
    37   /* init and identify Isabelle + AFP repository snapshots */
    35 
    38 
    36   private val init =
    39   val init =
    37     Logger_Task("init", logger =>
    40     Logger_Task("init", logger =>
    38       {
    41       {
    39         Isabelle_Devel.make_index()
    42         Isabelle_Devel.make_index()
    40 
    43 
    41         val rev = Mercurial.repository(isabelle_repos).id()
    44         val rev = Mercurial.repository(isabelle_repos).id()
    46       })
    49       })
    47 
    50 
    48 
    51 
    49   /* build release */
    52   /* build release */
    50 
    53 
    51   private val build_release =
    54   val build_release =
    52     Logger_Task("build_release", logger =>
    55     Logger_Task("build_release", logger =>
    53       {
    56       {
    54         val rev = Mercurial.repository(isabelle_repos).id()
    57         val rev = Mercurial.repository(isabelle_repos).id()
    55         val afp_rev = Mercurial.repository(afp_repos).id()
    58         val afp_rev = Mercurial.repository(afp_repos).id()
    56 
    59 
    59       })
    62       })
    60 
    63 
    61 
    64 
    62   /* integrity test of build_history vs. build_history_base */
    65   /* integrity test of build_history vs. build_history_base */
    63 
    66 
    64   private val build_history_base =
    67   val build_history_base =
    65     Logger_Task("build_history_base", logger =>
    68     Logger_Task("build_history_base", logger =>
    66       {
    69       {
    67         val hg =
    70         val hg =
    68           Mercurial.setup_repository(
    71           Mercurial.setup_repository(
    69             File.standard_path(isabelle_repos), isabelle_repos_test)
    72             File.standard_path(isabelle_repos), isabelle_repos_test)
   292           args = "-g slow",
   295           args = "-g slow",
   293           afp = true,
   296           afp = true,
   294           slow = true,
   297           slow = true,
   295           detect = Build_Log.Prop.build_tags + " = " + SQL.string("AFP"))))
   298           detect = Build_Log.Prop.build_tags + " = " + SQL.string("AFP"))))
   296 
   299 
   297   private def remote_build_history(
   300   def remote_build_history(rev: String, afp_rev: Option[String], i: Int, r: Remote_Build)
   298     rev: String, afp_rev: Option[String], i: Int, r: Remote_Build): Logger_Task =
   301     : Logger_Task =
   299   {
   302   {
   300     val task_name = "build_history-" + r.host
   303     val task_name = "build_history-" + r.host
   301     Logger_Task(task_name, logger =>
   304     Logger_Task(task_name, logger =>
   302       {
   305       {
   303         using(r.ssh_session(logger.ssh_context))(ssh =>
   306         using(r.ssh_session(logger.ssh_context))(ssh =>
   332 
   335 
   333 
   336 
   334 
   337 
   335   /** task logging **/
   338   /** task logging **/
   336 
   339 
   337   sealed case class Logger_Task(name: String = "", body: Logger => Unit)
   340   object Log_Service
   338 
   341   {
   339   class Log_Service private[Isabelle_Cronjob](progress: Progress, val ssh_context: SSH.Context)
   342     def apply(options: Options, progress: Progress = No_Progress): Log_Service =
       
   343       new Log_Service(SSH.init_context(options), progress)
       
   344   }
       
   345 
       
   346   class Log_Service private(val ssh_context: SSH.Context, progress: Progress)
   340   {
   347   {
   341     current_log.file.delete
   348     current_log.file.delete
   342 
   349 
   343     private val thread: Consumer_Thread[String] =
   350     private val thread: Consumer_Thread[String] =
   344       Consumer_Thread.fork("cronjob: logger", daemon = true)(
   351       Consumer_Thread.fork("cronjob: logger", daemon = true)(
   431     }
   438     }
   432 
   439 
   433 
   440 
   434     /* log service */
   441     /* log service */
   435 
   442 
   436     val log_service = new Log_Service(progress, SSH.init_context(Options.init()))
   443     val log_service = Log_Service(Options.init(), progress = progress)
   437 
   444 
   438     def run(start_date: Date, task: Logger_Task) { log_service.run_task(start_date, task) }
   445     def run(start_date: Date, task: Logger_Task) { log_service.run_task(start_date, task) }
   439 
   446 
   440     def run_now(task: Logger_Task) { run(Date.now(), task) }
   447     def run_now(task: Logger_Task) { run(Date.now(), task) }
   441 
   448