From 3d469771a549062be70f4e316680dac00a68d1d2 Mon Sep 17 00:00:00 2001 From: Michal Zielonka Date: Fri, 8 Oct 2021 14:42:51 +0200 Subject: try to add build action for freebsd + uptime plugin split --- src/Xmobar/Plugins/Monitors/Uptime.hs | 14 ++++--- src/Xmobar/Plugins/Monitors/Uptime/FreeBSD.hsc | 52 ++++++++++++++++++++++++++ src/Xmobar/Plugins/Monitors/Uptime/Linux.hs | 24 ++++++++++++ 3 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 src/Xmobar/Plugins/Monitors/Uptime/FreeBSD.hsc create mode 100644 src/Xmobar/Plugins/Monitors/Uptime/Linux.hs (limited to 'src') diff --git a/src/Xmobar/Plugins/Monitors/Uptime.hs b/src/Xmobar/Plugins/Monitors/Uptime.hs index 235fc85..646edc8 100644 --- a/src/Xmobar/Plugins/Monitors/Uptime.hs +++ b/src/Xmobar/Plugins/Monitors/Uptime.hs @@ -1,3 +1,5 @@ +{-#LANGUAGE CPP #-} + ------------------------------------------------------------------------------ -- | -- Module : Plugins.Monitors.Uptime @@ -19,22 +21,22 @@ module Xmobar.Plugins.Monitors.Uptime (uptimeConfig, runUptime) where import Xmobar.Plugins.Monitors.Common -import qualified Data.ByteString.Lazy.Char8 as B +#if defined(freebsd_HOST_OS) +import qualified Xmobar.Plugins.Monitors.Uptime.FreeBSD as MU +#else +import qualified Xmobar.Plugins.Monitors.Uptime.Linux as MU +#endif uptimeConfig :: IO MConfig uptimeConfig = mkMConfig "Up d h 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 + t <- io MU.readUptime u <- getConfigValue useSuffix let tsecs = floor t secs = tsecs `mod` secsPerDay diff --git a/src/Xmobar/Plugins/Monitors/Uptime/FreeBSD.hsc b/src/Xmobar/Plugins/Monitors/Uptime/FreeBSD.hsc new file mode 100644 index 0000000..e6323e1 --- /dev/null +++ b/src/Xmobar/Plugins/Monitors/Uptime/FreeBSD.hsc @@ -0,0 +1,52 @@ +------------------------------------------------------------------------------ +-- | +-- Module : Plugins.Monitors.Uptime.FreeBSD +-- 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 Xmobar.Plugins.Monitors.Uptime.FreeBSD (readUptime) where + +import Data.Time.Clock.POSIX (getPOSIXTime) +import System.BSD.Sysctl +import Data.Int +import Foreign.C +import Foreign.Storable + +#include +#include +#include +#include + +data TimeVal = TimeVal {sec:: CTime} + +instance Storable TimeVal where + sizeOf _ = #{size struct timeval} + alignment _ = alignment (undefined::CTime) + peek ptr = do cSec <- #{peek struct timeval, tv_sec} ptr + return (TimeVal cSec) + poke _ _ = pure () + +now :: IO Int64 +now = do + posix <- getPOSIXTime + return $ round posix + +readUptime :: IO Float +readUptime = do + tv <- sysctlPeek "kern.boottime" :: IO TimeVal + nowSec <- now + return $ fromInteger $ toInteger $ (nowSec - (secInt $ sec tv)) + where + secInt :: CTime -> Int64 + secInt (CTime cSec) = cSec diff --git a/src/Xmobar/Plugins/Monitors/Uptime/Linux.hs b/src/Xmobar/Plugins/Monitors/Uptime/Linux.hs new file mode 100644 index 0000000..46ba1a1 --- /dev/null +++ b/src/Xmobar/Plugins/Monitors/Uptime/Linux.hs @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------ +-- | +-- Module : Plugins.Monitors.Uptime.Linux +-- 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 Xmobar.Plugins.Monitors.Uptime.Linux (readUptime) where + +import qualified Data.ByteString.Lazy.Char8 as B + +readUptime :: IO Float +readUptime = + fmap (read . B.unpack . head . B.words) (B.readFile "/proc/uptime") -- cgit v1.2.3