Agent/bugfix/memory usage stats (#319)

* updates to GHC 8.10.4

* adds delete all notifications handler

* fixes memory usage

* fixes parsing problems, but is also cursed

* formatting
This commit is contained in:
Keagan McClelland
2021-05-05 10:02:39 -06:00
committed by Aiden McClelland
parent 0b5e4ca7af
commit 25dcc38bfd
2 changed files with 23 additions and 12 deletions

View File

@@ -18,15 +18,14 @@ data TopMetrics = TopMetrics
{ metricMemPercentageUsed :: Maybe Percentage
, metricMemFree :: Maybe MebiBytes
, metricMemUsed :: Maybe MebiBytes
, metricSwapTotal :: Maybe MebiBytes
, metricSwapUsed :: Maybe MebiBytes
, metricCpuIdle :: Maybe Percentage
, metricCpuUserSpace :: Maybe Percentage
, metricWait :: Maybe Percentage
, metricCpuPercentageUsed :: Maybe Percentage
} deriving (Eq, Show)
}
deriving (Eq, Show)
getTopMetrics :: MonadIO m => S9ErrT m TopMetrics
getTopMetrics = fmap parseTop runTop
@@ -51,8 +50,8 @@ parseTop t = TopMetrics { metricMemPercentageUsed = getMemPercentageUsed <$> mem
where
topLines = lines t
cpu = getCpuAggregates topLines
mem = getMemAggregates memHeader topLines
swapS = getMemAggregates swapHeader topLines
mem = getMemAggregates topLines
swapS = getSwapAggregates topLines
memHeader :: Text
memHeader = "MiB Mem"
@@ -64,7 +63,8 @@ data TopMemAggregates = TopMemAggregates
{ memTotal :: Double
, memFree :: Double
, memUsed :: Double
} deriving (Eq, Show)
}
deriving (Eq, Show)
cpuHeader :: Text
cpuHeader = "%Cpu(s)"
@@ -78,13 +78,24 @@ data TopCpuAggregates = TopCpuAggregates
, cpuHi :: Percentage
, cpuSi :: Percentage
, cpuSt :: Percentage
} deriving (Eq, Show)
}
deriving (Eq, Show)
getMemAggregates :: Text -> [Text] -> Maybe TopMemAggregates
getMemAggregates header topRes = do
memLine <- getLineByHeader header topRes
getMemAggregates :: [Text] -> Maybe TopMemAggregates
getMemAggregates topRes = do
memLine <- getLineByHeader memHeader topRes
swapLine <- getLineByHeader swapHeader topRes
let stats = HM.fromList $ getStats readMaybe memLine
memTotal <- HM.lookup "total" stats
memFree <- HM.lookup "avail" (HM.fromList $ getStats readMaybe swapLine)
memUsed <- HM.lookup "used" stats
pure TopMemAggregates { .. }
getSwapAggregates :: [Text] -> Maybe TopMemAggregates
getSwapAggregates topRes = do
swapLine <- getLineByHeader swapHeader topRes
let stats = HM.fromList $ getStats readMaybe swapLine
memTotal <- HM.lookup "total" stats
memFree <- HM.lookup "free" stats
memUsed <- HM.lookup "used" stats
pure TopMemAggregates { .. }

View File

@@ -13,5 +13,5 @@ truncateToS :: Int -> Double -> Double
truncateToS n x = fromIntegral (floor (x * t) :: Integer) / t where t = 10 ^ n
parseToPair :: (Text -> Maybe a) -> [Text] -> Maybe (Text, a)
parseToPair parse [k, v] = ((k, ) <$> parse v) <|> ((v, ) <$> parse k)
parseToPair _ _ = Nothing
parseToPair parse (k : v : _) = ((k, ) <$> parse v) <|> ((v, ) <$> parse k)
parseToPair _ _ = Nothing