diff options
Diffstat (limited to 'src/Xmobar/Plugins/Monitors')
| -rw-r--r-- | src/Xmobar/Plugins/Monitors/Load.hs | 45 | 
1 files changed, 45 insertions, 0 deletions
| diff --git a/src/Xmobar/Plugins/Monitors/Load.hs b/src/Xmobar/Plugins/Monitors/Load.hs new file mode 100644 index 0000000..238d374 --- /dev/null +++ b/src/Xmobar/Plugins/Monitors/Load.hs @@ -0,0 +1,45 @@ +----------------------------------------------------------------------------- +-- | +-- Module      :  Plugins.Monitors.Load +-- Copyright   :  Finn Lawler +-- License     :  BSD-style (see LICENSE) +-- +-- Author      :  Finn Lawler <flawler@cs.tcd.ie> +-- Maintainer  :  jao <mail@jao.io> +-- Stability   :  unstable +-- Portability :  unportable +-- +-- A load average monitor for Xmobar.  Adapted from +-- Xmobar.Plugins.Monitors.Thermal by Juraj Hercek. +-- +----------------------------------------------------------------------------- + +module Xmobar.Plugins.Monitors.Load (loadConfig, runLoad) where + +import Xmobar.Plugins.Monitors.Common +import qualified Data.ByteString.Lazy.Char8 as B +import System.Posix.Files (fileExist) + +-- | Default configuration. +loadConfig :: IO MConfig +loadConfig = mkMConfig +       "Load: <load1>" -- template +       ["load1", "load5", "load15"]       -- available replacements + +-- | Parses the contents of a loadavg proc file, returning +-- the list of load averages +parseLoadAvgs :: B.ByteString -> [Float] +parseLoadAvgs = +  map ((read :: String -> Float) . B.unpack) . take 3 . B.words . head . B.lines + +-- | Retrieves load information.  Returns the monitor string parsed +-- according to template (either default or user specified). +runLoad :: [String] -> Monitor String +runLoad _ = do +  let file = "/proc/loadavg" +  exists <- io $ fileExist file +  if exists then +      (do l <- io $ B.readFile file >>= return . parseLoadAvgs +          parseTemplate =<< mapM (showWithColors $ showDigits 2) l) +    else +      return "Load: N/A" | 
