marconi-core-1.2.0.0: Modular indexing for rewindable ledger
Safe HaskellSafe-Inferred
LanguageHaskell2010

Marconi.Core.Indexer.FileIndexer

Description

An indexer that stores its events to files, using the provided serialisation.

Note that the indexer stores one file per event, it recommended to either limit the number of events we keep or to use it for sparse events.

Synopsis

Documentation

data FileIndexer meta event #

An indexer that store events in a directory, one file per event.

It as to type parameters:

  • meta the metadata type, used to build the filename
  • event the indexed events type.

Constructors

FileIndexer FilePath (FileStorageConfig meta event) (FileBuilder meta event) (EventBuilder meta event) (Point event) (Point event) (Maybe AsyncWriteFileConfig) 

Instances

Instances details
(MonadIO io, MonadError IndexerError io) => IsIndex io event (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Indexer.FileIndexer

Methods

index :: Timed (Point event) (Maybe event) -> FileIndexer meta event -> io (FileIndexer meta event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> FileIndexer meta event -> io (FileIndexer meta event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> FileIndexer meta event -> io (FileIndexer meta event) #

rollback :: Point event -> FileIndexer meta event -> io (FileIndexer meta event) #

setLastStablePoint :: Point event -> FileIndexer meta event -> io (FileIndexer meta event) #

Applicative m => IsSync m event (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Indexer.FileIndexer

Methods

lastStablePoint :: FileIndexer meta event -> m (Point event) #

lastSyncPoint :: FileIndexer meta event -> m (Point event) #

(MonadIO m, MonadError (QueryError (EventAtQuery event)) m) => Queryable m event (EventAtQuery event) (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> EventAtQuery event -> FileIndexer meta event -> m (Result (EventAtQuery event)) #

queryLatest :: EventAtQuery event -> FileIndexer meta event -> m (Result (EventAtQuery event)) #

(MonadIO m, MonadError (QueryError (EventsFromQuery event)) m) => Queryable m event (EventsFromQuery event) (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> EventsFromQuery event -> FileIndexer meta event -> m (Result (EventsFromQuery event)) #

queryLatest :: EventsFromQuery event -> FileIndexer meta event -> m (Result (EventsFromQuery event)) #

(MonadIO m, MonadError (QueryError (LatestEventsQuery event)) m) => Queryable m event (LatestEventsQuery event) (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Query

Methods

query :: Point event -> LatestEventsQuery event -> FileIndexer meta event -> m (Result (LatestEventsQuery event)) #

queryLatest :: LatestEventsQuery event -> FileIndexer meta event -> m (Result (LatestEventsQuery event)) #

(MonadIO m, MonadError IndexerError m) => Closeable m (FileIndexer meta) # 
Instance details

Defined in Marconi.Core.Indexer.FileIndexer

Methods

close :: FileIndexer meta event -> m () #

data FileStorageConfig meta event #

The datatype used to configure the way we store files, including:

  • control over which events are saved
  • how many events we keep on disk

Be careful in the choice of the function used to remove events as you probably don't want to store all the events on disk.

Constructors

FileStorageConfig 

Fields

data FileCleanup meta event #

withPartition :: (Timed (Point event) (Maybe event) -> [EventInfo meta] -> ([EventInfo meta], [EventInfo meta])) -> Maybe (FileCleanup meta event) #

data FileBuilder meta event #

Configuration datatype for FileIndexer that provides the content needed to create the filenames used by the indexer

Constructors

FileBuilder Text Text (Timed (Point event) (Maybe event) -> [Text]) (event -> Builder) (Point event -> Builder) 

data EventBuilder meta event #

This datatypes gather the functions needed to deserialise events from both the filenames and the file content.

meta is the metadata type and event the type of events we handle.

Constructors

EventBuilder ([Text] -> Maybe meta) (meta -> Point event) (meta -> ByteString -> Either Text (Maybe event)) (ByteString -> Either Text (Point event)) 

mkFileIndexer :: (MonadIO m, MonadError IndexerError m, Ord (Point event), HasGenesis (Point event)) => FilePath -> Maybe Int -> FileStorageConfig meta event -> FileBuilder meta event -> EventBuilder meta event -> m (FileIndexer meta event) #

compareMeta :: FileIndexer meta event -> meta -> meta -> Ordering #

eventDirectory :: forall meta event. Lens' (FileIndexer meta event) FilePath #

eventPrefix :: forall meta event meta. Lens (FileBuilder meta event) (FileBuilder meta event) Text Text #

eventSuffix :: forall meta event meta. Lens (FileBuilder meta event) (FileBuilder meta event) Text Text #

eventBuilder :: forall meta event. Lens' (FileIndexer meta event) (EventBuilder meta event) #

deserialiseEvent :: forall meta event. Lens' (EventBuilder meta event) (meta -> ByteString -> Either Text (Maybe event)) #

deserialisePoint :: forall meta event. Lens' (EventBuilder meta event) (ByteString -> Either Text (Point event)) #

extractPoint :: forall meta event. Lens' (EventBuilder meta event) (meta -> Point event) #

serialiseEvent :: forall meta event meta. Lens (FileBuilder meta event) (FileBuilder meta event) (event -> Builder) (event -> Builder) #

serialisePoint :: forall meta event meta. Lens (FileBuilder meta event) (FileBuilder meta event) (Point event -> Builder) (Point event -> Builder) #

deserialiseTimedEvent :: MonadIO m => FileIndexer meta event -> EventInfo meta -> ExceptT Text m (Timed (Point event) (Maybe event)) #

fileEventIdentifier :: forall meta event meta. Lens (FileBuilder meta event) (FileBuilder meta event) (Timed (Point event) (Maybe event) -> [Text]) (Timed (Point event) (Maybe event) -> [Text]) #

fileIndexerLastSyncPoint :: forall meta event. Lens' (FileIndexer meta event) (Point event) #

fullPath :: FileIndexer meta event -> EventInfo meta -> FilePath #

getDirectoryMetadata :: (MonadIO m, MonadError (QueryError q) m) => FileIndexer meta event -> m [EventInfo meta] #

eventsMetadata :: Traversal' (FileIndexer meta event) [EventInfo meta] #

data EventInfo meta #

Information about an event that can be gathered from the filename

Constructors

EventInfo 

Fields

Instances

Instances details
Show meta => Show (EventInfo meta) # 
Instance details

Defined in Marconi.Core.Indexer.FileIndexer