summaryrefslogtreecommitdiffhomepage
path: root/Plugins
diff options
context:
space:
mode:
Diffstat (limited to 'Plugins')
-rw-r--r--Plugins/Monitors.hs42
-rw-r--r--Plugins/Monitors/Common.hs67
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