diff options
Diffstat (limited to 'src/Xmobar/Plugins/Monitors')
-rw-r--r-- | src/Xmobar/Plugins/Monitors/Swap.hs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/Xmobar/Plugins/Monitors/Swap.hs b/src/Xmobar/Plugins/Monitors/Swap.hs index fcaab84..ca46010 100644 --- a/src/Xmobar/Plugins/Monitors/Swap.hs +++ b/src/Xmobar/Plugins/Monitors/Swap.hs @@ -1,3 +1,4 @@ +{-#LANGUAGE CPP #-} ----------------------------------------------------------------------------- -- | -- Module : Plugins.Monitors.Swap @@ -16,13 +17,44 @@ module Xmobar.Plugins.Monitors.Swap where import Xmobar.Plugins.Monitors.Common +#ifdef FREEBSD +import System.BSD.Sysctl (sysctlReadUInt, sysctlReadULong) +#else import qualified Data.ByteString.Lazy.Char8 as B +#endif swapConfig :: IO MConfig swapConfig = mkMConfig "Swap: <usedratio>%" -- template ["usedratio", "total", "used", "free"] -- available replacements +#ifdef FREEBSD + +isEnabled :: IO Bool +isEnabled = do + enabled <- sysctlReadUInt "vm.swap_enabled" + return $ enabled == 1 + +parseMEM' :: Bool -> IO [Float] +parseMEM' False = return $ [] +parseMEM' True = do + swapIn <- sysctlReadUInt "vm.stats.vm.v_swapin" + swapTotal <- sysctlReadULong "vm.swap_total" + let tot = toInteger swapTotal + free = tot - (toInteger swapIn) + + return $ res (fromInteger tot) (fromInteger free) + where + res :: Float -> Float -> [Float] + res _ 0 = [] + res tot free = [(tot - free) / tot, tot, tot - free, free] + +parseMEM :: IO [Float] +parseMEM = do + enabled <- isEnabled + parseMEM' enabled + +#else fileMEM :: IO B.ByteString fileMEM = B.readFile "/proc/meminfo" @@ -41,6 +73,8 @@ parseMEM = free = get_data "SwapFree:" st return [(tot - free) / tot, tot, tot - free, free] +#endif + formatSwap :: [Float] -> Monitor [String] formatSwap (r:xs) = do d <- getConfigValue decDigits |