diff options
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 | 
