}
(** A shell script. *)
-type result = {
- res_job_name : string; (** Job name. *)
- res_serial : Big_int.big_int; (** Job serial number. *)
- res_code : int; (** Return code from the script. *)
- res_tmpdir : string; (** Temporary directory. *)
- res_output : string; (** Filename of output from job. *)
- res_start_time : float; (** When the job started. *)
-}
-(** Result of the run of a job. *)
-
-type cleanup = result -> unit
-(** A cleanup function. *)
-
type variable =
| T_unit
| T_bool of bool
type variables = variable Whenutils.StringMap.t
(** A set of variables. *)
+type preinfo = {
+ pi_job_name : string; (** Job name. *)
+ pi_serial : Big_int.big_int; (** Job serial number. *)
+ pi_variables : (string * variable) list; (** Variables set in job. *)
+ pi_running : preinfo_running_job list; (** List of running jobs. *)
+}
+and preinfo_running_job = {
+ pirun_job_name : string; (** Running job name. *)
+ pirun_serial : Big_int.big_int; (** Running job serial number. *)
+ pirun_start_time : float; (** Running job start time. *)
+ pirun_pid : int; (** Running job process ID. *)
+}
+(** Information available to pre function before the job runs. *)
+
+type result = {
+ res_job_name : string; (** Job name. *)
+ res_serial : Big_int.big_int; (** Job serial number. *)
+ res_code : int; (** Return code from the script. *)
+ res_tmpdir : string; (** Temporary directory. *)
+ res_output : string; (** Filename of output from job. *)
+ res_start_time : float; (** When the job started. *)
+}
+(** Result of the run of a job. *)
+
+type pre = preinfo -> bool
+type post = result -> unit
+(** Pre and post functions. *)
+
type job_cond =
| When_job of whenexpr (** when ... : << >> *)
| Every_job of periodexpr (** every ... : << >> *)
type job = {
job_loc : Camlp4.PreCast.Loc.t;
job_name : string;
- job_cleanup : cleanup option;
+ job_pre : pre option;
+ job_post : post option;
job_cond : job_cond;
job_script : shell_script;
}