diff options
| -rw-r--r-- | .github/workflows/haskell.yml | 21 | ||||
| -rw-r--r-- | src/Xmobar/Plugins/Monitors/Uptime.hs | 14 | ||||
| -rw-r--r-- | src/Xmobar/Plugins/Monitors/Uptime/FreeBSD.hsc | 52 | ||||
| -rw-r--r-- | src/Xmobar/Plugins/Monitors/Uptime/Linux.hs | 24 | ||||
| -rw-r--r-- | xmobar.cabal | 6 | 
5 files changed, 108 insertions, 9 deletions
| diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index 6c1fd1f..8b195ab 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -7,7 +7,6 @@ on:  jobs:    build: -      runs-on: ubuntu-latest      strategy:        matrix: @@ -55,3 +54,23 @@ jobs:          sh ./travis.sh src      - name: Run tests        run: cabal test + +  # build-freebsd: +  #   runs-on: macos-latest +  #   env: +  #     CONFIG: "--enable-tests --enable-benchmarks -fwith_xft -fwith_mpd" + +  #   steps: +  #   - uses: actions/checkout@v2 + +  #   - name: Install dependencies +  #     uses: vmactions/freebsd-vm@v0.1.5 +  #     with: +  #       usesh: true +  #       prepare: pkg install -y ghc hs-hlint xorg-libraries hs-cabal-install git autoconf +  #       run: | +  #         cabal update +  #         cabal build --dependencies-only $CONFIG +  #         cabal build $CONFIG +  #         hlint +  #         cabal test 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 <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 +  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 <sys/types.h> +#include <sys/user.h> +#include <sys/time.h> +#include <sys/sysctl.h> + +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") diff --git a/xmobar.cabal b/xmobar.cabal index 5011a94..dadbe59 100644 --- a/xmobar.cabal +++ b/xmobar.cabal @@ -299,13 +299,15 @@ library                        Xmobar.Plugins.Monitors.Cpu.FreeBSD,                        Xmobar.Plugins.Monitors.Mem.FreeBSD,                        Xmobar.Plugins.Monitors.Net.FreeBSD, -                      Xmobar.Plugins.Monitors.Swap.FreeBSD +                      Xmobar.Plugins.Monitors.Swap.FreeBSD, +                      Xmobar.Plugins.Monitors.Uptime.FreeBSD      else         other-modules: Xmobar.Plugins.Monitors.Batt.Linux,                        Xmobar.Plugins.Monitors.Cpu.Linux,                        Xmobar.Plugins.Monitors.Mem.Linux,                        Xmobar.Plugins.Monitors.Net.Linux, -                      Xmobar.Plugins.Monitors.Swap.Linux +                      Xmobar.Plugins.Monitors.Swap.Linux, +                      Xmobar.Plugins.Monitors.Uptime.Linux  executable xmobar      default-language:   Haskell2010 | 
