Modify CPUload data collector to get the number of clock ticks per second from Unistd.
Signed-off-by: Spyros Trigazis <[email protected]> --- src/Ganeti/DataCollectors/CPUload.hs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Ganeti/DataCollectors/CPUload.hs b/src/Ganeti/DataCollectors/CPUload.hs index 0c899a7..4b1d199 100644 --- a/src/Ganeti/DataCollectors/CPUload.hs +++ b/src/Ganeti/DataCollectors/CPUload.hs @@ -38,6 +38,7 @@ import Data.Attoparsec.Text.Lazy as A import Data.Text.Lazy (pack, unpack) import qualified Text.JSON as J import qualified Data.Sequence as Seq +import System.Posix.Unistd (getSysVar, SysVar(ClockTick)) import qualified Ganeti.BasicTypes as BT import qualified Ganeti.Constants as C @@ -155,8 +156,9 @@ dcUpdate mcd = do -- | Computes the average load for every CPU and the overall from data read -- from the map. -computeAverage :: Buffer -> Integer -> [Double] -computeAverage s w = +computeAverage :: Buffer -> Integer -> IO [Double] +computeAverage s w = do + ticks <- getSysVar ClockTick let window = Seq.takeWhileL ((> w) . fst) s go Seq.EmptyL _ = [] go _ Seq.EmptyR = [] @@ -164,15 +166,15 @@ computeAverage s w = let (timestampL, listL) = leftmost (timestampR, listR) = rightmost work = zipWith (-) listL listR - overall = (timestampL - timestampR) * 100 + overall = (timestampL - timestampR) * ticks map (\x -> fromIntegral x / fromIntegral overall) work - in go (Seq.viewl window) (Seq.viewr window) + return $ go (Seq.viewl window) (Seq.viewr window) -- | This function computes the JSON representation of the CPU load. buildJsonReport :: Buffer -> IO J.JSValue -buildJsonReport v = - let res = computeAverage v windowSize - in return . J.showJSON $ formatData res +buildJsonReport v = do + res <- computeAverage v windowSize + return . J.showJSON $ formatData res -- | This function computes the DCReport for the CPU load. buildDCReport :: Buffer -> IO DCReport -- 1.7.10.4
