On Tue, Sep 10, 2013 at 3:17 PM, Spyros Trigazis <[email protected]> wrote:
> Modify CPUload data collector to get the number of clock ticks > per second from Posix.Unistd. Since CPUload collector converts > clock ticks (jiffies) to seconds and the clock ticks to seconds > ratio varies between linux distributions, it must be read from > the corresponding library to be consistent > > Signed-off-by: Spyros Trigazis <[email protected]> > --- > src/Ganeti/DataCollectors/CPUload.hs | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/src/Ganeti/DataCollectors/CPUload.hs > b/src/Ganeti/DataCollectors/CPUload.hs > index 0c899a7..edcd40e 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,8 @@ 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 -> Integer -> [Double] > +computeAverage s w ticks = > let window = Seq.takeWhileL ((> w) . fst) s > go Seq.EmptyL _ = [] > go _ Seq.EmptyR = [] > @@ -164,15 +165,16 @@ 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) > > -- | 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 > + ticks <- getSysVar ClockTick > + let res = computeAverage v windowSize ticks > + return . J.showJSON $ formatData res > > -- | This function computes the DCReport for the CPU load. > buildDCReport :: Buffer -> IO DCReport > -- > 1.7.10.4 > > LGTM, thanks. Michele -- Google Germany GmbH Dienerstr. 12 80331 München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores
