From a23f5db95e3d4a05a7b4085386a3815d043429df Mon Sep 17 00:00:00 2001 From: Andrea Rossato Date: Tue, 19 Jun 2007 10:06:25 +0200 Subject: added a monitoring script found here http://blog.csdn.net/danranx/archive/2007/06/10/1646608.aspx darcs-hash:20070619080625-92444-4d5571b8344f3a5da49b42f83969e5b6db21e7bb.gz --- monitor.hs | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 monitor.hs 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 -- cgit v1.2.3