The eventstore package

[Tags:bsd3, library, test]

EventStore TCP Client http://geteventstore.com


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.1, 0.1.1.0, 0.1.2.0, 0.2.0.0, 0.2.0.1, 0.3.0.0, 0.3.1.0, 0.4.0.0, 0.5.0.0, 0.5.0.1, 0.6.0.0, 0.6.0.1, 0.7.0.0, 0.7.0.1, 0.7.1.0, 0.7.2.0, 0.7.2.1, 0.8.0.0, 0.9.0.0, 0.9.1.0, 0.9.1.1, 0.9.1.2, 0.9.1.3, 0.10.0.0, 0.10.0.1, 0.10.0.2, 0.11.0.0, 0.12.0.0, 0.13.0.0, 0.13.0.1, 0.13.1.0, 0.13.1.1, 0.13.1.2, 0.13.1.3, 0.13.1.4, 0.13.1.5, 0.13.1.6, 0.13.1.7, 0.14.0.0, 0.14.0.1, 0.14.0.2, 0.15.0.0, 0.15.0.1, 0.15.0.2 (info)
Change log CHANGELOG.markdown
Dependencies aeson (>=0.8 && <1.3), array, base (>=4.7 && <5), bifunctors, bytestring, cereal (>=0.4 && <0.6), clock, connection (==0.2.*), containers (==0.5.*), dns, dotnet-timespan, ekg-core, exceptions, fast-logger, hashable, http-client (==0.5.*), interpolate, lifted-async, lifted-base, machines (>=0.6), monad-control, monad-logger (>=0.3.20), mono-traversable (==1.*), mtl, protobuf (>=0.2.1.1 && <0.3), random (==1.*), safe-exceptions, semigroups (>=0.5), stm, stm-chans, text, text-format, time (>=1.4 && <1.9), transformers-base, unordered-containers, uuid (==1.3.*) [details]
License BSD3
Copyright Yorick Laupa
Author Yorick Laupa
Maintainer yo.eight@gmail.com
Category Database
Home page https://github.com/YoEight/eventstore#readme
Bug tracker https://github.com/YoEight/eventstore/issues
Source repository head: git clone https://github.com/YoEight/eventstore
Uploaded Sat Aug 12 22:23:49 UTC 2017 by YorickLaupa
Distributions LTSHaskell:0.15.0.2, NixOS:0.15.0.1, Stackage:0.15.0.2
Downloads 4201 total (160 in the last 30 days)
Votes
0 []
Status Docs available [build log]
Last success reported on 2017-08-12 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for eventstore

Readme for eventstore-0.15.0.2

EventStore Haskell TCP client

Join the chat at <a href="https://gitter.im/YoEight/eventstore">https://gitter.im/YoEight/eventstore</a> Build Status

That driver supports 100% of EventStore features ! More information about the GetEventStore database can be found there: https://geteventstore.com/

Requirements

  • 64bits system
  • GHC >= 7.8.3
  • Cabal >= 1.18
  • EventStore >= 3.0.0 (>= 3.1.0 if you want competing consumers)

Install

$ cabal update
$ cabal install eventstore
  • From source
$ git clone https://github.com/YoEight/eventstore.git
$ cd eventstore
$ cabal install --only-dependencies
$ cabal configure
$ cabal install

How to test

Tests are available. Those assume a server is running on 127.0.0.1 and 1113 port.

$ cabal install --only-dependencies --enable-tests
$ cabal configure --enable-tests
$ cabal test

How to use

{-# LANGUAGE OverloadedStrings #-} -- That library uses `Text` pervasively. This pragma permits to use
                                   -- String literal when a Text is needed.
module Main where

import Control.Concurrent.Async (wait)
import Data.Aeson
-- It requires to have `aeson` package installed. Note that EventStore doesn't constraint you to JSON
-- format but putting common use aside, by doing so you'll be able to use some interesting EventStore
-- features like its Complex Event Processing (CEP) capabality.

import Database.EventStore
-- Note that imports 'NonEmpty' data constructor and 'nonEmpty' function from
-- 'Data.List.NonEmpty'.

main :: IO ()
main = do
    -- A common pattern with an EventStore connection is to create a single instance only and pass it
    -- wherever you need it (it's threadsafe). It's very important to not consider an EventStore connection like
    -- its regular SQL counterpart. An EventStore connection will try its best to reconnect
    -- automatically to the server if the connection dropped. Of course that behavior can be tuned
    -- through some settings.
    conn <- connect defaultSettings (Static "127.0.0.1" 1113)
    let js  = object ["isHaskellTheBest" .= True] -- (.=) comes from Data.Aeson module.
        evt = createEvent "programming" Nothing (withJson js)

    -- Appends an event to a stream named `languages`.
    as <- sendEvent conn "languages" anyVersion evt

    -- EventStore interactions are fundamentally asynchronous. Nothing requires you to wait
    -- for the completion of an operation, but it's good to know if something went wrong.
    _ <- wait as

    -- Again, if you decide to `shutdown` an EventStore connection, it means your application is
    -- about to terminate.
    shutdown conn

    -- Make sure the EventStore connection completes every ongoing operation. For instance, if
    -- at the moment we call `shutdown` and some operations (or subscriptions) were still pending,
    -- the connection aborted all of them.
    waitTillClosed conn

Notes

That library was tested on Linux and OSX Yosemite.

Contributions and bug reports are welcome!

BSD3 License

-Yorick Laupa