From efd9bc7177c66d7bb9a994e919d915ecb5c75154 Mon Sep 17 00:00:00 2001
From: Jose Antonio Ortega Ruiz <jao@gnu.org>
Date: Sun, 12 Dec 2010 23:51:14 +0100
Subject: Uptime as a Monitor

---
 Plugins/Monitors.hs        |  4 ++++
 Plugins/Monitors/Uptime.hs | 50 +++++++++++++++++++++++++++++++++++++++++++++
 Plugins/Uptime.hs          | 51 ----------------------------------------------
 3 files changed, 54 insertions(+), 51 deletions(-)
 create mode 100644 Plugins/Monitors/Uptime.hs
 delete mode 100644 Plugins/Uptime.hs

(limited to 'Plugins')

diff --git a/Plugins/Monitors.hs b/Plugins/Monitors.hs
index 98949cf..a19f82a 100644
--- a/Plugins/Monitors.hs
+++ b/Plugins/Monitors.hs
@@ -31,6 +31,7 @@ import Plugins.Monitors.CpuFreq
 import Plugins.Monitors.CoreTemp
 import Plugins.Monitors.Disk
 import Plugins.Monitors.Top
+import Plugins.Monitors.Uptime
 #ifdef IWLIB
 import Plugins.Monitors.Wireless
 #endif
@@ -53,6 +54,7 @@ data Monitors = Weather  Station    Args Rate
               | CoreTemp Args       Rate
               | TopProc  Args       Rate
               | TopMem   Args       Rate
+              | Uptime   Args       Rate
 #ifdef IWLIB
               | Wireless Interface  Args Rate
 #endif
@@ -86,6 +88,7 @@ instance Exec Monitors where
     alias (CoreTemp   _ _) = "coretemp"
     alias (DiskU    _ _ _) = "disku"
     alias (DiskIO   _ _ _) = "diskio"
+    alias (Uptime     _ _) = "uptime"
 #ifdef IWLIB
     alias (Wireless i _ _) = i ++ "wi"
 #endif
@@ -106,6 +109,7 @@ instance Exec Monitors where
     start (DiskU    s a r) = runM a          diskUConfig   (runDiskU s)   r
     start (DiskIO   s a r) = runM a          diskIOConfig  (runDiskIO s)  r
     start (TopMem     a r) = runM a          topMemConfig   runTopMem     r
+    start (Uptime     a r) = runM a          uptimeConfig   runUptime     r
     start (TopProc    a r) = startTop a r
 #ifdef IWLIB
     start (Wireless i a r) = runM (a ++ [i]) wirelessConfig runWireless   r
diff --git a/Plugins/Monitors/Uptime.hs b/Plugins/Monitors/Uptime.hs
new file mode 100644
index 0000000..453b9ad
--- /dev/null
+++ b/Plugins/Monitors/Uptime.hs
@@ -0,0 +1,50 @@
+------------------------------------------------------------------------------
+-- |
+-- Module      : Plugins.Monitors.Uptime
+-- Copyright   : (c) 2010 Jose Antonio Ortega Ruiz
+-- License     : BSD3-style (see LICENSE)
+--
+-- Maintainer  : jao@gnu.org
+-- Stability   : unstable
+-- Portability : unportable
+-- Created: Sun Dec 12, 2010 20:26
+--
+--
+-- Uptime
+--
+------------------------------------------------------------------------------
+
+
+module Plugins.Monitors.Uptime (uptimeConfig, runUptime) where
+
+import Plugins.Monitors.Common
+
+import qualified Data.ByteString.Lazy.Char8 as B
+
+uptimeConfig :: IO MConfig
+uptimeConfig = mkMConfig "Up <days>d <hours>h <minutes>m"
+                         ["days", "hours", "minutes", "seconds"]
+
+readUptime :: IO Float
+readUptime =
+  fmap (read . B.unpack . head . B.words) (B.readFile "/proc/uptime")
+
+secsPerDay :: Integer
+secsPerDay = 24 * 3600
+
+uptime :: Monitor [String]
+uptime = do
+  t <- io readUptime
+  u <- getConfigValue usePercent
+  let tsecs = floor t
+      secs = tsecs `mod` secsPerDay
+      days = tsecs `quot` secsPerDay
+      hours = secs `quot` 3600
+      mins = (secs `mod` 3600) `div` 60
+      ss = secs `mod` 60
+      str x s = if u then show x ++ s else show x
+  mapM (`showWithColors'` days)
+       [str days "d", str hours "h", str mins "m", str ss "s"]
+
+runUptime :: [String] -> Monitor String
+runUptime _ = uptime >>= parseTemplate
diff --git a/Plugins/Uptime.hs b/Plugins/Uptime.hs
deleted file mode 100644
index 6d81acd..0000000
--- a/Plugins/Uptime.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-------------------------------------------------------------------------------
--- |
--- Module      : Plugins.Uptime
--- Copyright   : (c) 2010 Jose Antonio Ortega Ruiz
--- License     : BSD3-style (see LICENSE)
---
--- Maintainer  : jao@gnu.org
--- Stability   : unstable
--- Portability : unportable
--- Created: Sun Dec 12, 2010 20:26
---
---
--- Uptime
---
-------------------------------------------------------------------------------
-
-
-module Plugins.Uptime (Uptime(..)) where
-
-import Plugins
-
-import qualified Data.ByteString.Lazy.Char8 as B
-
-data Uptime = Uptime String Int
-    deriving (Read, Show)
-
-instance Exec Uptime where
-    alias (Uptime a _) = a
-    run   (Uptime _ _) = uptime
-    rate  (Uptime _ r) = r
-
-readUptime :: IO Float
-readUptime =
-  fmap (read . B.unpack . head . B.words) (B.readFile "/proc/uptime")
-
-secsPerDay :: Integer
-secsPerDay = 24 * 3600
-
-uptime :: IO String
-uptime = do
-  t <- readUptime
-  let tsecs = floor t
-      secs = tsecs `mod` secsPerDay
-      days = tsecs `quot` secsPerDay
-      hrs = secs `quot` 3600
-      mins = (secs `mod` 3600) `div` 60
-      dstr | days == 0 = ""
-           | otherwise = show days ++ "d "
-      str x | x < 10 = '0':show x
-            | otherwise = show x
-  return $ dstr ++ str hrs ++ ":" ++ str mins
-- 
cgit v1.2.3