7
7
{-# LANGUAGE KindSignatures #-}
8
8
{-# LANGUAGE LambdaCase #-}
9
9
{-# LANGUAGE MultiParamTypeClasses #-}
10
+ {-# LANGUAGE NamedFieldPuns #-}
10
11
{-# LANGUAGE PackageImports #-}
11
12
{-# LANGUAGE RankNTypes #-}
12
13
{-# LANGUAGE ScopedTypeVariables #-}
19
20
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
20
21
21
22
module Cardano.Benchmarking.Tracer
22
- ( initDefaultTracers
23
+ ( initTracers
24
+ , initDefaultTracers
23
25
, initNullTracers
24
26
)
25
27
where
@@ -35,21 +37,39 @@ import qualified Data.Map as Map
35
37
import Data.Proxy
36
38
import Data.Text (Text )
37
39
import qualified Data.Text as Text
40
+ import Data.Time.Clock
41
+
42
+ import Trace.Forward.Utils.DataPoint
43
+ import Trace.Forward.Utils.TraceObject
44
+ import Ouroboros.Network.IOManager (IOManager )
38
45
39
46
import Cardano.Api
40
47
import Cardano.Logging
48
+ import Cardano.Node.Startup
41
49
42
50
import Cardano.Benchmarking.LogTypes
43
51
import Cardano.Benchmarking.Types
44
52
import Cardano.Benchmarking.Version as Version
45
53
46
- generatorTracer :: LogFormatting a => (a -> Namespace ) -> Text -> Trace IO FormattedMessage -> IO (Trace IO a )
47
- generatorTracer namesFor tracerName tr = do
48
- tr' <- machineFormatter Nothing tr
49
- tr'' <- withDetailsFromConfig tr'
54
+ generatorTracer ::
55
+ LogFormatting a
56
+ => (a -> Namespace )
57
+ -> Text
58
+ -> Maybe (Trace IO FormattedMessage )
59
+ -> Maybe (Trace IO FormattedMessage )
60
+ -> IO (Trace IO a )
61
+ generatorTracer namesFor tracerName mbTrStdout mbTrForward = do
62
+ forwardTrace <- case mbTrForward of
63
+ Nothing -> mempty
64
+ Just trForward -> forwardFormatter Nothing trForward
65
+ stdoutTrace <- case mbTrStdout of
66
+ Nothing -> mempty
67
+ Just trForward -> machineFormatter Nothing trForward
68
+ let tr = forwardTrace <> stdoutTrace
69
+ tr' <- withDetailsFromConfig tr
50
70
pure $ withNamesAppended namesFor
51
71
$ appendName tracerName
52
- tr''
72
+ tr'
53
73
54
74
initNullTracers :: BenchTracers
55
75
initNullTracers = BenchTracers
@@ -62,22 +82,70 @@ initNullTracers = BenchTracers
62
82
63
83
initDefaultTracers :: IO BenchTracers
64
84
initDefaultTracers = do
65
- st <- standardTracer
66
- benchTracer <- generatorTracer singletonName " benchmark" st
85
+ mbStdoutTracer <- fmap Just standardTracer
86
+ let mbForwardingTracer = Nothing
87
+ benchTracer <- generatorTracer singletonName " benchmark" mbStdoutTracer mbForwardingTracer
88
+ configureTracers initialTraceConfig benchTracerDocumented [benchTracer]
89
+ n2nSubmitTracer <- generatorTracer singletonName " submitN2N" mbStdoutTracer mbForwardingTracer
90
+ configureTracers initialTraceConfig nodeToNodeSubmissionTraceDocumented [n2nSubmitTracer]
91
+ connectTracer <- generatorTracer singletonName " connect" mbStdoutTracer mbForwardingTracer
92
+ configureTracers initialTraceConfig sendRecvConnectDocumented [connectTracer]
93
+ submitTracer <- generatorTracer namesForSubmission2 " submit" mbStdoutTracer mbForwardingTracer
94
+ configureTracers initialTraceConfig submission2Documented [submitTracer]
95
+
96
+ return $ BenchTracers
97
+ { btTxSubmit_ = Tracer (traceWith benchTracer)
98
+ , btConnect_ = Tracer (traceWith connectTracer)
99
+ , btSubmission2_ = Tracer (traceWith submitTracer)
100
+ , btN2N_ = Tracer (traceWith n2nSubmitTracer)
101
+ }
102
+
103
+
104
+ initTracers ::
105
+ IOManager
106
+ -> NetworkId
107
+ -> FilePath
108
+ -> IO BenchTracers
109
+ initTracers iomgr networkId tracerSocket = do
110
+ (forwardingTracer :: Trace IO FormattedMessage , dpTracer :: Trace IO DataPoint ) <- do
111
+ (forwardSink :: ForwardSink TraceObject , dpStore ) <- initForwarding iomgr initialTraceConfig (toNetworkMagic networkId)
112
+ Nothing $ Just (tracerSocket, Initiator )
113
+ pure (forwardTracer forwardSink, dataPointTracer dpStore)
114
+ mbStdoutTracer <- fmap Just standardTracer
115
+ let mbForwardingTracer = Just forwardingTracer
116
+ benchTracer <- generatorTracer singletonName " benchmark" mbStdoutTracer mbForwardingTracer
67
117
configureTracers initialTraceConfig benchTracerDocumented [benchTracer]
68
- n2nSubmitTracer <- generatorTracer singletonName " submitN2N" st
118
+ n2nSubmitTracer <- generatorTracer singletonName " submitN2N" mbStdoutTracer mbForwardingTracer
69
119
configureTracers initialTraceConfig nodeToNodeSubmissionTraceDocumented [n2nSubmitTracer]
70
- connectTracer <- generatorTracer singletonName " connect" st
120
+ connectTracer <- generatorTracer singletonName " connect" mbStdoutTracer mbForwardingTracer
71
121
configureTracers initialTraceConfig sendRecvConnectDocumented [connectTracer]
72
- submitTracer <- generatorTracer namesForSubmission2 " submit" st
122
+ submitTracer <- generatorTracer namesForSubmission2 " submit" mbStdoutTracer mbForwardingTracer
73
123
configureTracers initialTraceConfig submission2Documented [submitTracer]
124
+ -- Now we need to provide "Nodeinfo" DataPoint, to forward generator's name
125
+ -- to the acceptor application (for example, 'cardano-tracer').
126
+ nodeInfoTracer <- mkDataPointTracer dpTracer (const [" NodeInfo" ])
127
+ prepareGenInfo >>= traceWith nodeInfoTracer
74
128
129
+ traceWith benchTracer $ TraceTxGeneratorVersion Version. txGeneratorVersion
130
+ -- traceWith st $ show $ TraceTxGeneratorVersion Version.txGeneratorVersion
75
131
return $ BenchTracers
76
132
{ btTxSubmit_ = Tracer (traceWith benchTracer)
77
133
, btConnect_ = Tracer (traceWith connectTracer)
78
134
, btSubmission2_ = Tracer (traceWith submitTracer)
79
135
, btN2N_ = Tracer (traceWith n2nSubmitTracer)
80
136
}
137
+ where
138
+ prepareGenInfo = do
139
+ now <- getCurrentTime
140
+ return $ NodeInfo
141
+ { niName = " TxGenerator"
142
+ , niProtocol = " N/A"
143
+ , niVersion = _compilerVersion
144
+ , niCommit = _gitRev
145
+ , niStartTime = now
146
+ , niSystemStartTime = now
147
+ }
148
+ Version {_compilerVersion, _gitRev} = Version. txGeneratorVersion
81
149
82
150
initialTraceConfig :: TraceConfig
83
151
initialTraceConfig = TraceConfig {
0 commit comments