From f1feeb5bf0c2490a0a2cf65fc09b82eac5ddba87 Mon Sep 17 00:00:00 2001 From: Marcin Szamotulski Date: Fri, 17 Dec 2021 15:36:34 +0100 Subject: [PATCH] connection-manager & inbound governor transition tracers --- cardano-node/src/Cardano/Tracing/Config.hs | 10 ++++ .../Tracing/OrphanInstances/Network.hs | 56 +++++++++++++++++++ cardano-node/src/Cardano/Tracing/Tracers.hs | 8 ++- 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/cardano-node/src/Cardano/Tracing/Config.hs b/cardano-node/src/Cardano/Tracing/Config.hs index 1d1d133a578..35c58a08a07 100644 --- a/cardano-node/src/Cardano/Tracing/Config.hs +++ b/cardano-node/src/Cardano/Tracing/Config.hs @@ -46,6 +46,7 @@ type TraceChainSyncHeaderServer = ("TraceChainSyncHeaderServer" :: Symbol) type TraceChainSyncProtocol = ("TraceChainSyncProtocol" :: Symbol) type TraceConnectionManager = ("TraceConnectionManager" :: Symbol) type TraceConnectionManagerCounters = ("TraceConnectionManagerCounters" :: Symbol) +type TraceConnectionManagerTransitions = ("TraceConnectionManagerTransitions" :: Symbol) type DebugPeerSelectionInitiator = ("DebugPeerSelectionInitiator" :: Symbol) type DebugPeerSelectionInitiatorResponder = ("DebugPeerSelectionInitiatorResponder" :: Symbol) type TraceDiffusionInitialization = ("TraceDiffusionInitialization" :: Symbol) @@ -78,6 +79,7 @@ type TracePublicRootPeers = ("TracePublicRootPeers" :: Symbol) type TraceServer = ("TraceServer" :: Symbol) type TraceInboundGovernor = ("TraceInboundGovernor" :: Symbol) type TraceInboundGovernorCounters = ("TraceInboundGovernorCounters" :: Symbol) +type TraceInboundGovernorTransitions = ("TraceInboundGovernorTransitions" :: Symbol) type TraceTxInbound = ("TraceTxInbound" :: Symbol) type TraceTxOutbound = ("TraceTxOutbound" :: Symbol) type TraceTxSubmissionProtocol = ("TraceTxSubmissionProtocol" :: Symbol) @@ -111,6 +113,7 @@ data TraceSelection , traceChainSyncProtocol :: OnOff TraceChainSyncProtocol , traceConnectionManager :: OnOff TraceConnectionManager , traceConnectionManagerCounters :: OnOff TraceConnectionManagerCounters + , traceConnectionManagerTransitions :: OnOff TraceConnectionManagerTransitions , traceDebugPeerSelectionInitiatorTracer :: OnOff DebugPeerSelectionInitiator , traceDebugPeerSelectionInitiatorResponderTracer :: OnOff DebugPeerSelectionInitiatorResponder , traceDiffusionInitialization :: OnOff TraceDiffusionInitialization @@ -122,6 +125,7 @@ data TraceSelection , traceHandshake :: OnOff TraceHandshake , traceInboundGovernor :: OnOff TraceInboundGovernor , traceInboundGovernorCounters :: OnOff TraceInboundGovernorCounters + , traceInboundGovernorTransitions :: OnOff TraceInboundGovernorTransitions , traceIpSubscription :: OnOff TraceIpSubscription , traceKeepAliveClient :: OnOff TraceKeepAliveClient , traceLedgerPeers :: OnOff TraceLedgerPeers @@ -180,6 +184,8 @@ traceConfigParser v ctor = connectionManager = OnOff True connectionManagerCounters :: OnOff TraceConnectionManagerCounters connectionManagerCounters = OnOff True + connectionManagerTransitions :: OnOff TraceConnectionManagerTransitions + connectionManagerTransitions = OnOff False debugPeerSelectionInitiator :: OnOff DebugPeerSelectionInitiator debugPeerSelectionInitiator = OnOff False debugPeerSelectionInitiatorResponder :: OnOff DebugPeerSelectionInitiatorResponder @@ -202,6 +208,8 @@ traceConfigParser v ctor = inboundGovernor = OnOff True inboundGovernorCounters :: OnOff TraceInboundGovernorCounters inboundGovernorCounters = OnOff True + inboundGovernorTransitions :: OnOff TraceInboundGovernorTransitions + inboundGovernorTransitions = OnOff False ipSubscription :: OnOff TraceIpSubscription ipSubscription = OnOff True keepAliveClient :: OnOff TraceKeepAliveClient @@ -270,6 +278,7 @@ traceConfigParser v ctor = <*> v .:? getName chainSyncProtocol .!= chainSyncProtocol <*> v .:? getName connectionManager .!= connectionManager <*> v .:? getName connectionManagerCounters .!= connectionManagerCounters + <*> v .:? getName connectionManagerTransitions .!= connectionManagerTransitions <*> v .:? getName debugPeerSelectionInitiator .!= debugPeerSelectionInitiator <*> v .:? getName debugPeerSelectionInitiatorResponder @@ -283,6 +292,7 @@ traceConfigParser v ctor = <*> v .:? getName handshake .!= handshake <*> v .:? getName inboundGovernor .!= inboundGovernor <*> v .:? getName inboundGovernorCounters .!= inboundGovernorCounters + <*> v .:? getName inboundGovernorTransitions .!= inboundGovernorTransitions <*> v .:? getName ipSubscription .!= ipSubscription <*> v .:? getName keepAliveClient .!= keepAliveClient <*> v .:? getName ledgerPeers .!= ledgerPeers diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs index 567d70e384f..221780c1b9d 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs @@ -459,6 +459,10 @@ instance HasSeverityAnnotation (ConnectionManagerTrace addr (ConnectionHandlerTr TrState {} -> Info ConnMgr.TrUnexpectedlyFalseAssertion {} -> Error +instance HasPrivacyAnnotation (ConnMgr.AbstractTransitionTrace addr) +instance HasSeverityAnnotation (ConnMgr.AbstractTransitionTrace addr) where + getSeverityAnnotation _ = Debug + instance HasPrivacyAnnotation (ServerTrace addr) instance HasSeverityAnnotation (ServerTrace addr) where getSeverityAnnotation ev = @@ -492,6 +496,10 @@ instance HasSeverityAnnotation (InboundGovernorTrace addr) where InboundGovernor.TrUnexpectedlyFalseAssertion {} -> Error +instance HasPrivacyAnnotation (Server.RemoteTransitionTrace addr) +instance HasSeverityAnnotation (Server.RemoteTransitionTrace addr) where + getSeverityAnnotation _ = Debug + -- -- | instances of @Transformable@ -- @@ -685,6 +693,13 @@ instance (Show addr, Show versionNumber, Show agreedOptions) (ConnectionHandlerTrace versionNumber agreedOptions)) where formatText a _ = pack (show a) +instance (Show addr, ToJSON addr, ToObject addr) + => Transformable Text IO (ConnMgr.AbstractTransitionTrace addr) where + trTransformer = trStructuredText +instance Show addr + => HasTextFormatter (ConnMgr.AbstractTransitionTrace addr) where + formatText a _ = pack (show a) + instance (Show addr, ToObject addr, ToJSON addr) => Transformable Text IO (ServerTrace addr) where trTransformer = trStructuredText @@ -699,6 +714,13 @@ instance Show addr => HasTextFormatter (InboundGovernorTrace addr) where formatText a _ = pack (show a) +instance (Show addr, ToJSON addr) + => Transformable Text IO (Server.RemoteTransitionTrace addr) where + trTransformer = trStructuredText +instance Show addr + => HasTextFormatter (Server.RemoteTransitionTrace addr) where + formatText a _ = pack (show a) + -- -- | instances of @ToObject@ -- @@ -1862,6 +1884,31 @@ instance (Show addr, Show versionNumber, Show agreedOptions, ToObject addr, , "info" .= String (pack . show $ info) ] +instance ToJSON state => ToJSON (ConnMgr.MaybeUnknown state) where + toJSON (ConnMgr.Known st) = + Aeson.object + [ "state" .= toJSON st + , "type" .= String "known" + ] + toJSON (ConnMgr.Race st) = + Aeson.object + [ "state" .= toJSON st + , "type" .= String "race" + ] + toJSON ConnMgr.Unknown = + Aeson.object + [ "type" .= String "unknown" ] + + +instance (Show addr, ToObject addr, ToJSON addr) + => ToObject (ConnMgr.AbstractTransitionTrace addr) where + toObject _verb (ConnMgr.TransitionTrace addr tr) = + mkObject [ "kind" .= String "ConnectionManagerTransition" + , "address" .= toJSON addr + , "from" .= toJSON (ConnMgr.fromState tr) + , "to" .= toJSON (ConnMgr.toState tr) + ] + instance (Show addr, ToObject addr, ToJSON addr) => ToObject (ServerTrace addr) where toObject verb (TrAcceptConnection peerAddr) = @@ -2024,3 +2071,12 @@ instance (ToJSON addr, Show addr) mkObject [ "kind" .= String "UnexpectedlyFalseAssertion" , "remoteSt" .= String (pack . show $ info) ] + +instance ToJSON addr + => ToObject (Server.RemoteTransitionTrace addr) where + toObject _verb (ConnMgr.TransitionTrace addr tr) = + mkObject [ "kind" .= String "ConnectionManagerTransition" + , "address" .= toJSON addr + , "from" .= toJSON (ConnMgr.fromState tr) + , "to" .= toJSON (ConnMgr.toState tr) + ] diff --git a/cardano-node/src/Cardano/Tracing/Tracers.hs b/cardano-node/src/Cardano/Tracing/Tracers.hs index ab03eae0c0d..8f37d312ea5 100644 --- a/cardano-node/src/Cardano/Tracing/Tracers.hs +++ b/cardano-node/src/Cardano/Tracing/Tracers.hs @@ -372,7 +372,9 @@ mkTracers blockConfig tOpts@(TracingOnLegacy trSel) tr nodeKern ekgDirect enable ekgDirect <> tracerOnOff (traceConnectionManager trSel) verb "ConnectionManager" tr - , P2P.dtConnectionManagerTransitionTracer = nullTracer -- TODO + , P2P.dtConnectionManagerTransitionTracer = + tracerOnOff (traceConnectionManagerTransitions trSel) + verb "ConnectionManagerTransitions" tr , P2P.dtServerTracer = tracerOnOff (traceServer trSel) verb "Server" tr , P2P.dtInboundGovernorTracer = @@ -381,7 +383,9 @@ mkTracers blockConfig tOpts@(TracingOnLegacy trSel) tr nodeKern ekgDirect enable ekgDirect <> tracerOnOff (traceInboundGovernor trSel) verb "InboundGovernor" tr - , P2P.dtInboundGovernorTransitionTracer = nullTracer -- TODO + , P2P.dtInboundGovernorTransitionTracer = + tracerOnOff (traceInboundGovernorTransitions trSel) + verb "InboundGovernorTransitions" tr , P2P.dtLocalConnectionManagerTracer = tracerOnOff (traceLocalConnectionManager trSel) verb "LocalConnectionManager" tr