10
10
11
11
module Cardano.Unlog.LogObject (module Cardano.Unlog.LogObject ) where
12
12
13
- import Prelude (head , id , show )
13
+ import Prelude (head , id , show , unzip3 )
14
14
import Cardano.Prelude hiding (Text , head , show )
15
15
16
16
import Control.Monad (fail )
@@ -24,6 +24,7 @@ import Data.Text qualified as LText
24
24
import Data.Text.Short qualified as Text
25
25
import Data.Text.Short (ShortText , fromText , toText )
26
26
import Data.Time.Clock (NominalDiffTime , UTCTime )
27
+ import Data.Tuple.Extra (fst3 , snd3 , thd3 )
27
28
import Data.Map qualified as Map
28
29
import Data.Vector (Vector )
29
30
import Data.Vector qualified as V
@@ -83,48 +84,47 @@ deriving instance NFData a => NFData (Resources a)
83
84
--
84
85
-- LogObject stream interpretation
85
86
--
87
+ type Threeple t = (t , t , t )
86
88
87
- type ACouple t = (t , t )
88
-
89
- interpreters :: ACouple (Map Text (Object -> Parser LOBody ))
90
- interpreters = (Map. fromList *** Map. fromList) . unzip . fmap ent $
91
- [ (,,) " TraceStartLeadershipCheck" " Forge.StartLeadershipCheck" $
89
+ interpreters :: Threeple (Map Text (Object -> Parser LOBody ))
90
+ interpreters = map3ple Map. fromList . unzip3 . fmap ent $
91
+ [ (,,,) " TraceStartLeadershipCheck" " Forge.StartLeadershipCheck" " Forge.Loop.StartLeadershipCheck" $
92
92
\ v -> LOTraceStartLeadershipCheck
93
93
<$> v .: " slot"
94
94
<*> (v .:? " utxoSize" <&> fromMaybe 0 )
95
95
<*> (v .:? " chainDensity" <&> fromMaybe 0 )
96
96
97
- , (,,) " TraceBlockContext" " Forge.BlockContext" $
97
+ , (,,, ) " TraceBlockContext" " Forge.BlockContext " " Forge.Loop .BlockContext" $
98
98
\ v -> LOBlockContext
99
99
<$> v .: " tipBlockNo"
100
100
101
- , (,,) " TraceNodeIsLeader" " Forge.NodeIsLeader" $
101
+ , (,,, ) " TraceNodeIsLeader" " Forge.NodeIsLeader " " Forge.Loop .NodeIsLeader" $
102
102
\ v -> LOTraceLeadershipDecided
103
103
<$> v .: " slot"
104
104
<*> pure True
105
105
106
- , (,,) " TraceNodeNotLeader" " Forge.NodeNotLeader" $
106
+ , (,,, ) " TraceNodeNotLeader" " Forge.NodeNotLeader " " Forge.Loop .NodeNotLeader" $
107
107
\ v -> LOTraceLeadershipDecided
108
108
<$> v .: " slot"
109
109
<*> pure False
110
110
111
- , (,,) " TraceMempoolAddedTx" " Mempool.AddedTx" $
111
+ , (,,, ) " TraceMempoolAddedTx" " Mempool.AddedTx " " Mempool.AddedTx" $
112
112
\ v -> do
113
113
x :: Object <- v .: " mempoolSize"
114
114
LOMempoolTxs <$> x .: " numTxs"
115
115
116
- , (,,) " TraceMempoolRemoveTxs" " Mempool.RemoveTxs" $
116
+ , (,,, ) " TraceMempoolRemoveTxs" " Mempool.RemoveTxs " " Mempool.RemoveTxs" $
117
117
\ v -> do
118
118
x :: Object <- v .: " mempoolSize"
119
119
LOMempoolTxs <$> x .: " numTxs"
120
120
121
- , (,,) " TraceMempoolRejectedTx" " Mempool.RejectedTx" $
121
+ , (,,, ) " TraceMempoolRejectedTx" " Mempool.RejectedTx " " Mempool.RejectedTx" $
122
122
\ _ -> pure LOMempoolRejectedTx
123
123
124
- , (,,) " TraceLedgerEvent.TookSnapshot" " LedgerEvent.TookSnapshot" $
124
+ , (,,, ) " TraceLedgerEvent.TookSnapshot" " LedgerEvent.TookSnapshot " " ChainDB. LedgerEvent.TookSnapshot" $
125
125
\ _ -> pure LOLedgerTookSnapshot
126
126
127
- , (,,) " TraceBenchTxSubSummary" " TraceBenchTxSubSummary" $
127
+ , (,,,) " TraceBenchTxSubSummary " " TraceBenchTxSubSummary" " TraceBenchTxSubSummary" $
128
128
\ v -> do
129
129
x :: Object <- v .: " summary"
130
130
LOGeneratorSummary
@@ -134,77 +134,81 @@ interpreters = (Map.fromList *** Map.fromList) . unzip . fmap ent $
134
134
<*> x .: " ssElapsed"
135
135
<*> x .: " ssThreadwiseTps"
136
136
137
- , (,,) " TraceBenchTxSubServAck" " TraceBenchTxSubServAck" $
137
+ , (,,,) " TraceBenchTxSubServAck " " TraceBenchTxSubServAck" " TraceBenchTxSubServAck" $
138
138
\ v -> LOTxsAcked <$> v .: " txIds"
139
139
140
- , (,,) " Resources" " Resources" $
140
+ , (,,, ) " Resources" " Resources" " " $
141
141
\ v -> LOResources <$> parsePartialResourceStates (Object v)
142
142
143
- , (,,) " TraceTxSubmissionCollected" " TraceTxSubmissionCollected" $
143
+ , (,,,) " TraceTxSubmissionCollected " " TraceTxSubmissionCollected" " TraceTxSubmissionCollected" $
144
144
\ v -> LOTxsCollected
145
145
<$> v .: " count"
146
146
147
- , (,,) " TraceTxSubmissionProcessed" " TraceTxSubmissionProcessed" $
147
+ , (,,,) " TraceTxSubmissionProcessed " " TraceTxSubmissionProcessed" " TraceTxSubmissionProcessed" $
148
148
\ v -> LOTxsProcessed
149
149
<$> v .: " accepted"
150
150
<*> v .: " rejected"
151
151
152
- , (,,) " TraceForgedBlock" " Forge.ForgedBlock" $
152
+ , (,,, ) " TraceForgedBlock" " Forge.ForgedBlock " " Forge.Loop .ForgedBlock" $
153
153
\ v -> LOBlockForged
154
154
<$> v .: " block"
155
155
<*> v .: " blockPrev"
156
156
<*> v .: " blockNo"
157
157
<*> v .: " slot"
158
- , (,,) " TraceAddBlockEvent.AddedToCurrentChain" " ChainDB.AddBlockEvent.AddedToCurrentChain" $
158
+ , (,,, ) " TraceAddBlockEvent.AddedToCurrentChain " " ChainDB.AddBlockEvent .AddedToCurrentChain" " ChainDB.AddBlockEvent.AddedToCurrentChain" $
159
159
\ v -> LOBlockAddedToCurrentChain
160
160
<$> ((v .: " newtip" ) <&> hashFromPoint)
161
161
<*> pure Nothing
162
162
<*> (v .:? " chainLengthDelta"
163
163
-- Compat for node versions 1.27 and older:
164
164
<&> fromMaybe 1 )
165
165
-- TODO: we should clarify the distinction between the two cases (^ and v).
166
- , (,,) " TraceAdoptedBlock" " Forge.AdoptedBlock" $
166
+ , (,,, ) " TraceAdoptedBlock" " Forge.AdoptedBlock " " Forge.Loop .AdoptedBlock" $
167
167
\ v -> LOBlockAddedToCurrentChain
168
168
<$> v .: " blockHash"
169
169
<*> ((v .: " blockSize" ) <&> Just )
170
170
<*> pure 1
171
- , (,,) " ChainSyncServerEvent.TraceChainSyncServerRead.AddBlock" " ChainSyncServerHeader.ChainSyncServerEvent.ServerRead.AddBlock" $
171
+ , (,,, ) " ChainSyncServerEvent.TraceChainSyncServerRead.AddBlock" " ChainSyncServerHeader.ChainSyncServerEvent.ServerRead.AddBlock" " " $
172
172
\ v -> LOChainSyncServerSendHeader
173
173
<$> v .: " block"
174
174
<*> v .: " blockNo"
175
175
<*> v .: " slot"
176
- , (,,) " ChainSyncServerEvent.TraceChainSyncServerReadBlocked.AddBlock" " ChainSyncServerHeader.ChainSyncServerEvent.ServerReadBlocked.AddBlock" $
176
+ , (,,, ) " ChainSyncServerEvent.TraceChainSyncServerReadBlocked.AddBlock" " ChainSyncServerHeader.ChainSyncServerEvent.ServerReadBlocked.AddBlock " " ChainSync.ServerHeader .ChainSyncServerEvent.ServerReadBlocked.AddBlock" $
177
177
\ v -> LOChainSyncServerSendHeader
178
178
<$> v .: " block"
179
179
<*> v .: " blockNo"
180
180
<*> v .: " slot"
181
181
-- v, but not ^ -- how is that possible?
182
- , (,,) " TraceBlockFetchServerSendBlock" " BlockFetchServer.SendBlock" $
182
+ , (,,, ) " TraceBlockFetchServerSendBlock" " BlockFetchServer.SendBlock " " BlockFetch.Server .SendBlock" $
183
183
\ v -> LOBlockFetchServerSending
184
184
<$> v .: " block"
185
- , (,,) " SendFetchRequest" " BlockFetchClient.SendFetchRequest" $
185
+ , (,,, ) " SendFetchRequest" " BlockFetchClient.SendFetchRequest " " BlockFetch.Client .SendFetchRequest" $
186
186
\ v -> LOBlockFetchClientRequested
187
187
<$> v .: " head"
188
188
<*> v .: " length"
189
- , (,,) " ChainSyncClientEvent.TraceDownloadedHeader" " ChainSyncClient.ChainSyncClientEvent.DownloadedHeader" $
189
+ , (,,, ) " ChainSyncClientEvent.TraceDownloadedHeader" " ChainSyncClient.ChainSyncClientEvent.DownloadedHeader " " ChainSync.Client .DownloadedHeader" $
190
190
\ v -> LOChainSyncClientSeenHeader
191
191
<$> v .: " block"
192
192
<*> v .: " blockNo"
193
193
<*> v .: " slot"
194
- , (,,) " CompletedBlockFetch" " BlockFetchClient.CompletedBlockFetch" $
194
+ , (,,, ) " CompletedBlockFetch" " BlockFetchClient.CompletedBlockFetch " " BlockFetch.Client .CompletedBlockFetch" $
195
195
\ v -> LOBlockFetchClientCompletedFetch
196
196
<$> v .: " block"
197
197
]
198
198
where
199
199
hashFromPoint :: LText. Text -> Hash
200
200
hashFromPoint = Hash . fromText . Prelude. head . LText. splitOn " @"
201
201
202
- ent :: (a ,b ,c ) -> ((a ,c ), (b ,c ))
203
- ent (a,b,c) = ((a,c), (b,c))
202
+ ent :: (a ,b ,c ,d ) -> ((a ,d ), (b ,d ), (c , d ))
203
+ ent (a,b,c,d) = ((a,d), (b,d), (c, d))
204
+
205
+ map3ple :: (a -> b ) -> (a ,a ,a ) -> (b ,b ,b )
206
+ map3ple f (x,y,z) = (f x, f y, f z)
204
207
205
- logObjectStreamInterpreterKeysLegacy , logObjectStreamInterpreterKeys :: [Text ]
206
- logObjectStreamInterpreterKeysLegacy = Map. keys (fst interpreters)
207
- logObjectStreamInterpreterKeys = Map. keys (snd interpreters)
208
+ logObjectStreamInterpreterKeysLegacy , logObjectStreamInterpreterKeysOldOrg , logObjectStreamInterpreterKeys :: [Text ]
209
+ logObjectStreamInterpreterKeysLegacy = Map. keys (interpreters & fst3)
210
+ logObjectStreamInterpreterKeysOldOrg = Map. keys (interpreters & snd3)
211
+ logObjectStreamInterpreterKeys = Map. keys (interpreters & thd3)
208
212
209
213
data LOBody
210
214
= LOTraceStartLeadershipCheck ! SlotNo ! Word64 ! Double
@@ -273,11 +277,12 @@ instance FromJSON LogObject where
273
277
<*> pure kind
274
278
<*> v .: " host"
275
279
<*> v .: " thread"
276
- <*> case Map. lookup ns (snd interpreters) <|>
280
+ <*> case Map. lookup ns (thd3 interpreters) <|>
281
+ Map. lookup ns (snd3 interpreters) <|>
277
282
Map. lookup (ns
278
283
& Text. stripPrefix " Cardano.Node."
279
- & fromMaybe " " ) (snd interpreters) <|>
280
- Map. lookup kind (fst interpreters) of
284
+ & fromMaybe " " ) (snd3 interpreters) <|>
285
+ Map. lookup kind (fst3 interpreters) of
281
286
Just interp -> interp unwrapped
282
287
Nothing -> pure $ LOAny unwrapped
283
288
where
0 commit comments