-
Notifications
You must be signed in to change notification settings - Fork 718
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Denis Shevchenko
committed
Feb 10, 2022
1 parent
fad81eb
commit c736338
Showing
11 changed files
with
175 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,32 @@ | ||
module Cardano.Node.StateRep where | ||
{-# LANGUAGE DeriveAnyClass #-} | ||
{-# LANGUAGE DeriveGeneric #-} | ||
{-# LANGUAGE ImportQualifiedPost #-} | ||
{-# LANGUAGE StandaloneDeriving #-} | ||
|
||
module Cardano.Node.StateRep | ||
( NodeState (..) | ||
) where | ||
|
||
import Cardano.Prelude | ||
import Data.Aeson (FromJSON, ToJSON) | ||
|
||
import Cardano.Node.Handlers.Shutdown (ShutdownTrace (..)) | ||
|
||
type PeerInfoPP = Text -- The result of 'ppPeer' function. | ||
type StartupTracePP = Text -- The result of 'ppStartupInfoTrace' function. | ||
|
||
-- | The representation of the current state of node. | ||
-- All node states prior to tracing system going online are effectively invisible. | ||
data NodeState blk | ||
-- All node states prior to tracing system going online are effectively invisible. | ||
= NodeTracingOnlineConfiguring -- <- initTraceDispatcher | ||
| NodeConfigCompleteLoadingKernel -- just before Node.run | ||
| NodeChainDBOpening (TraceEvent blk) | ||
-- TraceOpenEvent (TraceOpenEvent blk) | ||
-- StartedOpeningDB | ||
-- StartedOpeningImmutableDB | ||
-- OpenedImmutableDB | ||
-- StartedOpeningVolatileDB | ||
-- OpenedVolatileDB | ||
-- StartedOpeningLgrDB | ||
-- TraceLedgerReplayEvent (LedgerReplayEvent blk) | ||
-- ReplayFromGenesis | ||
-- ReplayFromSnapshot | ||
-- ReplayedBlock | ||
-- TraceOpenEvent (TraceOpenEvent blk) | ||
-- OpenedLgrDB | ||
-- TraceInitChainSelEvent (TraceInitChainSelEvent blk) | ||
-- StartedInitChainSelection | ||
-- InitalChainSelected | ||
-- TraceOpenEvent (TraceOpenEvent blk) | ||
-- OpenedDB | ||
| NodeKernelOnlineSyncing -- just before onKernel in rnNodeKernelHook | ||
| NodeSyncing (TraceEvent blk) | ||
-- TraceAddBlockEvent (TraceAddBlockEvent blk) | ||
-- ChainDB.AddedToCurrentChain | ||
| NodeShutdownComplete -- <- finally in handleNodeWithTracers | ||
= NodeTracingOnlineConfiguring -- ^ initTraceDispatcher | ||
| NodeStartup StartupTracePP | ||
| NodePeers [PeerInfoPP] -- ^ The peers information here is for demonstration only. | ||
| NodeShutdown ShutdownTrace | ||
|
||
deriving instance Generic (NodeState blk) | ||
|
||
instance ToJSON (NodeState blk) | ||
|
||
-- Strictly speaking, we mustn't provide 'FromJSON' instance here, | ||
-- but it will be convenient for acceptor application. | ||
instance FromJSON (NodeState blk) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
{-# LANGUAGE LambdaCase #-} | ||
|
||
import System.Environment (getArgs) | ||
|
||
import Cardano.Tracer.Test.Acceptor | ||
|
||
main :: IO () | ||
main = getArgs >>= \case | ||
[localSock, "Initiator", dpName] -> launchAcceptorsSimple Initiator localSock dpName | ||
[localSock, "Responder", dpName] -> launchAcceptorsSimple Responder localSock dpName | ||
_ -> putStrLn "Usage: ./demo-acceptor /path/to/local/sock Initiator|Responder Name.Of.DataPoint" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
{-# LANGUAGE DataKinds #-} | ||
{-# LANGUAGE LambdaCase #-} | ||
{-# LANGUAGE OverloadedStrings #-} | ||
|
||
module Cardano.Tracer.Test.Acceptor | ||
( AcceptorsMode (..) | ||
, launchAcceptorsSimple | ||
) where | ||
|
||
import Control.Concurrent.STM.TVar (readTVarIO) | ||
import Control.Concurrent.Async.Extra (sequenceConcurrently) | ||
import Control.Concurrent.Extra (newLock) | ||
import Control.Monad (forever, forM_, void) | ||
import qualified Data.ByteString.Lazy as LBS | ||
import qualified Data.List.NonEmpty as NE | ||
import qualified Data.Map.Strict as M | ||
import qualified Data.Text as T | ||
import System.Time.Extra (sleep) | ||
|
||
import Cardano.Tracer.Acceptors.Run (runAcceptors) | ||
import Cardano.Tracer.Configuration | ||
import Cardano.Tracer.Types (DataPointRequestors) | ||
import Cardano.Tracer.Utils (initAcceptedMetrics, initConnectedNodes, | ||
initDataPointRequestors, initProtocolsBrake) | ||
import Trace.Forward.Utils.DataPoint (askForDataPoints) | ||
|
||
data AcceptorsMode = Initiator | Responder | ||
|
||
launchAcceptorsSimple | ||
:: AcceptorsMode | ||
-> FilePath | ||
-> String | ||
-> IO () | ||
launchAcceptorsSimple mode localSock dpName = do | ||
protocolsBrake <- initProtocolsBrake | ||
dpRequestors <- initDataPointRequestors | ||
connectedNodes <- initConnectedNodes | ||
acceptedMetrics <- initAcceptedMetrics | ||
currentLogLock <- newLock | ||
void . sequenceConcurrently $ | ||
[ runAcceptors mkConfig connectedNodes acceptedMetrics | ||
dpRequestors protocolsBrake currentLogLock | ||
, runDataPointsPrinter dpName dpRequestors | ||
] | ||
where | ||
mkConfig = TracerConfig | ||
{ networkMagic = 764824073 | ||
, network = case mode of | ||
Initiator -> ConnectTo $ NE.fromList [LocalSocket localSock] | ||
Responder -> AcceptAt (LocalSocket localSock) | ||
, loRequestNum = Just 1 | ||
, ekgRequestFreq = Just 1.0 | ||
, hasEKG = Nothing | ||
, hasPrometheus = Nothing | ||
, logging = NE.fromList [LoggingParams "/tmp/demo-acceptor" FileMode ForHuman] | ||
, rotation = Nothing | ||
, verbosity = Just Minimum | ||
} | ||
|
||
runDataPointsPrinter | ||
:: String | ||
-> DataPointRequestors | ||
-> IO () | ||
runDataPointsPrinter dpName dpRequestors = forever $ do | ||
sleep 1.0 | ||
dpReqs <- M.toList <$> readTVarIO dpRequestors | ||
forM_ dpReqs $ \(_, dpReq) -> do | ||
dpValues <- askForDataPoints dpReq [T.pack dpName] | ||
forM_ dpValues $ \(dpName', dpValue) -> | ||
case dpValue of | ||
Nothing -> return () | ||
Just rawDPValue -> do | ||
putStr $ "DataPoint, name: " <> T.unpack dpName' <> ", raw value: " | ||
LBS.putStr rawDPValue | ||
putStrLn "" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters