148 case None | Some("") => |
148 case None | Some("") => |
149 case Some(running) => |
149 case Some(running) => |
150 error("Isabelle cronjob appears to be still running: " + running) |
150 error("Isabelle cronjob appears to be still running: " + running) |
151 } |
151 } |
152 |
152 |
|
153 |
|
154 /* log service */ |
|
155 |
|
156 val log_service = new Log_Service(progress) |
|
157 |
|
158 def run(start_date: Date, task: Logger_Task) { log_service.run_task(start_date, task) } |
|
159 |
|
160 def run_now(task: Logger_Task) { run(Date.now(), task) } |
|
161 |
|
162 |
|
163 /* structured tasks */ |
|
164 |
|
165 def SEQ(tasks: Logger_Task*): Logger_Task = Logger_Task(body = _ => |
|
166 for (task <- tasks.iterator if !exclude_task(task.name) || task.name == "") |
|
167 run_now(task)) |
|
168 |
|
169 def PAR(tasks: Logger_Task*): Logger_Task = Logger_Task(body = _ => |
|
170 { |
|
171 @tailrec def join(running: List[Task]) |
|
172 { |
|
173 running.partition(_.is_finished) match { |
|
174 case (Nil, Nil) => |
|
175 case (Nil, _ :: _) => Thread.sleep(500); join(running) |
|
176 case (_ :: _, remaining) => join(remaining) |
|
177 } |
|
178 } |
|
179 val start_date = Date.now() |
|
180 val running = |
|
181 for (task <- tasks.toList if !exclude_task(task.name)) |
|
182 yield log_service.fork_task(start_date, task) |
|
183 join(running) |
|
184 }) |
|
185 |
|
186 |
|
187 /* main */ |
|
188 |
153 val main_start_date = Date.now() |
189 val main_start_date = Date.now() |
154 val log_service = new Log_Service(progress) |
|
155 |
|
156 File.write(main_state_file, main_start_date + " " + log_service.hostname) |
190 File.write(main_state_file, main_start_date + " " + log_service.hostname) |
157 |
|
158 |
|
159 /* run tasks */ |
|
160 |
|
161 def run(start_date: Date, task: Logger_Task): Unit = |
|
162 log_service.run_task(start_date, task) |
|
163 |
|
164 def run_sequential(tasks: Logger_Task*): Unit = |
|
165 for (task <- tasks.iterator if !exclude_task(task.name) || task.name == "") |
|
166 run(Date.now(), task) |
|
167 |
|
168 def run_parallel(tasks: Logger_Task*) |
|
169 { |
|
170 @tailrec def join(running: List[Task]) |
|
171 { |
|
172 running.partition(_.is_finished) match { |
|
173 case (Nil, Nil) => |
|
174 case (Nil, _ :: _) => Thread.sleep(500); join(running) |
|
175 case (_ :: _, remaining) => join(remaining) |
|
176 } |
|
177 } |
|
178 |
|
179 val start_date = Date.now() |
|
180 val running = |
|
181 for (task <- tasks.toList if !exclude_task(task.name)) |
|
182 yield log_service.fork_task(start_date, task) |
|
183 join(running) |
|
184 } |
|
185 |
|
186 def SEQ(tasks: Logger_Task*): Logger_Task = |
|
187 Logger_Task(body = _ => run_sequential(tasks:_*)) |
|
188 |
|
189 def PAR(tasks: Logger_Task*): Logger_Task = |
|
190 Logger_Task(body = _ => run_parallel(tasks:_*)) |
|
191 |
|
192 |
|
193 /* main */ |
|
194 |
191 |
195 run(main_start_date, |
192 run(main_start_date, |
196 Logger_Task("isabelle_cronjob", _ => |
193 Logger_Task("isabelle_cronjob", _ => |
197 run_sequential(isabelle_identify, build_history_base))) |
194 run_now(SEQ(isabelle_identify, build_history_base)))) |
198 |
195 |
199 log_service.shutdown() |
196 log_service.shutdown() |
200 |
197 |
201 main_state_file.file.delete |
198 main_state_file.file.delete |
202 } |
199 } |