marconi-cardano-core-1.2.0.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Marconi.Cardano.Core.Runner

Description

Allow the execution of indexers on a Cardano node using the chain sync protocol

Synopsis

Runner

runIndexerOnChainSync :: (IsIndex (ExceptT IndexerError IO) event indexer, Closeable IO indexer, Point event ~ ChainPoint) => RunIndexerConfig (ChainSyncEvent BlockEvent) event -> indexer event -> IO () #

Connect to the given socket to start a chain sync protocol and start indexing it with the given indexer.

runIndexerOnSnapshot :: (IsIndex (ExceptT IndexerError IO) event indexer, Closeable IO indexer, Point event ~ ChainPoint) => RunIndexerOnSnapshotConfig BlockEvent event -> indexer event -> Stream (Of BlockEvent) IO () -> IO (MVar (indexer event)) #

Run an indexer directly from a stream of BlockEvents. Useful for running indexers from "snapshots" of the blockchain, i.e. serialised parts of the chain which were stored on disk.

runEmitterAndConsumer #

Arguments

:: (Point event ~ ChainPoint, IsIndex (ExceptT IndexerError IO) event indexer, Closeable IO indexer) 
=> (event -> Maybe Word)

A tip extraction function

-> (event -> Maybe BlockNo)

A block extraction function

-> SecurityParam 
-> IO (EventEmitter indexer event a) 
-> CloseSwitch 
-> IO (MVar (indexer event)) 

Races two threads, one which emits events and the other which consumes them. The indexer receives the consumed events. Returns the MVar in which the indexer resides, for inspection.

Emitters

streamEmitter #

Arguments

:: Point event ~ ChainPoint 
=> (pre -> [ProcessedInput ChainPoint event])

A preprocessing function

-> SecurityParam 
-> indexer event 
-> Stream (Of pre) IO () 
-> IO (EventEmitter indexer event ()) 

Emits events from a stream. There is a level of indirection here, since instead of consuming the stream a caller will consume the created queue. The reason behind this is to provide the same interface as chainSyncEventEmitter.

Runner Config

data RunIndexerConfig rawEvent event #

Common configuration required to run indexers

runIndexerPreprocessEvent :: forall rawEvent event rawEvent. Lens (RunIndexerEventPreprocessing rawEvent event) (RunIndexerEventPreprocessing rawEvent event) (rawEvent -> [ProcessedInput ChainPoint event]) (rawEvent -> [ProcessedInput ChainPoint event]) #

runIndexerExtractBlockNo :: forall rawEvent event. Lens' (RunIndexerEventPreprocessing rawEvent event) (event -> Maybe BlockNo) #

runIndexerExtractTipDistance :: forall rawEvent event. Lens' (RunIndexerEventPreprocessing rawEvent event) (event -> Maybe Word) #

data RunIndexerEventPreprocessing rawEvent event #

Runner pre-processing

Constructors

RunIndexerEventPreprocessing (rawEvent -> [ProcessedInput ChainPoint event]) (event -> Maybe BlockNo) (event -> Maybe Word) 

runIndexerConfigTrace :: forall rawEvent event. Lens' (RunIndexerConfig rawEvent event) (MarconiTrace IO) #

runIndexerConfigEventProcessing :: forall rawEvent event rawEvent event. Lens (RunIndexerConfig rawEvent event) (RunIndexerConfig rawEvent event) (RunIndexerEventPreprocessing rawEvent event) (RunIndexerEventPreprocessing rawEvent event) #

runIndexerConfigRetryConfig :: forall rawEvent event. Lens' (RunIndexerConfig rawEvent event) RetryConfig #

runIndexerConfigSecurityParam :: forall rawEvent event. Lens' (RunIndexerConfig rawEvent event) SecurityParam #

runIndexerConfigNetworkId :: forall rawEvent event. Lens' (RunIndexerConfig rawEvent event) NetworkId #

runIndexerConfigChainPoint :: forall rawEvent event. Lens' (RunIndexerConfig rawEvent event) ChainPoint #

runIndexerConfigSocketPath :: forall rawEvent event. Lens' (RunIndexerConfig rawEvent event) FilePath #

Process chainSync events

Event types