diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/startup.ml | 45 | ||||
-rw-r--r-- | src/startup.mli | 7 | ||||
-rw-r--r-- | src/vyconfd.ml | 45 |
3 files changed, 55 insertions, 42 deletions
diff --git a/src/startup.ml b/src/startup.ml new file mode 100644 index 0000000..d4b5ef2 --- /dev/null +++ b/src/startup.ml @@ -0,0 +1,45 @@ +(** Various "housekeeping" functions *) + +(** Log msg as fatal and exit immediately *) +let panic msg = + Lwt_log.fatal msg |> Lwt.ignore_result; + exit 1 + +(** Setup the default logger *) +let setup_logger daemonize log_file template = + (** + If log file is specified, log to the file whether we are a daemon or not + If we are a daemon and log file is not specified, log to syslog + If we are not a daemon and log file is not specified, log to stderr + *) + match log_file with + | None -> + if daemonize then + begin + Lwt_log.default := Lwt_log.syslog ~template:template ~facility:`Daemon (); + Lwt.return_unit + end + else + begin + Lwt_log.default := Lwt_log.channel ~template:template ~close_mode:`Keep ~channel:Lwt_io.stderr (); + Lwt.return_unit + end + | Some file -> + let%lwt l = Lwt_log.file ~template:template ~mode:`Append ~file_name:file () in + Lwt_log.default := l; Lwt.return_unit + +(** Load the config file or panic if it fails *) +let load_config path = + let result = Vyconf_config.load path in + match result with + | Ok cfg -> cfg + | Error err -> + panic (Printf.sprintf "Could not load the configuration file %s" err) + +(** Check if appliance directories exist and panic if they don't *) +let check_dirs dirs = + let res = Directories.test dirs in + match res with + | Ok _ -> () + | Error err -> panic err + diff --git a/src/startup.mli b/src/startup.mli new file mode 100644 index 0000000..329024e --- /dev/null +++ b/src/startup.mli @@ -0,0 +1,7 @@ +val panic : string -> 'a + +val setup_logger : bool -> string option -> Lwt_log.template -> unit Lwt.t + +val load_config : string -> Vyconf_config.t + +val check_dirs : Directories.t -> unit diff --git a/src/vyconfd.ml b/src/vyconfd.ml index b5adb47..c2270dd 100644 --- a/src/vyconfd.ml +++ b/src/vyconfd.ml @@ -24,54 +24,15 @@ let args = [ ] let usage = "Usage: " ^ Sys.argv.(0) ^ " [options]" -let panic msg = - Lwt_log.fatal msg |> Lwt.ignore_result; - exit 1 - -let load_config path = - let result = Vyconf_config.load path in - match result with - | Ok cfg -> cfg - | Error err -> - panic (Printf.sprintf "Could not load the configuration file %s" err) - -let check_dirs dirs = - let res = Directories.test dirs in - match res with - | Ok _ -> () - | Error err -> panic err - -let setup_logger daemonize log_file template = - (* - If log file is specified, log to the file whether we are a daemon or not - If we are a daemon and log file is not specified, log to syslog - If we are not a daemon and log file is not specified, log to stderr - *) - match log_file with - | None -> - if daemonize then - begin - Lwt_log.default := Lwt_log.syslog ~template:template ~facility:`Daemon (); - Lwt.return_unit - end - else - begin - Lwt_log.default := Lwt_log.channel ~template:template ~close_mode:`Keep ~channel:Lwt_io.stderr (); - Lwt.return_unit - end - | Some file -> - let%lwt l = Lwt_log.file ~template:template ~mode:`Append ~file_name:file () in - Lwt_log.default := l; Lwt.return_unit - let main_loop config () = - let%lwt () = setup_logger !daemonize !log_file !log_template in + let%lwt () = Startup.setup_logger !daemonize !log_file !log_template in let%lwt () = Lwt_log.notice @@ Printf.sprintf "Starting VyConf for %s" config.app_name in Lwt.return_unit let () = let () = Arg.parse args (fun f -> ()) usage in - let config = load_config !config_file in + let config = Startup.load_config !config_file in let dirs = Directories.make config in - check_dirs dirs; + Startup.check_dirs dirs; Lwt_main.run @@ main_loop config () |