Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Marconi.Cardano.Core.Runner
Description
Allow the execution of indexers on a Cardano node using the chain sync protocol
Synopsis
- runIndexerOnChainSync :: (IsIndex (ExceptT IndexerError IO) event indexer, Closeable IO indexer, Point event ~ ChainPoint) => RunIndexerConfig (ChainSyncEvent BlockEvent) event -> indexer event -> IO ()
- 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))
- runEmitterAndConsumer :: (Point event ~ ChainPoint, IsIndex (ExceptT IndexerError IO) event indexer, Closeable IO indexer) => (event -> Maybe Word) -> (event -> Maybe BlockNo) -> SecurityParam -> IO (EventEmitter indexer event a) -> CloseSwitch -> IO (MVar (indexer event))
- streamEmitter :: Point event ~ ChainPoint => (pre -> [ProcessedInput ChainPoint event]) -> SecurityParam -> indexer event -> Stream (Of pre) IO () -> IO (EventEmitter indexer event ())
- data RunIndexerConfig rawEvent event = RunIndexerConfig (MarconiTrace IO) (RunIndexerEventPreprocessing rawEvent event) RetryConfig SecurityParam NetworkId ChainPoint FilePath
- 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 = 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
- data RunIndexerOnSnapshotConfig rawEvent event = RunIndexerOnSnapshotConfig (RunIndexerEventPreprocessing rawEvent event) SecurityParam
- withNoPreprocessor :: RunIndexerEventPreprocessing (ChainSyncEvent BlockEvent) BlockEvent
- withDistancePreprocessor :: RunIndexerEventPreprocessing (ChainSyncEvent BlockEvent) (WithDistance BlockEvent)
- withDistanceAndTipPreprocessor :: RunIndexerEventPreprocessing (ChainSyncEvent BlockEvent) TipAndBlock
- withNoPreprocessorOnSnapshot :: RunIndexerEventPreprocessing BlockEvent BlockEvent
- withPreprocessorOnSnapshot :: forall event. (BlockEvent -> event) -> (event -> Maybe BlockNo) -> RunIndexerEventPreprocessing BlockEvent event
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 BlockEvent
s. Useful for running indexers from
"snapshots" of the blockchain, i.e. serialised parts of the chain which were stored on disk.
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
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
Constructors
RunIndexerConfig (MarconiTrace IO) (RunIndexerEventPreprocessing rawEvent event) RetryConfig SecurityParam NetworkId ChainPoint FilePath |
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 #
data RunIndexerOnSnapshotConfig rawEvent event #
Constructors
RunIndexerOnSnapshotConfig (RunIndexerEventPreprocessing rawEvent event) SecurityParam |
Process chainSync events
withNoPreprocessor :: RunIndexerEventPreprocessing (ChainSyncEvent BlockEvent) BlockEvent #
withDistancePreprocessor :: RunIndexerEventPreprocessing (ChainSyncEvent BlockEvent) (WithDistance BlockEvent) #
withDistanceAndTipPreprocessor :: RunIndexerEventPreprocessing (ChainSyncEvent BlockEvent) TipAndBlock #
withPreprocessorOnSnapshot :: forall event. (BlockEvent -> event) -> (event -> Maybe BlockNo) -> RunIndexerEventPreprocessing BlockEvent event #