diff options
| -rwxr-xr-x | monitor.hs | 66 | 
1 files changed, 66 insertions, 0 deletions
| diff --git a/monitor.hs b/monitor.hs new file mode 100755 index 0000000..d6f0e34 --- /dev/null +++ b/monitor.hs @@ -0,0 +1,66 @@ +#! /usr/bin/env runhaskell + + +import Data.Time (getZonedTime) +import Text.Printf (printf) +import System.Process (runInteractiveCommand) +import Data.List +import System.IO (hGetContents) + + +getOutput :: String -> IO String +getOutput cmd = do +    (_, out, _, _) <- runInteractiveCommand cmd +    hGetContents out  + +memParse :: String -> String +memParse file =  +    let content = map words $ take 4 $ lines file +        [total, free, buffer, cache] = map (\line -> (read $ line !! 1 :: Float) / 1024) content +        rest = free + buffer + cache +        used = total - rest +        usedratio = used * 100 / total +    in +        printf "MEM: %sM %.1f%% used   %.0fM rest" used usedratio rest + + +mem :: IO String +mem = do +    file <- readFile "/proc/meminfo" +    return $ memParse file + + +time :: IO String +time = do +    now <- getZonedTime +    return $ take 16 $ show now + + +temp :: IO String +temp = do +    file <- readFile "/proc/acpi/thermal_zone/THRM/temperature" +    let t = (words file) !! 1 +    return $ "TEMP: " ++ t ++ "C" + + +takeTail :: Int -> [a] -> [a] +takeTail n xs = +    let len = length xs in +        drop (len-n) xs + + +load :: IO String +load = do +    content <- getOutput "uptime" +    let l = map (delete ',') $ takeTail 3 $ words content +    return $ unwords $ "LOAD:" : l + + +sep :: IO String +sep = return "        " + + +main = do  +    putStr "" +    mapM_ (>>=putStr) $ intersperse sep [load, temp, mem, time] +    putChar '\n'
\ No newline at end of file | 
