]> gitweb.michael.orlitzky.com - dead/htsn.git/blobdiff - src/Main.hs
Reorder init_logging arguments to match htsn-common.
[dead/htsn.git] / src / Main.hs
index ece44a8b9fb53a6e8d27a9e0eef828205185d255..38dd2e5ad5e8af5c4336c667507a6a87b74c0ccd 100644 (file)
@@ -5,7 +5,7 @@ module Main
 where
 
 import Control.Concurrent ( threadDelay )
-import Control.Exception.Base ( bracket )
+import Control.Exception ( bracket, throw )
 import Control.Monad ( when )
 import Data.List ( isPrefixOf )
 import Data.Maybe ( isNothing )
@@ -38,16 +38,16 @@ import ExitCodes (
   exit_no_username,
   exit_pidfile_exists )
 import FeedHosts ( FeedHosts(..) )
-import Logging ( init_logging )
+import Network.Services.TSN.Logging ( init_logging )
 import qualified OptionalConfiguration as OC (
   OptionalConfiguration(..),
   from_rc )
-import Report (
+import Network.Services.TSN.Report (
   report_debug,
   report_info,
   report_warning,
   report_error )
-import Terminal ( display_sent )
+import Network.Services.TSN.Terminal ( display_sent )
 import Xml ( parse_xmlfid )
 import Unix ( full_daemonize )
 
@@ -256,7 +256,7 @@ main = do
   -- logging before the missing parameter checks below so that we can
   -- log the errors.
   let cfg = (def :: Configuration) `merge_optional` opt_config
-  init_logging (log_file cfg) (log_level cfg) (syslog cfg)
+  init_logging (log_level cfg) (log_file cfg) (syslog cfg)
 
   -- Check the optional config for missing required options. This is
   -- necessary because if the user specifies an empty list of
@@ -296,7 +296,7 @@ main = do
 
   -- If we were asked to daemonize, do that; otherwise just run the thing.
   if (daemonize cfg)
-  then full_daemonize cfg run_program
+  then try_daemonize cfg run_program
   else run_program
 
   where
@@ -313,3 +313,16 @@ main = do
       catchIOError (connect_and_parse cfg host) (report_error . show)
       thread_sleep 5 -- Wait 5s before attempting to reconnect.
       round_robin cfg $ (feed_host_idx + 1) `mod` (length hosts)
+
+
+    -- | A exception handler around full_daemonize. If full_daemonize
+    --   doesn't work, we report the error and crash. This is fine; we
+    --   only need the program to be resilient once it actually starts.
+    --
+    try_daemonize :: Configuration -> IO () -> IO ()
+    try_daemonize cfg program =
+      catchIOError
+        (full_daemonize cfg program)
+        (\e -> do
+          report_error (show e)
+          throw e)