module Xmobar.Plugins.Monitors.Mem.Linux (parseMEM) where
import qualified Data.Map as M
fileMEM :: IO String
fileMEM :: IO String
fileMEM = String -> IO String
readFile String
"/proc/meminfo"
parseMEM :: IO [Float]
parseMEM :: IO [Float]
parseMEM =
do String
file <- IO String
fileMEM
let content :: [[String]]
content = forall a b. (a -> b) -> [a] -> [b]
map String -> [String]
words forall a b. (a -> b) -> a -> b
$ forall a. Int -> [a] -> [a]
take Int
8 forall a b. (a -> b) -> a -> b
$ String -> [String]
lines String
file
info :: Map String Float
info = forall k a. Ord k => [(k, a)] -> Map k a
M.fromList forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map (
\[String]
line -> (forall a. [a] -> a
head [String]
line, (forall a. Read a => String -> a
read forall a b. (a -> b) -> a -> b
$ [String]
line forall a. [a] -> Int -> a
!! Int
1 :: Float) forall a. Fractional a => a -> a -> a
/ Float
1024)) [[String]]
content
[Float
total, Float
free, Float
buffer, Float
cache] =
forall a b. (a -> b) -> [a] -> [b]
map (Map String Float
info forall k a. Ord k => Map k a -> k -> a
M.!) [String
"MemTotal:", String
"MemFree:", String
"Buffers:", String
"Cached:"]
available :: Float
available = forall k a. Ord k => a -> k -> Map k a -> a
M.findWithDefault (Float
free forall a. Num a => a -> a -> a
+ Float
buffer forall a. Num a => a -> a -> a
+ Float
cache) String
"MemAvailable:" Map String Float
info
used :: Float
used = Float
total forall a. Num a => a -> a -> a
- Float
available
usedratio :: Float
usedratio = Float
used forall a. Fractional a => a -> a -> a
/ Float
total
freeratio :: Float
freeratio = Float
free forall a. Fractional a => a -> a -> a
/ Float
total
availableratio :: Float
availableratio = Float
available forall a. Fractional a => a -> a -> a
/ Float
total
forall (m :: * -> *) a. Monad m => a -> m a
return [ Float
usedratio, Float
freeratio, Float
availableratio
, Float
total, Float
free, Float
buffer, Float
cache, Float
available, Float
used]