diff options
Diffstat (limited to 'Plugins')
-rw-r--r-- | Plugins/Monitors.hs | 42 | ||||
-rw-r--r-- | Plugins/Monitors/Common.hs | 67 |
2 files changed, 55 insertions, 54 deletions
diff --git a/Plugins/Monitors.hs b/Plugins/Monitors.hs index 003a502..32856d2 100644 --- a/Plugins/Monitors.hs +++ b/Plugins/Monitors.hs @@ -32,29 +32,29 @@ data Monitors = Weather Station Args Rate | Battery Args Rate deriving (Show,Read,Eq) -type Args = [String] -type Program = String -type Alias = String -type Station = String +type Args = [String] +type Program = String +type Alias = String +type Station = String type Interface = String -type Rate = Int +type Rate = Int instance Exec Monitors where alias (Weather s _ _) = s alias (Network i _ _) = i - alias (Memory _ _) = "memory" - alias (Swap _ _) = "swap" - alias (Cpu _ _) = "cpu" - alias (Battery _ _) = "battery" - rate (Weather _ _ r) = r - rate (Network _ _ r) = r - rate (Memory _ r) = r - rate (Swap _ r) = r - rate (Cpu _ r) = r - rate (Battery _ r) = r - run (Weather s a _) = runM (a ++ [s]) weatherConfig runWeather - run (Network i a _) = runM (a ++ [i]) netConfig runNet - run (Memory args _) = runM args memConfig runMem - run (Swap args _) = runM args swapConfig runSwap - run (Cpu args _) = runM args cpuConfig runCpu - run (Battery args _) = runM args battConfig runBatt + alias (Memory _ _) = "memory" + alias (Swap _ _) = "swap" + alias (Cpu _ _) = "cpu" + alias (Battery _ _) = "battery" + rate (Weather _ _ r) = r + rate (Network _ _ r) = r + rate (Memory _ r) = r + rate (Swap _ r) = r + rate (Cpu _ r) = r + rate (Battery _ r) = r + start (Weather s a r) = runM (a ++ [s]) weatherConfig runWeather r + start (Network i a r) = runM (a ++ [i]) netConfig runNet r + start (Memory a r) = runM a memConfig runMem r + start (Swap a r) = runM a swapConfig runSwap r + start (Cpu a r) = runM a cpuConfig runCpu r + start (Battery a r) = runM a battConfig runBatt r diff --git a/Plugins/Monitors/Common.hs b/Plugins/Monitors/Common.hs index 7887e14..c448a65 100644 --- a/Plugins/Monitors/Common.hs +++ b/Plugins/Monitors/Common.hs @@ -48,30 +48,27 @@ module Plugins.Monitors.Common ( import Control.Concurrent import Control.Monad.Reader - import qualified Data.ByteString.Lazy.Char8 as B import Data.IORef import qualified Data.Map as Map import Data.List - import Numeric - import Text.ParserCombinators.Parsec - import System.Console.GetOpt +import Plugins -- $monitor type Monitor a = ReaderT MConfig IO a data MConfig = MC { normalColor :: IORef (Maybe String) - , low :: IORef Int - , lowColor :: IORef (Maybe String) - , high :: IORef Int - , highColor :: IORef (Maybe String) - , template :: IORef String - , export :: IORef [String] + , low :: IORef Int + , lowColor :: IORef (Maybe String) + , high :: IORef Int + , highColor :: IORef (Maybe String) + , template :: IORef String + , export :: IORef [String] } -- | from 'http:\/\/www.haskell.org\/hawiki\/MonadState' @@ -100,12 +97,12 @@ mkMConfig :: String -> IO MConfig mkMConfig tmpl exprts = do lc <- newIORef Nothing - l <- newIORef 33 + l <- newIORef 33 nc <- newIORef Nothing - h <- newIORef 66 + h <- newIORef 66 hc <- newIORef Nothing - t <- newIORef tmpl - e <- newIORef exprts + t <- newIORef tmpl + e <- newIORef exprts return $ MC nc l lc h hc t e data Opts = HighColor String @@ -117,12 +114,12 @@ data Opts = HighColor String options :: [OptDescr Opts] options = - [ Option ['H'] ["High"] (ReqArg High "number") "The high threshold" - , Option ['L'] ["Low"] (ReqArg Low "number") "The low threshold" - , Option ['h'] ["high"] (ReqArg HighColor "color number") "Color for the high threshold: ex \"#FF0000\"" - , Option ['n'] ["normal"] (ReqArg NormalColor "color number") "Color for the normal threshold: ex \"#00FF00\"" - , Option ['l'] ["low"] (ReqArg LowColor "color number") "Color for the low threshold: ex \"#0000FF\"" - , Option ['t'] ["template"] (ReqArg Template "output template") "Output template." + [ Option ['H'] ["High"] (ReqArg High "number" ) "The high threshold" + , Option ['L'] ["Low"] (ReqArg Low "number" ) "The low threshold" + , Option ['h'] ["high"] (ReqArg HighColor "color number" ) "Color for the high threshold: ex \"#FF0000\"" + , Option ['n'] ["normal"] (ReqArg NormalColor "color number" ) "Color for the normal threshold: ex \"#00FF00\"" + , Option ['l'] ["low"] (ReqArg LowColor "color number" ) "Color for the low threshold: ex \"#0000FF\"" + , Option ['t'] ["template"] (ReqArg Template "output template" ) "Output template." ] doArgs :: [String] @@ -130,8 +127,8 @@ doArgs :: [String] -> Monitor String doArgs args action = do case (getOpt Permute options args) of - (o, n, []) -> do doConfigOptions o - action n + (o, n, [] ) -> do doConfigOptions o + action n (_, _, errs) -> return (concat errs) doConfigOptions :: [Opts] -> Monitor () @@ -139,18 +136,22 @@ doConfigOptions [] = io $ return () doConfigOptions (o:oo) = do let next = doConfigOptions oo case o of - High h -> setConfigValue (read h) high >> next - Low l -> setConfigValue (read l) low >> next - HighColor hc -> setConfigValue (Just hc) highColor >> next + High h -> setConfigValue (read h) high >> next + Low l -> setConfigValue (read l) low >> next + HighColor hc -> setConfigValue (Just hc) highColor >> next NormalColor nc -> setConfigValue (Just nc) normalColor >> next - LowColor lc -> setConfigValue (Just lc) lowColor >> next - Template t -> setConfigValue t template >> next - -runM :: [String] -> IO MConfig -> ([String] -> Monitor String) -> IO String -runM args conf action = - do c <- conf - let ac = doArgs args action - runReaderT ac c + LowColor lc -> setConfigValue (Just lc) lowColor >> next + Template t -> setConfigValue t template >> next + +runM :: [String] -> IO MConfig -> ([String] -> Monitor String) -> Int -> (String -> IO ()) -> IO () +runM args conf action r cb = do go + where go = do + c <- conf + let ac = doArgs args action + s <- runReaderT ac c + cb s + tenthSeconds r + go io :: IO a -> Monitor a io = liftIO |