summaryrefslogtreecommitdiffhomepage
path: root/src/Xmobar
diff options
context:
space:
mode:
Diffstat (limited to 'src/Xmobar')
-rw-r--r--src/Xmobar/Plugins/Monitors.hs6
-rw-r--r--src/Xmobar/Plugins/Monitors/Load.hs45
2 files changed, 50 insertions, 1 deletions
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 <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"