Skip to content

Commit 2598cc6

Browse files
jutaromgmeier
authored andcommitted
cardano-node: Remove ForgingThreadStats, keeping ForgingStats
1 parent 5a0111d commit 2598cc6

File tree

6 files changed

+141
-243
lines changed

6 files changed

+141
-243
lines changed

cardano-node/cardano-node.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ library
110110
Cardano.Node.Tracing.Tracers.Consensus
111111
Cardano.Node.Tracing.Tracers.ConsensusStartupException
112112
Cardano.Node.Tracing.Tracers.Diffusion
113-
Cardano.Node.Tracing.Tracers.ForgingThreadStats
113+
Cardano.Node.Tracing.Tracers.ForgingStats
114114
Cardano.Node.Tracing.Tracers.KESInfo
115115
Cardano.Node.Tracing.Tracers.NodeToClient
116116
Cardano.Node.Tracing.Tracers.NodeToNode

cardano-node/src/Cardano/Node/Tracing/Documentation.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import Cardano.Node.Tracing.Tracers.ChainDB
3434
import Cardano.Node.Tracing.Tracers.Consensus
3535
import Cardano.Node.Tracing.Tracers.ConsensusStartupException
3636
import Cardano.Node.Tracing.Tracers.Diffusion ()
37-
import Cardano.Node.Tracing.Tracers.ForgingThreadStats (ForgeThreadStats)
37+
import Cardano.Node.Tracing.Tracers.ForgingStats (ForgingStats)
3838
import Cardano.Node.Tracing.Tracers.KESInfo ()
3939
import Cardano.Node.Tracing.Tracers.NodeToClient ()
4040
import Cardano.Node.Tracing.Tracers.NodeToNode ()
@@ -377,8 +377,8 @@ docTracersFirstPhase condConfigFileName = do
377377
trBase trForward mbTrEKG
378378
["Forge", "ThreadStats"]
379379
configureTracers configReflection trConfig [forgeTr']
380-
forgeThreadStatsTrDoc <- documentTracer (forgeTr' ::
381-
Logging.Trace IO ForgeThreadStats)
380+
forgeStatsTrDoc <- documentTracer (forgeTr' ::
381+
Logging.Trace IO ForgingStats)
382382

383383
blockchainTimeTr <- mkCardanoTracer
384384
trBase trForward mbTrEKG
@@ -773,7 +773,7 @@ docTracersFirstPhase condConfigFileName = do
773773
<> localTxSubmissionServerTrDoc
774774
<> mempoolTrDoc
775775
<> forgeTrDoc
776-
<> forgeThreadStatsTrDoc
776+
<> forgeStatsTrDoc
777777
<> blockchainTimeTrDoc
778778
<> consensusSanityCheckTrDoc
779779
<> consensusStartupErrorTrDoc

cardano-node/src/Cardano/Node/Tracing/Tracers.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import Cardano.Node.Tracing.Tracers.BlockReplayProgress
3030
import Cardano.Node.Tracing.Tracers.ChainDB
3131
import Cardano.Node.Tracing.Tracers.Consensus
3232
import Cardano.Node.Tracing.Tracers.Diffusion ()
33-
import Cardano.Node.Tracing.Tracers.ForgingThreadStats (forgeThreadStats)
33+
import Cardano.Node.Tracing.Tracers.ForgingStats (calcForgeStats)
3434
import Cardano.Node.Tracing.Tracers.KESInfo
3535
import Cardano.Node.Tracing.Tracers.NodeToClient ()
3636
import Cardano.Node.Tracing.Tracers.NodeToNode ()
@@ -61,8 +61,8 @@ import qualified Ouroboros.Network.BlockFetch.ClientState as BlockFetch
6161
import Ouroboros.Network.ConnectionId (ConnectionId)
6262
import qualified Ouroboros.Network.Diffusion as Diffusion
6363
import qualified Ouroboros.Network.Diffusion.Common as Diffusion
64-
import qualified Ouroboros.Network.Diffusion.P2P as P2P
6564
import qualified Ouroboros.Network.Diffusion.NonP2P as NonP2P
65+
import qualified Ouroboros.Network.Diffusion.P2P as P2P
6666
import Ouroboros.Network.NodeToClient (LocalAddress)
6767
import Ouroboros.Network.NodeToNode (RemoteAddress)
6868

@@ -317,11 +317,11 @@ mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConf
317317
(forgeTracerTransform nodeKernel)
318318
configureTracers configReflection trConfig [forgeTr]
319319

320-
!forgeThreadStatsTr <- mkCardanoTracer'
320+
!forgeStatsTr <- mkCardanoTracer'
321321
trBase trForward mbTrEKG
322-
["Forge", "ThreadStats"]
323-
forgeThreadStats
324-
configureTracers configReflection trConfig [forgeThreadStatsTr]
322+
["Forge", "Stats"]
323+
calcForgeStats
324+
configureTracers configReflection trConfig [forgeStatsTr]
325325

326326
!blockchainTimeTr <- mkCardanoTracer
327327
trBase trForward mbTrEKG
@@ -391,7 +391,7 @@ mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConf
391391
, Consensus.forgeTracer =
392392
Tracer (\(Consensus.TraceLabelCreds _ x) -> traceWith (contramap Left forgeTr) x)
393393
<>
394-
Tracer (\(Consensus.TraceLabelCreds _ x) -> traceWith (contramap Left forgeThreadStatsTr) x)
394+
Tracer (\(Consensus.TraceLabelCreds _ x) -> traceWith (contramap Left forgeStatsTr) x)
395395
, Consensus.blockchainTimeTracer = Tracer $
396396
traceWith blockchainTimeTr
397397
, Consensus.keepAliveClientTracer = Tracer $
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
{-# LANGUAGE FlexibleInstances #-}
2+
{-# LANGUAGE LambdaCase #-}
3+
{-# LANGUAGE RecordWildCards #-}
4+
5+
module Cardano.Node.Tracing.Tracers.ForgingStats
6+
( ForgingStats (..)
7+
, calcForgeStats
8+
) where
9+
10+
import Cardano.Logging
11+
import Cardano.Node.Tracing.Tracers.StartLeadershipCheck (ForgeTracerType)
12+
import Cardano.Slotting.Slot (SlotNo (..))
13+
import Ouroboros.Consensus.Node.Tracers
14+
import qualified Ouroboros.Consensus.Node.Tracers as Consensus
15+
import Ouroboros.Consensus.Shelley.Node ()
16+
17+
import Control.Monad.IO.Class (MonadIO (..))
18+
import Data.Aeson (Value (..), (.=))
19+
20+
21+
--------------------------------------------------------------------------------
22+
-- ForgingStats Tracer
23+
--------------------------------------------------------------------------------
24+
25+
-- | This structure stores counters of blockchain-related events,
26+
-- per individual thread in fsStats.
27+
data ForgingStats
28+
= ForgingStats {
29+
fsNodeCannotForgeNum :: !Int
30+
, fsNodeIsLeaderNum :: !Int
31+
, fsBlocksForgedNum :: !Int
32+
, fsLastSlot :: !Int
33+
, fsSlotsMissedNum :: !Int
34+
}
35+
36+
instance LogFormatting ForgingStats where
37+
forHuman ForgingStats {..} =
38+
"Node cannot forge " <> showT fsNodeCannotForgeNum
39+
<> " node is leader " <> showT fsNodeIsLeaderNum
40+
<> " blocks forged " <> showT fsBlocksForgedNum
41+
<> " slots missed " <> showT fsSlotsMissedNum
42+
forMachine _dtal ForgingStats {..} =
43+
mconcat [ "kind" .= String "ForgingStats"
44+
, "nodeCannotForge" .= String (showT fsNodeCannotForgeNum)
45+
, "nodeIsLeader" .= String (showT fsNodeIsLeaderNum)
46+
, "blocksForged" .= String (showT fsBlocksForgedNum)
47+
, "slotsMissed" .= String (showT fsSlotsMissedNum)
48+
]
49+
asMetrics ForgingStats {..} =
50+
[ IntM "nodeCannotForge" (fromIntegral fsNodeCannotForgeNum)
51+
, IntM "nodeIsLeader" (fromIntegral fsNodeIsLeaderNum)
52+
, IntM "blocksForged" (fromIntegral fsBlocksForgedNum)
53+
, IntM "slotsMissed" (fromIntegral fsSlotsMissedNum)
54+
]
55+
56+
instance MetaTrace ForgingStats where
57+
namespaceFor ForgingStats {} = Namespace [] ["ForgingStats"]
58+
59+
severityFor _ _ = Just Info
60+
61+
documentFor _ = Just
62+
"nodeCannotForgeNum shows how many times this node could not forge.\
63+
\\nnodeIsLeaderNum shows how many times this node was leader.\
64+
\\nblocksForgedNum shows how many blocks did forge in this node.\
65+
\\nslotsMissed shows how many slots were missed in this node."
66+
67+
metricsDocFor _ =
68+
[("nodeCannotForge",
69+
"How many times was this node unable to forge [a block]?")
70+
,("nodeIsLeader",
71+
"How many times was this node slot leader?")
72+
,("blocksForged",
73+
"How many blocks did this node forge?")
74+
,("slotsMissed",
75+
"How many slots did this node miss?")
76+
,("lastSlot",
77+
"")
78+
]
79+
80+
allNamespaces = [Namespace [] ["ForgingStats"]]
81+
82+
83+
emptyForgingStats :: ForgingStats
84+
emptyForgingStats = ForgingStats 0 0 0 0 0
85+
86+
calcForgeStats :: Trace IO ForgingStats
87+
-> IO (Trace IO (ForgeTracerType blk))
88+
calcForgeStats tr =
89+
let tr' = contramap unfold tr
90+
in foldCondTraceM calculateForgingStats emptyForgingStats
91+
(\case
92+
Left Consensus.TraceStartLeadershipCheck{} -> True
93+
Left _ -> False
94+
Right _ -> True
95+
)
96+
tr'
97+
98+
calculateForgingStats :: MonadIO m
99+
=> ForgingStats
100+
-> LoggingContext
101+
-> ForgeTracerType blk
102+
-> m ForgingStats
103+
calculateForgingStats stats _context
104+
(Left TraceNodeCannotForge {}) =
105+
pure $ stats { fsNodeCannotForgeNum = fsNodeCannotForgeNum stats + 1 }
106+
calculateForgingStats stats _context
107+
(Left TraceNodeIsLeader {}) =
108+
pure $ stats { fsNodeIsLeaderNum = fsNodeIsLeaderNum stats + 1 }
109+
calculateForgingStats stats _context
110+
(Left TraceForgedBlock {}) =
111+
pure $ stats { fsBlocksForgedNum = fsBlocksForgedNum stats + 1 }
112+
calculateForgingStats stats _context
113+
(Left (TraceNodeNotLeader (SlotNo slot'))) =
114+
let slot = fromIntegral slot'
115+
in if fsLastSlot stats == 0 || succ (fsLastSlot stats) == slot
116+
then pure $ stats { fsLastSlot = slot }
117+
else
118+
let missed = (slot - fsLastSlot stats)
119+
in pure $ stats { fsLastSlot = slot
120+
, fsSlotsMissedNum = fsSlotsMissedNum stats + missed}
121+
122+
calculateForgingStats stats _context _message = pure stats

0 commit comments

Comments
 (0)