eventlog2html-0.3.0: src/Eventlog/Data.hs
{-# LANGUAGE OverloadedStrings #-}
module Eventlog.Data (generateJson) where
import Prelude hiding (print, readFile)
import Data.Aeson (Value(..), (.=), object)
import Data.Tuple (swap)
import Eventlog.Args (Args(..), Sort(..))
import Eventlog.Bands (bands)
import qualified Eventlog.Events as E
import qualified Eventlog.HeapProf as H
import Eventlog.Prune (prune, cmpName, cmpSize, cmpStdDev)
import Eventlog.Vega
import Eventlog.Types (Header)
generateJson :: FilePath -> Args -> IO (Header, Value)
generateJson file a = do
let chunk = if heapProfile a then H.chunk else E.chunk
cmp = fst $ reversing' sorting'
sorting' = case sorting a of
Name -> cmpName
Size -> cmpSize
StdDev -> cmpStdDev
reversing' = if reversing a then swap else id
(h,totals, fs, traces) <- chunk file
let keeps = prune cmp 0 (bound $ nBands a) totals
let combinedJson = object [
"samples" .= bandsToVega keeps (bands h keeps fs)
, "traces" .= tracesToVega traces
]
return (h, combinedJson)
bound :: Int -> Int
bound n
| n <= 0 = maxBound
| otherwise = n