33 IServerMessage ,
44 EServerMessageType ,
55 IRankingBlockSent ,
6+ IRankingBlockReceived ,
67} from "@/components/Sim/types" ;
78import { useRef } from "react" ;
89
@@ -56,7 +57,7 @@ const parseBlockFetchServerLog = (
5657 const message : IRankingBlockSent = {
5758 type : EServerMessageType . RBSent ,
5859 slot : 0 , // FIXME: Use proper slot number
59- id : `rb-blockfetch- ${ logData . block . substring ( 0 , 8 ) } ` ,
60+ id : `rb-${ logData . block . substring ( 0 , 8 ) } ` ,
6061 sender,
6162 recipient,
6263 } ;
@@ -121,6 +122,60 @@ const parseUpstreamNodeLog = (
121122 return null ;
122123} ;
123124
125+ const parseCompletedBlockFetchLog = (
126+ streamLabels : any ,
127+ timestamp : number ,
128+ logLine : string ,
129+ ) : IServerMessage | null => {
130+ try {
131+ const logData = JSON . parse ( logLine ) ;
132+
133+ // Handle CompletedBlockFetch kind
134+ if (
135+ logData . kind === "CompletedBlockFetch" &&
136+ logData . peer &&
137+ logData . block
138+ ) {
139+ // Extract recipient from stream labels (process name)
140+ const recipient = streamLabels . process ;
141+
142+ // Parse connection to extract sender
143+ // connectionId format: "127.0.0.1:3003 127.0.0.1:3002"
144+ const connectionId = logData . peer . connectionId ;
145+ let sender = "Node0" ; // fallback
146+ if ( connectionId ) {
147+ // Split connectionId to get both endpoints
148+ const endpoints = connectionId . split ( " " ) ;
149+ if ( endpoints . length === 2 ) {
150+ const senderEndpoint = endpoints [ 1 ] ;
151+ sender = HOST_PORT_TO_NODE [ senderEndpoint ] || sender ;
152+ }
153+ }
154+
155+ const message : IRankingBlockReceived = {
156+ type : EServerMessageType . RBReceived ,
157+ slot : 0 , // FIXME: Use proper slot number
158+ id : `rb-${ logData . block . substring ( 0 , 8 ) } ` ,
159+ sender,
160+ recipient,
161+ } ;
162+
163+ return {
164+ time_s : timestamp ,
165+ message,
166+ } ;
167+ }
168+ } catch ( error ) {
169+ console . warn (
170+ "Failed to parse CompletedBlockFetch log line:" ,
171+ logLine ,
172+ error ,
173+ ) ;
174+ }
175+
176+ return null ;
177+ } ;
178+
124179// Query configurations
125180const QUERY_CONFIGS : QueryConfig [ ] = [
126181 {
@@ -131,6 +186,11 @@ const QUERY_CONFIGS: QueryConfig[] = [
131186 query : '{service="cardano-node", process="UpstreamNode"} |= `MsgBlock`' ,
132187 parser : parseUpstreamNodeLog ,
133188 } ,
189+ {
190+ query :
191+ '{service="cardano-node", ns="BlockFetch.Client.CompletedBlockFetch"}' ,
192+ parser : parseCompletedBlockFetchLog ,
193+ } ,
134194] ;
135195
136196function connectLokiWebSockets ( lokiHost : string , dispatch : any ) : ( ) => void {
@@ -179,7 +239,7 @@ function connectLokiWebSockets(lokiHost: string, dispatch: any): () => void {
179239 logLine ,
180240 ) ;
181241 if ( event ) {
182- console . debug ( "Parsed" , event . time_s , event . message ) ;
242+ console . warn ( "Parsed" , event . time_s , event . message ) ;
183243 events . push ( event ) ;
184244 }
185245 } ,
0 commit comments