module Events.HECs ( HECs(..), Event, CapEvent, Timestamp, eventIndexToTimestamp, timestampToEventIndex, extractUserMessages, ) where import Events.EventTree import Events.SparkTree import GHC.RTS.Events import Data.Array ----------------------------------------------------------------------------- -- all the data from a .eventlog file data HECs = HECs { hecCount :: Int, hecTrees :: [(DurationTree, EventTree, SparkTree)], hecEventArray :: Array Int CapEvent, hecLastEventTime :: Timestamp, maxSparkValue :: Double, maxSparkPool :: Double } ----------------------------------------------------------------------------- eventIndexToTimestamp :: HECs -> Int -> Timestamp eventIndexToTimestamp HECs{hecEventArray=arr} n = time (ce_event (arr ! n)) timestampToEventIndex :: HECs -> Timestamp -> Int timestampToEventIndex HECs{hecEventArray=arr} ts = search l (r+1) where (l,r) = bounds arr search !l !r | (r - l) <= 1 = if ts > time (ce_event (arr!l)) then r else l | ts < tmid = search l mid | otherwise = search mid r where mid = l + (r - l) `quot` 2 tmid = time (ce_event (arr!mid)) extractUserMessages :: HECs -> [(Timestamp, String)] extractUserMessages hecs = [ (ts, msg) | CapEvent _ (Event ts (UserMessage msg)) <- elems (hecEventArray hecs) ]