From 4f4e8de1d8b4d33e02057d085399d25e05d87a17 Mon Sep 17 00:00:00 2001 From: jao Date: Wed, 30 Mar 2022 02:37:00 +0100 Subject: Load: new load average monitor Closes #208 --- src/Xmobar/Plugins/Monitors.hs | 6 ++++- src/Xmobar/Plugins/Monitors/Load.hs | 45 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/Xmobar/Plugins/Monitors/Load.hs (limited to 'src/Xmobar/Plugins') diff --git a/src/Xmobar/Plugins/Monitors.hs b/src/Xmobar/Plugins/Monitors.hs index 8fd31b7..9a3e3de 100644 --- a/src/Xmobar/Plugins/Monitors.hs +++ b/src/Xmobar/Plugins/Monitors.hs @@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Xmobar.Plugins.Monitors --- Copyright : (c) 2010, 2011, 2012, 2013, 2017, 2018, 2019, 2020 Jose Antonio Ortega Ruiz +-- Copyright : (c) 2010-2013, 2017-2020, 2022 Jose Antonio Ortega Ruiz -- (c) 2007-10 Andrea Rossato -- License : BSD-style (see LICENSE) -- @@ -30,6 +30,7 @@ import Xmobar.Plugins.Monitors.Cpu import Xmobar.Plugins.Monitors.MultiCpu import Xmobar.Plugins.Monitors.Batt import Xmobar.Plugins.Monitors.Bright +import Xmobar.Plugins.Monitors.Load import Xmobar.Plugins.Monitors.Thermal import Xmobar.Plugins.Monitors.ThermalZone import Xmobar.Plugins.Monitors.CpuFreq @@ -65,6 +66,7 @@ data Monitors = Network Interface Args Rate | Battery Args Rate | DiskU DiskSpec Args Rate | DiskIO DiskSpec Args Rate + | Load Args Rate | Thermal Zone Args Rate | ThermalZone ZoneNo Args Rate | Memory Args Rate @@ -124,6 +126,7 @@ instance Exec Monitors where #endif alias (Network i _ _) = i alias (DynNetwork _ _) = "dynnetwork" + alias (Load _ _) = "load" alias (Thermal z _ _) = z alias (ThermalZone z _ _) = "thermal" ++ show z alias (Memory _ _) = "memory" @@ -176,6 +179,7 @@ instance Exec Monitors where start (Thermal z a r) = runM (a ++ [z]) thermalConfig runThermal r start (ThermalZone z a r) = runM (a ++ [show z]) thermalZoneConfig runThermalZone r + start (Load a r) = runM a loadConfig runLoad r start (Memory a r) = runM a memConfig runMem r start (Swap a r) = runM a swapConfig runSwap r start (Battery a r) = runM a battConfig runBatt r 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 +-- Maintainer : jao +-- 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: " -- 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" -- cgit v1.2.3