From b99a8a6833a1b38882b463fd72784cd6d6f91d9e Mon Sep 17 00:00:00 2001 From: Michal Zielonka Date: Thu, 7 Oct 2021 23:25:09 +0200 Subject: try to reorganize modules per os We should make better split os specify code for FreeBSD and Linux. Idea comes from @liskin. --- src/Xmobar/Plugins/Monitors/Swap.hs | 55 +++---------------------------------- 1 file changed, 4 insertions(+), 51 deletions(-) (limited to 'src/Xmobar/Plugins/Monitors/Swap.hs') diff --git a/src/Xmobar/Plugins/Monitors/Swap.hs b/src/Xmobar/Plugins/Monitors/Swap.hs index ca46010..e8b2f54 100644 --- a/src/Xmobar/Plugins/Monitors/Swap.hs +++ b/src/Xmobar/Plugins/Monitors/Swap.hs @@ -17,10 +17,10 @@ module Xmobar.Plugins.Monitors.Swap where import Xmobar.Plugins.Monitors.Common -#ifdef FREEBSD -import System.BSD.Sysctl (sysctlReadUInt, sysctlReadULong) +#if defined(freebsd_HOST_OS) +import qualified Xmobar.Plugins.Monitors.Swap.FreeBSD as MS #else -import qualified Data.ByteString.Lazy.Char8 as B +import qualified Xmobar.Plugins.Monitors.Swap.Linux as MS #endif swapConfig :: IO MConfig @@ -28,53 +28,6 @@ swapConfig = mkMConfig "Swap: %" -- 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" - -parseMEM :: IO [Float] -parseMEM = - do file <- fileMEM - let li i l - | l /= [] = head l !! i - | otherwise = B.empty - fs s l - | null l = False - | otherwise = head l == B.pack s - get_data s = flip (/) 1024 . read . B.unpack . li 1 . filter (fs s) - st = map B.words . B.lines $ file - tot = get_data "SwapTotal:" st - 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 @@ -85,6 +38,6 @@ formatSwap _ = return $ replicate 4 "N/A" runSwap :: [String] -> Monitor String runSwap _ = - do m <- io parseMEM + do m <- io MS.parseMEM l <- formatSwap m parseTemplate l -- cgit v1.2.3