* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*)
-open Big_int
open Whenexpr
+open Big_int
+open Printf
+
let set_variable name value =
check_valid_variable_name name;
Whenfile.set_variable name (T_string value)
let set_variable_float name value =
check_valid_variable_name name;
Whenfile.set_variable name (T_float value)
+
+type preinfo = Whenexpr.preinfo
+
+let max n preinfo =
+ let name = preinfo.pi_job_name in
+
+ (* Count running jobs with the same name. *)
+ let count = List.fold_left (
+ fun count ->
+ function
+ | { pirun_job_name = n } when n = name -> count + 1
+ | _ -> count
+ ) 0 preinfo.pi_running in
+
+ (* Only let this job run if there are fewer than n already running. *)
+ count < n
+
+let one () preinfo = max 1 preinfo
+
+type result = Whenexpr.result
+
+let mailto ?(only_on_failure = false) ?from email result =
+ if result.res_code <> 0 || not only_on_failure then (
+ let subject =
+ sprintf "%s: %s (return code %d)"
+ result.res_job_name
+ (if result.res_code = 0 then "successful" else "FAILED")
+ result.res_code in
+
+ let cmd = sprintf "%s -s %s -a %s"
+ Config.mailx
+ (Filename.quote subject)
+ (Filename.quote result.res_output) in
+
+ let cmd =
+ match from with
+ | None -> cmd
+ | Some from -> sprintf "%s -r %s" cmd from in
+
+ let cmd =
+ sprintf "%s %s </dev/null" cmd (Filename.quote email) in
+
+ if Sys.command cmd <> 0 then
+ failwith "Whentools.mailto: mailx command failed";
+ )