Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
- data FileIndexer meta event = FileIndexer FilePath (FileStorageConfig meta event) (FileBuilder meta event) (EventBuilder meta event) (Point event) (Point event) (Maybe AsyncWriteFileConfig)
- data FileStorageConfig meta event = FileStorageConfig {
- _keepEmptyEvent :: Bool
- _cleanupConfig :: Maybe (FileCleanup meta event)
- _fileComparison :: meta -> meta -> Ordering
- data FileCleanup meta event
- withPartition :: (Timed (Point event) (Maybe event) -> [EventInfo meta] -> ([EventInfo meta], [EventInfo meta])) -> Maybe (FileCleanup meta event)
- data FileBuilder meta event = FileBuilder Text Text (Timed (Point event) (Maybe event) -> [Text]) (event -> Builder) (Point event -> Builder)
- data EventBuilder meta event = 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 = EventInfo {
- hasContent :: Bool
- fileMetadata :: meta
- path :: FilePath
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 filenameevent
the indexed events type.
Constructors
FileIndexer FilePath (FileStorageConfig meta event) (FileBuilder meta event) (EventBuilder meta event) (Point event) (Point event) (Maybe AsyncWriteFileConfig) |
Instances
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.
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] #
Information about an event that can be gathered from the filename
Constructors
EventInfo | |
Fields
|