diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2011-02-13 04:57:17 +0100 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2011-02-13 04:57:17 +0100 |
commit | 31715e3db637702d1289819909131a32abb3777a (patch) | |
tree | f2bc074c66479c940c88aadffacf5300619c8af7 /src/Plugins/Monitors | |
parent | 8f7606493f55c503e5be9047b176ad4941c06a0b (diff) | |
download | xmobar-31715e3db637702d1289819909131a32abb3777a.tar.gz xmobar-31715e3db637702d1289819909131a32abb3777a.tar.bz2 |
Cpu and MultiCpu should also be more accurate now
Diffstat (limited to 'src/Plugins/Monitors')
-rw-r--r-- | src/Plugins/Monitors/Cpu.hs | 34 | ||||
-rw-r--r-- | src/Plugins/Monitors/MultiCpu.hs | 24 | ||||
-rw-r--r-- | src/Plugins/Monitors/Net.hs | 5 |
3 files changed, 42 insertions, 21 deletions
diff --git a/src/Plugins/Monitors/Cpu.hs b/src/Plugins/Monitors/Cpu.hs index 8715245..919f7a4 100644 --- a/src/Plugins/Monitors/Cpu.hs +++ b/src/Plugins/Monitors/Cpu.hs @@ -1,7 +1,8 @@ ----------------------------------------------------------------------------- -- | -- Module : Plugins.Monitors.Cpu --- Copyright : (c) Andrea Rossato +-- Copyright : (c) 2011 Jose Antonio Ortega Ruiz +-- (c) 2007-2010 Andrea Rossato -- License : BSD-style (see LICENSE) -- -- Maintainer : Jose A. Ortega Ruiz <jao@gnu.org> @@ -12,27 +13,30 @@ -- ----------------------------------------------------------------------------- -module Plugins.Monitors.Cpu where +module Plugins.Monitors.Cpu (startCpu) where import Plugins.Monitors.Common import qualified Data.ByteString.Lazy.Char8 as B +import Data.IORef (IORef, newIORef, readIORef, writeIORef) cpuConfig :: IO MConfig cpuConfig = mkMConfig "Cpu: <total>%" ["bar","total","user","nice","system","idle"] +type CpuDataRef = IORef [Float] + cpuData :: IO [Float] -cpuData = do s <- B.readFile "/proc/stat" - return $ cpuParser s +cpuData = cpuParser `fmap` B.readFile "/proc/stat" cpuParser :: B.ByteString -> [Float] -cpuParser = - map (read . B.unpack) . tail . B.words . head . B.lines +cpuParser = map (read . B.unpack) . tail . B.words . head . B.lines -parseCPU :: IO [Float] -parseCPU = - do (a,b) <- doActionTwiceWithDelay 750000 cpuData +parseCpu :: CpuDataRef -> IO [Float] +parseCpu cref = + do a <- readIORef cref + b <- cpuData + writeIORef cref b let dif = zipWith (-) b a tot = foldr (+) 0 dif percent = map (/ tot) dif @@ -46,8 +50,14 @@ formatCpu xs = do ps <- showPercentsWithColors (t:xs) return (b:ps) -runCpu :: [String] -> Monitor String -runCpu _ = - do c <- io parseCPU +runCpu :: CpuDataRef -> [String] -> Monitor String +runCpu cref _ = + do c <- io (parseCpu cref) l <- formatCpu c parseTemplate l + +startCpu :: [String] -> Int -> (String -> IO ()) -> IO () +startCpu a r cb = do + cref <- newIORef [] + _ <- parseCpu cref + runM a cpuConfig (runCpu cref) r cb diff --git a/src/Plugins/Monitors/MultiCpu.hs b/src/Plugins/Monitors/MultiCpu.hs index d93c788..a1bb082 100644 --- a/src/Plugins/Monitors/MultiCpu.hs +++ b/src/Plugins/Monitors/MultiCpu.hs @@ -12,11 +12,12 @@ -- ----------------------------------------------------------------------------- -module Plugins.Monitors.MultiCpu(multiCpuConfig, runMultiCpu) where +module Plugins.Monitors.MultiCpu (startMultiCpu) where import Plugins.Monitors.Common import qualified Data.ByteString.Lazy.Char8 as B import Data.List (isPrefixOf, transpose, unfoldr) +import Data.IORef (IORef, newIORef, readIORef, writeIORef) multiCpuConfig :: IO MConfig multiCpuConfig = @@ -26,6 +27,7 @@ multiCpuConfig = , k <- monitors] where monitors = ["bar","total","user","nice","system","idle"] +type CpuDataRef = IORef [[Float]] cpuData :: IO [[Float]] cpuData = parse `fmap` B.readFile "/proc/stat" @@ -35,9 +37,11 @@ cpuData = parse `fmap` B.readFile "/proc/stat" isCpu _ = False parseList = map (parseFloat . B.unpack) . tail -parseCpuData :: IO [[Float]] -parseCpuData = - do (as, bs) <- doActionTwiceWithDelay 950000 cpuData +parseCpuData :: CpuDataRef -> IO [[Float]] +parseCpuData cref = + do as <- readIORef cref + bs <- cpuData + writeIORef cref bs let p0 = zipWith percent bs as return p0 @@ -68,9 +72,15 @@ formatAutoCpus :: [String] -> Monitor [String] formatAutoCpus [] = return $ replicate 6 "" formatAutoCpus xs = return $ map unwords (groupData xs) -runMultiCpu :: [String] -> Monitor String -runMultiCpu _ = - do c <- io parseCpuData +runMultiCpu :: CpuDataRef -> [String] -> Monitor String +runMultiCpu cref _ = + do c <- io $ parseCpuData cref l <- formatMultiCpus c a <- formatAutoCpus l parseTemplate $ a ++ l + +startMultiCpu :: [String] -> Int -> (String -> IO ()) -> IO () +startMultiCpu a r cb = do + cref <- newIORef [[]] + _ <- parseCpuData cref + runM a multiCpuConfig (runMultiCpu cref) r cb diff --git a/src/Plugins/Monitors/Net.hs b/src/Plugins/Monitors/Net.hs index 500a753..8382542 100644 --- a/src/Plugins/Monitors/Net.hs +++ b/src/Plugins/Monitors/Net.hs @@ -1,7 +1,8 @@ ----------------------------------------------------------------------------- -- | -- Module : Plugins.Monitors.Net --- Copyright : (c) Andrea Rossato +-- Copyright : (c) 2011 Jose Antonio Ortega Ruiz +-- (c) 2007-2010 Andrea Rossato -- License : BSD-style (see LICENSE) -- -- Maintainer : Jose A. Ortega Ruiz <jao@gnu.org> @@ -12,7 +13,7 @@ -- ----------------------------------------------------------------------------- -module Plugins.Monitors.Net (netConfig, startNet) where +module Plugins.Monitors.Net (startNet) where import Plugins.Monitors.Common |