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 { metricMemPercentageUsed :: Maybe Percentage
, metricMemFree :: Maybe MebiBytes , metricMemFree :: Maybe MebiBytes
, metricMemUsed :: Maybe MebiBytes , metricMemUsed :: Maybe MebiBytes
, metricSwapTotal :: Maybe MebiBytes , metricSwapTotal :: Maybe MebiBytes
, metricSwapUsed :: Maybe MebiBytes , metricSwapUsed :: Maybe MebiBytes
, metricCpuIdle :: Maybe Percentage , metricCpuIdle :: Maybe Percentage
, metricCpuUserSpace :: Maybe Percentage , metricCpuUserSpace :: Maybe Percentage
, metricWait :: Maybe Percentage , metricWait :: Maybe Percentage
, metricCpuPercentageUsed :: Maybe Percentage , metricCpuPercentageUsed :: Maybe Percentage
} deriving (Eq, Show) }
deriving (Eq, Show)
getTopMetrics :: MonadIO m => S9ErrT m TopMetrics getTopMetrics :: MonadIO m => S9ErrT m TopMetrics
getTopMetrics = fmap parseTop runTop getTopMetrics = fmap parseTop runTop
@@ -51,8 +50,8 @@ parseTop t = TopMetrics { metricMemPercentageUsed = getMemPercentageUsed <$> mem
where where
topLines = lines t topLines = lines t
cpu = getCpuAggregates topLines cpu = getCpuAggregates topLines
mem = getMemAggregates memHeader topLines mem = getMemAggregates topLines
swapS = getMemAggregates swapHeader topLines swapS = getSwapAggregates topLines
memHeader :: Text memHeader :: Text
memHeader = "MiB Mem" memHeader = "MiB Mem"
@@ -64,7 +63,8 @@ data TopMemAggregates = TopMemAggregates
{ memTotal :: Double { memTotal :: Double
, memFree :: Double , memFree :: Double
, memUsed :: Double , memUsed :: Double
} deriving (Eq, Show) }
deriving (Eq, Show)
cpuHeader :: Text cpuHeader :: Text
cpuHeader = "%Cpu(s)" cpuHeader = "%Cpu(s)"
@@ -78,13 +78,24 @@ data TopCpuAggregates = TopCpuAggregates
, cpuHi :: Percentage , cpuHi :: Percentage
, cpuSi :: Percentage , cpuSi :: Percentage
, cpuSt :: Percentage , cpuSt :: Percentage
} deriving (Eq, Show) }
deriving (Eq, Show)
getMemAggregates :: Text -> [Text] -> Maybe TopMemAggregates getMemAggregates :: [Text] -> Maybe TopMemAggregates
getMemAggregates header topRes = do getMemAggregates topRes = do
memLine <- getLineByHeader header topRes memLine <- getLineByHeader memHeader topRes
swapLine <- getLineByHeader swapHeader topRes
let stats = HM.fromList $ getStats readMaybe memLine let stats = HM.fromList $ getStats readMaybe memLine
memTotal <- HM.lookup "total" stats 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 memFree <- HM.lookup "free" stats
memUsed <- HM.lookup "used" stats memUsed <- HM.lookup "used" stats
pure TopMemAggregates { .. } 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 truncateToS n x = fromIntegral (floor (x * t) :: Integer) / t where t = 10 ^ n
parseToPair :: (Text -> Maybe a) -> [Text] -> Maybe (Text, a) parseToPair :: (Text -> Maybe a) -> [Text] -> Maybe (Text, a)
parseToPair parse [k, v] = ((k, ) <$> parse v) <|> ((v, ) <$> parse k) parseToPair parse (k : v : _) = ((k, ) <$> parse v) <|> ((v, ) <$> parse k)
parseToPair _ _ = Nothing parseToPair _ _ = Nothing