summaryrefslogtreecommitdiff
path: root/src/Propellor/Property/Journald.hs
diff options
context:
space:
mode:
authorJoey Hess2015-01-21 23:28:47 -0400
committerJoey Hess2015-01-21 23:28:47 -0400
commit4d34b837d2d81c76a50e8b7f1d31c80af3238f36 (patch)
treec7c08ca13f1a665d51eb593adb058797b30d16bb /src/Propellor/Property/Journald.hs
parenta37e0a6bc3816bb85f1ebca7e0fd7a9bb2349b3a (diff)
reorg
Diffstat (limited to 'src/Propellor/Property/Journald.hs')
-rw-r--r--src/Propellor/Property/Journald.hs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/Propellor/Property/Journald.hs b/src/Propellor/Property/Journald.hs
new file mode 100644
index 00000000..d21def0a
--- /dev/null
+++ b/src/Propellor/Property/Journald.hs
@@ -0,0 +1,53 @@
+module Propellor.Property.Journald where
+import Propellor
+import qualified Propellor.Property.Systemd as Systemd
+import Utility.DataUnits
+
+-- | Configures journald, restarting it so the changes take effect.
+configured :: Systemd.Option -> String -> Property
+configured option value =
+ Systemd.configured "/etc/systemd/journald.conf" option value
+ `onChange` Systemd.restarted "systemd-journald"
+
+-- The string is parsed to get a data size.
+-- Examples: "100 megabytes" or "0.5tb"
+type DataSize = String
+
+configuredSize :: Systemd.Option -> DataSize -> Property
+configuredSize option s = case readSize dataUnits s of
+ Just sz -> configured option (systemdSizeUnits sz)
+ Nothing -> property ("unable to parse " ++ option ++ " data size " ++ s) noChange
+
+systemMaxUse :: DataSize -> Property
+systemMaxUse = configuredSize "SystemMaxUse"
+
+runtimeMaxUse :: DataSize -> Property
+runtimeMaxUse = configuredSize "RuntimeMaxUse"
+
+systemKeepFree :: DataSize -> Property
+systemKeepFree = configuredSize "SystemKeepFree"
+
+runtimeKeepFree :: DataSize -> Property
+runtimeKeepFree = configuredSize "RuntimeKeepFree"
+
+systemMaxFileSize :: DataSize -> Property
+systemMaxFileSize = configuredSize "SystemMaxFileSize"
+
+runtimeMaxFileSize :: DataSize -> Property
+runtimeMaxFileSize = configuredSize "RuntimeMaxFileSize"
+
+-- Generates size units as used in journald.conf.
+systemdSizeUnits :: Integer -> String
+systemdSizeUnits sz = filter (/= ' ') (roughSize cfgfileunits True sz)
+ where
+ cfgfileunits :: [Unit]
+ cfgfileunits =
+ [ Unit (p 6) "E" "exabyte"
+ , Unit (p 5) "P" "petabyte"
+ , Unit (p 4) "T" "terabyte"
+ , Unit (p 3) "G" "gigabyte"
+ , Unit (p 2) "M" "megabyte"
+ , Unit (p 1) "K" "kilobyte"
+ ]
+ p :: Integer -> Integer
+ p n = 1024^n