diff options
author | Alexander Shabalin <shabalyn.a@gmail.com> | 2014-09-07 22:24:00 +0400 |
---|---|---|
committer | Alexander Shabalin <shabalyn.a@gmail.com> | 2014-09-14 12:03:48 +0400 |
commit | e590f14593728b8afc2b77e8be356e5c06428107 (patch) | |
tree | 7a316e70cc1c7ae84499516f61579f755b7dce0a /src/Plugins/Monitors/Net.hs | |
parent | e8e4415b7eba49d2d6ddb18ab13b3151c9a787bd (diff) | |
download | xmobar-e590f14593728b8afc2b77e8be356e5c06428107.tar.gz xmobar-e590f14593728b8afc2b77e8be356e5c06428107.tar.bz2 |
Implement DynamicString for Monitors supporting vbar.
* Batt
* Bright
* Cpu
* Disk
* MPD
* Mem
* MultiCpu
* Net
* Volume
* Wireless
Diffstat (limited to 'src/Plugins/Monitors/Net.hs')
-rw-r--r-- | src/Plugins/Monitors/Net.hs | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/src/Plugins/Monitors/Net.hs b/src/Plugins/Monitors/Net.hs index 51c760c..137770c 100644 --- a/src/Plugins/Monitors/Net.hs +++ b/src/Plugins/Monitors/Net.hs @@ -25,9 +25,35 @@ import Data.Time.Clock (UTCTime, getCurrentTime, diffUTCTime) import Control.Monad (forM, filterM, liftM) import System.Directory (getDirectoryContents, doesFileExist) import System.FilePath ((</>)) +import System.Console.GetOpt import qualified Data.ByteString.Lazy.Char8 as B +data NetOpts = NetOpts + { rxDynamicString :: Maybe DynamicString + , txDynamicString :: Maybe DynamicString + } + +defaultOpts :: NetOpts +defaultOpts = NetOpts + { rxDynamicString = Nothing + , txDynamicString = Nothing + } + +options :: [OptDescr (NetOpts -> NetOpts)] +options = + [ Option "" ["rx-dynamic-string"] (ReqArg (\x o -> + o { rxDynamicString = Just $ parseDynamicString x }) "") "" + , Option "" ["tx-dynamic-string"] (ReqArg (\x o -> + o { txDynamicString = Just $ parseDynamicString x }) "") "" + ] + +parseOpts :: [String] -> IO NetOpts +parseOpts argv = + case getOpt Permute options argv of + (o, _, []) -> return $ foldr id defaultOpts o + (_, _, errs) -> ioError . userError $ concat errs + data UnitPerSec = Bs | KBs | MBs | GBs deriving (Eq,Enum,Ord) data NetValue = NetValue Float UnitPerSec deriving (Eq,Show) @@ -62,7 +88,7 @@ instance Ord NetDev where netConfig :: IO MConfig netConfig = mkMConfig "<dev>: <rx>KB|<tx>KB" -- template - ["dev", "rx", "tx", "rxbar", "rxvbar", "txbar", "txvbar"] -- available replacements + ["dev", "rx", "tx", "rxbar", "rxvbar", "rxdstr", "txbar", "txvbar", "txdstr"] -- available replacements operstateDir :: String -> FilePath operstateDir d = "/sys/class/net" </> d </> "operstate" @@ -106,8 +132,8 @@ findNetDev dev = do isDev (NI d) = d == dev isDev NA = False -formatNet :: Float -> Monitor (String, String, String) -formatNet d = do +formatNet :: Maybe DynamicString -> Float -> Monitor (String, String, String, String) +formatNet mdstr d = do s <- getConfigValue useSuffix dd <- getConfigValue decDigits let str True v = showDigits dd d' ++ show u @@ -115,16 +141,17 @@ formatNet d = do str False v = showDigits dd $ v / 1024 b <- showLogBar 0.9 d vb <- showLogVBar 0.9 d + dstr <- showLogDynamicString mdstr 0.9 d x <- showWithColors (str s) d - return (x, b, vb) + return (x, b, vb, dstr) -printNet :: NetDev -> Monitor String -printNet nd = +printNet :: NetOpts -> NetDev -> Monitor String +printNet opts nd = case nd of ND d r t -> do - (rx, rb, rvb) <- formatNet r - (tx, tb, tvb) <- formatNet t - parseTemplate [d,rx,tx,rb,rvb,tb,tvb] + (rx, rb, rvb, rdstr) <- formatNet (rxDynamicString opts) r + (tx, tb, tvb, tdstr) <- formatNet (txDynamicString opts) t + parseTemplate [d,rx,tx,rb,rvb,rdstr,tb,tvb,tdstr] NI _ -> return "" NA -> getConfigValue naString @@ -144,13 +171,19 @@ parseNet nref nd = do return $ diffRate n0 n1 runNet :: NetDevRef -> String -> [String] -> Monitor String -runNet nref i _ = io (parseNet nref i) >>= printNet +runNet nref i argv = do + dev <- io $ parseNet nref i + opts <- io $ parseOpts argv + printNet opts dev parseNets :: [(NetDevRef, String)] -> IO [NetDev] parseNets = mapM $ uncurry parseNet runNets :: [(NetDevRef, String)] -> [String] -> Monitor String -runNets refs _ = io (parseActive refs) >>= printNet +runNets refs argv = do + dev <- io $ parseActive refs + opts <- io $ parseOpts argv + printNet opts dev where parseActive refs' = liftM selectActive (parseNets refs') selectActive = maximum |