eventstore-0.8.0.0: EventStore TCP Client

Copyright(C) 2014 Yorick Laupa
License(see the file LICENSE)
MaintainerYorick Laupa <yo.eight@gmail.com>
Stabilityprovisional
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Database.EventStore

Contents

Description

 

Synopsis

Event

data Event Source

Contains event information like its type and data. Only used for write queries.

Instances

data EventData Source

Holds event data.

createEvent Source

Arguments

:: Text

Event type

-> Maybe UUID

Event ID, generated if Nothing

-> EventData

Event data

-> Event 

withJson :: Value -> EventData Source

Creates a event using JSON format

withJsonAndMetadata :: Value -> Value -> EventData Source

Create a event with metadata using JSON format

Connection

data Connection Source

Represents a connection to a single EventStore node.

data Credentials Source

Holds login and password information.

data Retry Source

Represents reconnection strategy.

atMost :: Int -> Retry Source

Indicates how many times we should try to reconnect to the server. A value less than or equal to 0 means no retry.

keepRetrying :: Retry Source

Indicates we should try to reconnect to the server until the end of the Universe.

credentials Source

Arguments

:: ByteString

Login

-> ByteString

Password

-> Credentials 

defaultSettings :: Settings Source

Default global settings.

connect Source

Arguments

:: Settings 
-> String

HostName

-> Int

Port

-> IO Connection 

Creates a new Connection to a single node. It maintains a full duplex connection to the EventStore. An EventStore Connection operates quite differently than say a SQL connection. Normally when you use a SQL connection you want to keep the connection open for a much longer of time than when you use a SQL connection.

Another difference is that with the EventStore Connection all operation are handled in a full async manner (even if you call the synchronous behaviors). Many threads can use an EvenStore Connection at the same time or a single thread can make many asynchronous requests. To get the most performance out of the connection it is generally recommend to use it in this way.

shutdown :: Connection -> IO () Source

Asynchronously closes the Connection.

Read Operations

data StreamMetadataResult Source

Represents stream metadata as a series of properties for system data and a StreamMetadata object for user metadata.

Constructors

StreamMetadataResult 

Fields

streamMetaResultStream :: !Text

The name of the stream.

streamMetaResultVersion :: !Int32

The version of the metadata format.

streamMetaResultData :: !StreamMetadata

A StreamMetadata containing user-specified metadata.

NotFoundStreamMetadataResult

When the stream is either not found or 'no stream'.

Fields

streamMetaResultStream :: !Text

The name of the stream.

DeletedStreamMetadataResult

When the stream is soft-deleted.

Fields

streamMetaResultStream :: !Text

The name of the stream.

readEvent Source

Arguments

:: Connection 
-> Text

Stream name

-> Int32

Event number

-> Bool

Resolve Link Tos

-> IO (Async ReadResult) 

Reads a single event from given stream.

readAllEventsBackward Source

Arguments

:: Connection 
-> Position 
-> Int32

Batch size

-> Bool

Resolve Link Tos

-> IO (Async AllEventsSlice) 

Reads events from the $all stream backward

readAllEventsForward Source

Arguments

:: Connection 
-> Position 
-> Int32

Batch size

-> Bool

Resolve Link Tos

-> IO (Async AllEventsSlice) 

Reads events from the $all stream forward.

readStreamEventsBackward Source

Arguments

:: Connection 
-> Text

Stream name

-> Int32

From event number

-> Int32

Batch size

-> Bool

Resolve Link Tos

-> IO (Async StreamEventsSlice) 

Reads events from a given stream backward.

readStreamEventsForward Source

Arguments

:: Connection 
-> Text

Stream name

-> Int32

From event number

-> Int32

Batch size

-> Bool

Resolve Link Tos

-> IO (Async StreamEventsSlice) 

Reads events from a given stream forward.

getStreamMetadata :: Connection -> Text -> IO (Async StreamMetadataResult) Source

Asynchronously gets the metadata of a stream.

Write Operations

data StreamACL Source

Represents an access control list for a stream.

Constructors

StreamACL 

Fields

streamACLReadRoles :: ![Text]

Roles and users permitted to read the stream.

streamACLWriteRoles :: ![Text]

Roles and users permitted to write to the stream.

streamACLDeleteRoles :: ![Text]

Roles and users permitted to delete to the stream.

streamACLMetaReadRoles :: ![Text]

Roles and users permitted to read stream metadata.

streamACLMetaWriteRoles :: ![Text]

Roles and users permitted to write stream metadata.

Instances

data StreamMetadata Source

Represents stream metadata with strongly typed properties for system values and a dictionary-like interface for custom values.

Constructors

StreamMetadata 

Fields

streamMetadataMaxCount :: !(Maybe Int32)

The maximum number of events allowed in the stream.

streamMetadataMaxAge :: !(Maybe TimeSpan)

The maximum age of events allowed in the stream.

streamMetadataTruncateBefore :: !(Maybe Int32)

The event number from which previous events can be scavenged. This is used to implement soft-deletion of streams.

streamMetadataCacheControl :: !(Maybe TimeSpan)

The amount of time for which the stream head is cachable.

streamMetadataACL :: !StreamACL

The access control list for the stream.

streamMetadataCustom :: !Object

An enumerable of key-value pairs of keys to JSON text for user-provider metadata.

streamMetadataGetCustomPropertyValue :: StreamMetadata -> Text -> Maybe Value Source

Gets a custom property value from metadata.

streamMetadataGetCustomProperty :: FromJSON a => StreamMetadata -> Text -> Maybe a Source

Get a custom property value from metadata.

emptyStreamACL :: StreamACL Source

StreamACL with no role or users whatsoever.

deleteStream Source

Arguments

:: Connection 
-> Text

Stream name

-> ExpectedVersion 
-> Maybe Bool

Hard delete

-> IO (Async DeleteResult) 

Deletes given stream.

sendEvent Source

Arguments

:: Connection 
-> Text

Stream name

-> ExpectedVersion 
-> Event 
-> IO (Async WriteResult) 

Sends a single Event to given stream.

sendEvents Source

Arguments

:: Connection 
-> Text

Stream name

-> ExpectedVersion 
-> [Event] 
-> IO (Async WriteResult) 

Sends a list of Event to given stream.

setStreamMetadata :: Connection -> Text -> ExpectedVersion -> StreamMetadata -> IO (Async WriteResult) Source

Asynchronously sets the metadata for a stream.

Builder

type Builder a = Endo a Source

Stream ACL Builder

setReadRoles :: [Text] -> StreamACLBuilder Source

Sets role names with read permission for the stream.

setReadRole :: Text -> StreamACLBuilder Source

Sets a single role name with read permission for the stream.

setWriteRoles :: [Text] -> StreamACLBuilder Source

Sets role names with write permission for the stream.

setWriteRole :: Text -> StreamACLBuilder Source

Sets a single role name with write permission for the stream.

setDeleteRoles :: [Text] -> StreamACLBuilder Source

Sets role names with delete permission for the stream.

setDeleteRole :: Text -> StreamACLBuilder Source

Sets a single role name with delete permission for the stream.

setMetaReadRoles :: [Text] -> StreamACLBuilder Source

Sets role names with metadata read permission for the stream.

setMetaReadRole :: Text -> StreamACLBuilder Source

Sets a single role name with metadata read permission for the stream.

setMetaWriteRoles :: [Text] -> StreamACLBuilder Source

Sets role names with metadata write permission for the stream.

setMetaWriteRole :: Text -> StreamACLBuilder Source

Sets a single role name with metadata write permission for the stream.

Stream Metadata Builder

setMaxCount :: Int32 -> StreamMetadataBuilder Source

Sets the maximum number of events allowed in the stream.

setMaxAge :: TimeSpan -> StreamMetadataBuilder Source

Sets the maximum age of events allowed in the stream.

setTruncateBefore :: Int32 -> StreamMetadataBuilder Source

Sets the event number from which previous events can be scavenged.

setCacheControl :: TimeSpan -> StreamMetadataBuilder Source

Sets the amount of time for which the stream head is cachable.

setCustomProperty :: ToJSON a => Text -> a -> StreamMetadataBuilder Source

Sets a custom metadata property.

TimeSpan

data TimeSpan Source

.NET TimeSpan: TimeSpan represents a duration of time. A TimeSpan can be negative or positive. Sorry

Transaction

data Transaction Source

Represents a multi-request transaction with the EventStore.

transactionStart Source

Arguments

:: Connection 
-> Text

Stream name

-> ExpectedVersion 
-> IO (Async Transaction) 

Starts a transaction on given stream.

transactionCommit :: Transaction -> IO (Async WriteResult) Source

Asynchronously commits this transaction.

transactionRollback :: Transaction -> IO () Source

Rollback this transaction.

transactionSendEvents :: Transaction -> [Event] -> IO (Async ()) Source

Asynchronously writes to a transaction in the EventStore.

Volatile Subscription

data DropReason Source

Represents the reason subscription drop happened.

class Identifiable a Source

Represents a subscription that is directly identifiable. Regular and Persistent fit that description while Catchup doesn't. Because Catchup reads all events from a particular checkpoint and when it's finished, it issues a subscription request.

data Subscription a Source

Represents a subscription to a stream.

data Regular Source

Represents a subscription to a single stream or $all stream in the EventStore.

data Catchup Source

Represents catch-up subscription.

data Persistent Source

Represents a persistent subscription.

subscribe Source

Arguments

:: Connection 
-> Text

Stream name

-> Bool

Resolve Link Tos

-> IO (Async (Subscription Regular)) 

Subcribes to given stream.

subscribeToAll Source

Arguments

:: Connection 
-> Bool

Resolve Link Tos

-> IO (Async (Subscription Regular)) 

Subcribes to $all stream.

subNextEvent :: Subscription a -> IO (NextEvent a) Source

Awaits for the next event.

subId :: Identifiable a => Subscription a -> UUID Source

Gets the ID of the subscription.

subStreamId :: Subscription a -> Text Source

The name of the stream to which the subscription is subscribed.

subIsSubscribedToAll :: Subscription a -> Bool Source

True if this subscription is to $all stream.

subResolveLinkTos :: Subscription Regular -> Bool Source

Determines whether or not any link events encontered in the stream will be resolved.

subLastCommitPos :: Identifiable a => Subscription a -> Int64 Source

The last commit position seen on the subscription (if this a subscription to $all stream).

subLastEventNumber :: Identifiable a => Subscription a -> Maybe Int32 Source

The last event number seen on the subscription (if this is a subscription to a single stream).

subUnsubscribe :: Subscription a -> IO () Source

Asynchronously unsubscribe from the the stream.

Catch-up Subscription

data CatchupError Source

Errors that could arise during a catch-up subscription. Text value represents the stream name.

subscribeFrom Source

Arguments

:: Connection 
-> Text

Stream name

-> Bool

Resolve Link Tos

-> Maybe Int32

Last checkpoint

-> Maybe Int32

Batch size

-> IO (Subscription Catchup) 

Subscribes to given stream. If last checkpoint is defined, this will readStreamEventsForward from that event number, otherwise from the beginning. Once last stream event reached up, a subscription request will be sent using subscribe.

subscribeToAllFrom Source

Arguments

:: Connection 
-> Bool

Resolve Link Tos

-> Maybe Position

Last checkpoint

-> Maybe Int32

Batch size

-> IO (Subscription Catchup) 

Same as subscribeFrom but applied to $all stream.

waitTillCatchup :: Subscription Catchup -> IO () Source

Waits until Catchup subscription catch-up its stream.

Persistent Subscription

data PersistentSubscriptionSettings Source

Constructors

PersistentSubscriptionSettings 

Fields

psSettingsResolveLinkTos :: !Bool

Whether or not the persistent subscription should resolve linkTo events to their linked events.

psSettingsStartFrom :: !Int32

Where the subscription should start from (position).

psSettingsExtraStats :: !Bool

Whether or not in depth latency statistics should be tracked on this subscription.

psSettingsMsgTimeout :: !TimeSpan

The amount of time after which a message should be considered to be timeout and retried.

psSettingsMaxRetryCount :: !Int32

The maximum number of retries (due to timeout) before a message get considered to be parked.

psSettingsLiveBufSize :: !Int32

The size of the buffer listening to live messages as they happen.

psSettingsReadBatchSize :: !Int32

The number of events read at a time when paging in history.

psSettingsHistoryBufSize :: !Int32

The number of events to cache when paging through history.

psSettingsCheckPointAfter :: !TimeSpan

The amount of time to try checkpoint after.

psSettingsMinCheckPointCount :: !Int32

The minimum number of messages to checkpoint.

psSettingsMaxCheckPointCount :: !Int32

The maximum number of message to checkpoint. If this number is reached, a checkpoint will be forced.

psSettingsMaxSubsCount :: !Int32

The maximum number of subscribers allowed.

psSettingsNamedConsumerStrategy :: !SystemConsumerStrategy

The strategy to use for distributing events to client consumers.

data SystemConsumerStrategy Source

System supported consumer strategies for use with persistent subscriptions.

Constructors

DispatchToSingle

Distributes events to a single client until it is full. Then round robin to the next client.

RoundRobin

Distribute events to each client in a round robin fashion.

notifyEventsProcessed :: Subscription Persistent -> [UUID] -> IO () Source

Acknowledges those event ids have been successfully processed.

notifyEventsFailed :: Subscription Persistent -> NakAction -> Maybe Text -> [UUID] -> IO () Source

Acknowledges those event ids have failed to be processed successfully.

defaultPersistentSubscriptionSettings :: PersistentSubscriptionSettings Source

System default persistent subscription settings.

createPersistentSubscription :: Connection -> Text -> Text -> PersistentSubscriptionSettings -> IO (Async ()) Source

Asynchronously create a persistent subscription group on a stream.

updatePersistentSubscription :: Connection -> Text -> Text -> PersistentSubscriptionSettings -> IO (Async ()) Source

Asynchronously update a persistent subscription group on a stream.

deletePersistentSubscription :: Connection -> Text -> Text -> IO (Async ()) Source

Asynchronously delete a persistent subscription group on a stream.

connectToPersistentSubscription :: Connection -> Text -> Text -> Int32 -> IO (Async (Subscription Persistent)) Source

Asynchronously connect to a persistent subscription given a group on a stream.

Results

data AllEventsSlice Source

The result of a read operation from the $all stream.

Constructors

AllEventsSlice 

Fields

allEventsSliceResult :: !ReadAllResult

Representing the status of the read attempt.

allEventsSliceFrom :: !Position

Representing the position where the next slice should be read from.

allEventsSliceNext :: !Position

Representing the position where the next slice should be read from.

allEventsSliceIsEOS :: !Bool

Representing whether or not this is the end of the $all stream.

allEventsSliceEvents :: ![ResolvedEvent]

The events read.

allEventsSliceDirection :: !ReadDirection

The direction of read request.

Instances

newtype DeleteResult Source

Returned after deleting a stream. Position of the write.

data WriteResult Source

Returned after writing to a stream.

Constructors

WriteResult 

Fields

writeNextExpectedVersion :: !Int32

Next expected version of the stream.

writePosition :: !Position

Position of the write.

data ReadResult Source

Result of a single event read operation to the EventStore.

Instances

data RecordedEvent Source

Represents a previously written event.

Constructors

RecordedEvent 

Fields

recordedEventStreamId :: !Text

The event stream that this event belongs to.

recordedEventId :: !UUID

Unique identifier representing this event.

recordedEventNumber :: !Int32

Number of this event in the stream.

recordedEventType :: !Text

Type of this event.

recordedEventData :: !ByteString

Representing the data of this event.

recordedEventMetadata :: !(Maybe ByteString)

Representing the metadada associated with this event.

recordedEventIsJson :: !Bool

Indicates whether the content is internally marked as json.

recordedEventCreated :: !(Maybe UTCTime)

Representing when this event was created in the system.

Instances

data StreamEventsSlice Source

Represents the result of a single read operation to the EventStore.

Constructors

StreamEventsSlice 

Fields

streamEventsSliceResult :: !ReadStreamResult

Representing the status of the read attempt.

streamEventsSliceStreamId :: !Text

The name of the stream read.

streamEventsSliceStart :: !Int32

The starting point (represented as a sequence number) of the read operation.

streamEventsSliceNext :: !Int32

The next event number that can be read.

streamEventsSliceLast :: !Int32

The last event number in the stream.

streamEventsSliceIsEOS :: !Bool

Representing whether or not this is the end of the stream.

streamEventsSliceEvents :: ![ResolvedEvent]

The events read represented as ResolvedEvent

streamEventsSliceDirection :: !ReadDirection

The direction of the read request.

data Position Source

A structure referring to a potential logical record position in the EventStore transaction file.

Constructors

Position 

Fields

positionCommit :: !Int64

Commit position of the record

positionPrepare :: !Int64

Prepare position of the record

Instances

data ReadDirection Source

Represents the direction of read operation (both from $all an usual streams).

Constructors

Forward

From beginning to end

Backward

From end to beginning

data ReadAllResult Source

Enumeration detailing the possible outcomes of reading a slice of $all stream.

data ReadEventResult Source

Enumeration representing the status of a single event read operation.

data ResolvedEvent Source

A structure representing a single event or an resolved link event.

Constructors

ResolvedEvent 

Fields

resolvedEventRecord :: !(Maybe RecordedEvent)

The event, or the resolved link event if this ResolvedEvent is a link event.

resolvedEventLink :: !(Maybe RecordedEvent)

The link event if this ResolvedEvent is a link event.

Instances

data ReadStreamResult Source

Enumeration detailing the possible outcomes of reading a slice of a stream

eventResolved :: ResolvedEvent -> Bool Source

Indicates whether this ResolvedEvent is a resolved link event.

resolvedEventOriginal :: ResolvedEvent -> Maybe RecordedEvent Source

Returns the event that was read or which triggered the subscription.

If this ResolvedEvent represents a link event, the link will be the original event, otherwise it will be the event.

resolvedEventOriginalStreamId :: ResolvedEvent -> Maybe Text Source

The stream name of the original event.

resolvedEventOriginalId :: ResolvedEvent -> Maybe UUID Source

The ID of the original event.

positionStart :: Position Source

Representing the start of the transaction file.

positionEnd :: Position Source

Representing the end of the transaction file.

Misc

data ExpectedVersion Source

Constants used for expected version control.

The use of expected version can be a bit tricky especially when discussing idempotency assurances given by the EventStore.

The EventStore will assure idempotency for all operations using any value in ExpectedVersion except for anyStream. When using anyStream the EventStore will do its best to assure idempotency but will not guarantee idempotency.

anyStream :: ExpectedVersion Source

This write should not conflict with anything and should always succeed.

noStream :: ExpectedVersion Source

The stream being written to should not yet exist. If it does exist treat that as a concurrency problem.

emptyStream :: ExpectedVersion Source

The stream should exist and should be empty. If it does not exist or is not empty, treat that as a concurrency problem.

exactStream :: Int32 -> ExpectedVersion Source

States that the last event written to the stream should have a sequence number matching your expected value.

Re-export

(<>) :: Monoid m => m -> m -> m infixr 6

An infix synonym for mappend.

Since: 4.5.0.0