summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--changelog.md7
-rw-r--r--doc/plugins.org16
-rw-r--r--src/Xmobar/Plugins/Monitors.hs6
-rw-r--r--src/Xmobar/Plugins/Monitors/Load.hs45
-rw-r--r--xmobar.cabal1
5 files changed, 73 insertions, 2 deletions
diff --git a/changelog.md b/changelog.md
index daaf121..d5d00d7 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+## Version 0.43 (unreleased)
+
+_New features_
+
+ - New monitor `Load` providing load averages (stolen from Finn
+ Lawler).
+
## Version 0.42 (March, 2022)
_New features_
diff --git a/doc/plugins.org b/doc/plugins.org
index 462256f..81f50f9 100644
--- a/doc/plugins.org
+++ b/doc/plugins.org
@@ -662,7 +662,21 @@
Run Locks
#+end_src
-*** Process Monitors
+*** Load and Process Monitors
+***** =Load Args RefreshRate=
+
+ - Aliases to =load=
+
+ - Args: default monitor arguments. The low and high thresholds
+ (=-L= and =-H=) refer to load average values.
+
+ - Variables that can be used with the =-t/--template= argument:
+ =load1=, =load5=, =load15=.
+
+ - Default template: =Load: <load1>=.
+
+ - Displays load averages for the last 1, 5 or 15 hours.
+
***** =TopProc Args RefreshRate=
- Aliases to =top=
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"
diff --git a/xmobar.cabal b/xmobar.cabal
index 8126f53..51cbd14 100644
--- a/xmobar.cabal
+++ b/xmobar.cabal
@@ -167,6 +167,7 @@ library
Xmobar.Plugins.Monitors.CpuFreq,
Xmobar.Plugins.Monitors.Disk,
Xmobar.Plugins.Monitors.Disk.Common,
+ Xmobar.Plugins.Monitors.Load,
Xmobar.Plugins.Monitors.Mem,
Xmobar.Plugins.Monitors.MultiCoreTemp,
Xmobar.Plugins.Monitors.MultiCpu,