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