@@ -15,6 +15,8 @@ import Data.Coerce (coerce)
15
15
import Data.Hashable (hash )
16
16
import Data.IntMap (IntMap )
17
17
import qualified Data.IntMap.Strict as IMap
18
+ import Data.IntervalMap.Strict (Interval (.. ), IntervalMap )
19
+ import qualified Data.IntervalMap.Strict as ILMap
18
20
import Data.Map.Strict (Map )
19
21
import qualified Data.Map.Strict as Map
20
22
import Data.Maybe (fromMaybe )
@@ -126,6 +128,7 @@ data LeiosSimVizState
126
128
, ebMsgs :: ! (LeiosSimVizMsgsState EndorseBlockId EndorseBlock )
127
129
, voteMsgs :: ! (LeiosSimVizMsgsState VoteId VoteMsg )
128
130
, ibsInRBs :: ! IBsInRBsState
131
+ , nodeCpuUsage :: ! (Map NodeId (IntervalMap DiffTime Int ))
129
132
}
130
133
131
134
data LeiosSimVizMsgsState id msg = LeiosSimVizMsgsState
@@ -174,6 +177,13 @@ data LinkPoints
174
177
{- # UNPACK #-} !Point
175
178
deriving (Show )
176
179
180
+ accumNodeCpuUsage :: Time -> LeiosEvent -> Map NodeId (IntervalMap DiffTime Int ) -> Map NodeId (IntervalMap DiffTime Int )
181
+ accumNodeCpuUsage (Time now) (LeiosEventNode (LabelNode nid (PraosNodeEvent (PraosNodeEventCPU task)))) =
182
+ Map. insertWith ILMap. union nid (ILMap. singleton (ClosedInterval now (now + cpuTaskDuration task)) 1 )
183
+ accumNodeCpuUsage (Time now) (LeiosEventNode (LabelNode nid (LeiosNodeEventCPU task))) =
184
+ Map. insertWith ILMap. union nid (ILMap. singleton (ClosedInterval now (now + cpuTaskDuration task)) 1 )
185
+ accumNodeCpuUsage _ _ = id
186
+
177
187
type ChainsMap = IntMap (Chain (Block RankingBlockBody ))
178
188
179
189
accumChains :: Time -> LeiosEvent -> ChainsMap -> ChainsMap
@@ -250,6 +260,7 @@ leiosSimVizModel =
250
260
, ebMsgs = initMsgs
251
261
, voteMsgs = initMsgs
252
262
, ibsInRBs = IBsInRBsState Map. empty Map. empty
263
+ , nodeCpuUsage = Map. empty
253
264
}
254
265
255
266
accumEventVizState ::
@@ -367,13 +378,14 @@ leiosSimVizModel =
367
378
[(msg, msgforecast, msgforecasts)]
368
379
(vizMsgsInTransit vs)
369
380
}
370
- accumEventVizState _now (LeiosEventNode (LabelNode _nodeId (LeiosNodeEventCPU _task))) vs = vs
381
+ accumEventVizState now e@ (LeiosEventNode (LabelNode _nodeId (LeiosNodeEventCPU _task))) vs =
382
+ vs{nodeCpuUsage = accumNodeCpuUsage now e (nodeCpuUsage vs)}
371
383
accumEventVizState
372
- _now
373
- ( LeiosEventNode
374
- (LabelNode _nodeId (PraosNodeEvent (PraosNodeEventCPU _task)))
375
- )
376
- vs = vs
384
+ now
385
+ e @ ( LeiosEventNode
386
+ (LabelNode _nodeId (PraosNodeEvent (PraosNodeEventCPU _task)))
387
+ )
388
+ vs = vs{nodeCpuUsage = accumNodeCpuUsage now e (nodeCpuUsage vs)}
377
389
378
390
pruneVisState ::
379
391
Time ->
0 commit comments