diff options
Diffstat (limited to 'src/startup.ml')
-rw-r--r-- | src/startup.ml | 45 |
1 files changed, 45 insertions, 0 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 + |