]> gitweb.michael.orlitzky.com - dead/htsn.git/blobdiff - src/OptionalConfiguration.hs
Add a bunch of new options allowing htsn to daemonize.
[dead/htsn.git] / src / OptionalConfiguration.hs
index 0913864e0bb064cfd61884e25940a1e326eda771..69ea04176583956f4bac6cf9ce89637bdc7806b7 100644 (file)
@@ -50,11 +50,15 @@ deriving instance Typeable Priority
 --
 data OptionalConfiguration =
   OptionalConfiguration {
+    daemonize        :: Maybe Bool,
     feed_hosts       :: FeedHosts,
     log_file         :: Maybe FilePath,
     log_level        :: Maybe Priority,
-    password         :: Maybe String,
     output_directory :: Maybe FilePath,
+    password         :: Maybe String,
+    pidfile          :: Maybe FilePath,
+    run_as_group     :: Maybe String,
+    run_as_user      :: Maybe String,
     syslog           :: Maybe Bool,
     username         :: Maybe String }
     deriving (Show, Data, Typeable)
@@ -81,6 +85,7 @@ merge_maybes (Just _) (Just y) = Just y
 instance Monoid OptionalConfiguration where
   -- | An empty OptionalConfiguration.
   mempty = OptionalConfiguration
+             Nothing
              (FeedHosts [])
              Nothing
              Nothing
@@ -88,16 +93,23 @@ instance Monoid OptionalConfiguration where
              Nothing
              Nothing
              Nothing
+             Nothing
+             Nothing
+             Nothing
 
 
   -- | Combine @cfg1@ and @cfg2@, giving precedence to @cfg2@.
   cfg1 `mappend` cfg2 =
     OptionalConfiguration
+      (merge_maybes (daemonize cfg1) (daemonize cfg2))
       all_feed_hosts
       (merge_maybes (log_file cfg1) (log_file cfg2))
       (merge_maybes (log_level cfg1) (log_level cfg2))
-      (merge_maybes (password cfg1) (password cfg2))
       (merge_maybes (output_directory cfg1) (output_directory cfg2))
+      (merge_maybes (password cfg1) (password cfg2))
+      (merge_maybes (pidfile cfg1) (pidfile cfg2))
+      (merge_maybes (run_as_group cfg1) (run_as_group cfg2))
+      (merge_maybes (run_as_user cfg1) (run_as_user cfg2))
       (merge_maybes (syslog cfg1) (syslog cfg2))
       (merge_maybes (username cfg1) (username cfg2))
     where
@@ -139,20 +151,27 @@ from_rc = do
                                            return "$(HOME)")
   let user_config_path = home </> ".htsnrc"
   cfg <- DC.load [ DC.Optional user_config_path ]
+  cfg_daemonize <- DC.lookup cfg "daemonize"
+  cfg_feed_hosts <- DC.lookup cfg "feed_hosts"
   cfg_log_file <- DC.lookup cfg "log_file"
   cfg_log_level <- DC.lookup cfg "log_level"
-  cfg_password <- DC.lookup cfg "password"
   cfg_output_directory <- DC.lookup cfg "output_directory"
+  cfg_password <- DC.lookup cfg "password"
+  cfg_pidfile <- DC.lookup cfg "pidfile"
+  cfg_run_as_group <- DC.lookup cfg "run_as_group"
+  cfg_run_as_user <- DC.lookup cfg "run_as_user"
   cfg_syslog <- DC.lookup cfg "syslog"
   cfg_username <- DC.lookup cfg "username"
-  cfg_feed_hosts <- DC.lookup cfg "feed_hosts"
 
   return $ OptionalConfiguration
+             cfg_daemonize
              (fromMaybe (FeedHosts []) cfg_feed_hosts)
              cfg_log_file
              cfg_log_level
-             cfg_password
              cfg_output_directory
+             cfg_password
+             cfg_pidfile
+             cfg_run_as_group
+             cfg_run_as_user
              cfg_syslog
              cfg_username
-