hslogstash 0.3.5 → 0.3.6
raw patch · 4 files changed
+48/−7 lines, 4 filesdep +blaze-builderdep +data-defaultdep +stm-firehosedep ~http-conduit
Dependencies added: blaze-builder, data-default, stm-firehose, wai
Dependency ranges changed: http-conduit
Files
- Changelog +7/−0
- Data/Conduit/ElasticSearch.hs +5/−4
- Data/Conduit/FireHose.hs +33/−0
- hslogstash.cabal +3/−3
Changelog view
@@ -1,3 +1,10 @@+hslogstash (0.3.6) precise; urgency=low++ * Bumped http-conduit version.+ * Added logstash firehose++ -- Bartavelle <bartavelle@gmail.com> Mon, 27 Dec 2013 08:18:07 +0100+ hslogstash (0.3.5) precise; urgency=low * Bumped text version bound.
Data/Conduit/ElasticSearch.hs view
@@ -25,6 +25,7 @@ import Network.HTTP.Types import Control.Lens hiding ((.=)) import Control.Lens.Aeson+import Data.Default import qualified Data.HashMap.Strict as HM import qualified Data.Vector as V@@ -72,7 +73,7 @@ parseJSON _ = mzero -- | A source of Logstash messages generated from an ElasticSearch query.-esSearchSource :: (MonadResource m) => Maybe (Request m) -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.+esSearchSource :: (MonadResource m) => Maybe Request -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults. -> BS.ByteString -- ^ Hostname of the ElasticSearch server -> Int -- ^ Port of the HTTP interface (usually 9200) -> BS.ByteString -- ^ Prefix of the index (usually logstash)@@ -107,7 +108,7 @@ when (nexti < total) (self nexti) _ -> yield (Left errbody) -esScan :: Maybe (Request (ResourceT IO)) -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.+esScan :: Maybe Request -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults. -> BS.ByteString -- ^ Hostname of the ElasticSearch server -> Int -- ^ Port of the HTTP interface (usually 9200) -> BS.ByteString -- ^ Name of the index (Something like logstash-2013.12.06)@@ -144,7 +145,7 @@ (Just (String nscr), hts) -> yield (Right hts) >> self nscr _ -> yield (Left (fromMaybe "could not parse json" respbody)) -safeQuery :: Request (ResourceT IO) -> IO (Response BSL.ByteString)+safeQuery :: Request -> IO (Response BSL.ByteString) safeQuery req = catch (withManager $ httpLbs ureq ) (\e -> print (e :: SomeException) >> threadDelay 500000 >> safeQuery req) where ureq = req { responseTimeout = Nothing }@@ -152,7 +153,7 @@ -- | Takes a "LogstashMessage", and returns the result of the ElasticSearch request -- along with the value in case of errors, or ElasticSearch's values in case of -- success.-esConduit :: (MonadResource m) => Maybe (Request m) -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.+esConduit :: (MonadResource m) => Maybe Request -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults. -> BS.ByteString -- ^ Hostname of the ElasticSearch server -> Int -- ^ Port of the HTTP interface (usually 9200) -> T.Text -- ^ Prefix of the index (usually logstash)
+ Data/Conduit/FireHose.hs view
@@ -0,0 +1,33 @@+-- | A firehose sink, letting client get through a port and read the sink+-- output.+module Data.Conduit.FireHose (fireHose) where++import Control.Monad.IO.Class++import Logstash.Message++import Data.Conduit+import Data.Conduit.Network.Firehose+import Network.Wai (Request,pathInfo)++import qualified Data.HashSet as HS+import qualified Data.Text as T++import Data.Aeson+import Blaze.ByteString.Builder.ByteString+import Data.Monoid++-- | A web server will be launched on the specified port. The request URL+-- must be of the form /type1,type2,type3. The client will be fed all+-- messages matching those types.+fireHose :: MonadIO m => Int -- ^ Port+ -> Int -- ^ Buffer size for the fire hose threads+ -> IO (Conduit LogstashMessage m LogstashMessage)+fireHose port buffersize = firehoseConduit port buffersize getFilter serialize+ where+ serialize = (<> fromByteString "\n") . fromLazyByteString . encode+ getFilter r = case pathInfo r of+ [p] -> let set = HS.fromList $ T.splitOn "," p+ in flip HS.member set . logstashType+ _ -> error "invalid url"+
hslogstash.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: hslogstash-version: 0.3.5+version: 0.3.6 synopsis: A library to work with, or as, a logstash server description: This library contains a few modules that let you work with Logstash messages, read them from a Redis list, store them in or get them from Elasticsearch, and more. homepage: https://github.com/bartavelle/hslogstash@@ -21,9 +21,9 @@ library- exposed-modules: Logstash.Message, Logstash.IO, Data.Conduit.Redis, Data.Conduit.ElasticSearch, Data.Conduit.Logstash, Data.Conduit.Network.Retry, Data.Conduit.Branching, Data.Conduit.Misc, Logstash.Counter+ exposed-modules: Logstash.Message, Logstash.IO, Data.Conduit.Redis, Data.Conduit.ElasticSearch, Data.Conduit.Logstash, Data.Conduit.Network.Retry, Data.Conduit.Branching, Data.Conduit.Misc, Logstash.Counter, Data.Conduit.FireHose default-extensions: OverloadedStrings, BangPatterns- build-depends: base >=4.6 && <4.7, conduit >=1.0.9 && <1.1, bytestring >=0.10 && <0.11, transformers >=0.3 && <0.4, aeson >=0.6 && <0.7, parallel-io >=0.3 && <0.4, text >=0.11 && <1.1, network >=2.4 && <2.5, network-conduit >=1.0 && <1.1, iconv >=0.4 && <0.5, http-conduit >=1.9 && <1.10, time >=1.4 && <1.5, text-format >=0.3 && <0.4, http-types >=0.8 && <0.9, unordered-containers >=0.2 && <0.3, vector >=0.10 && <0.11, containers >=0.5 && <0.6, stm-chans >=3.0 && <3.1, stm-conduit >=2.1 && <2.2, hedis >=0.6 && <0.7, stm >=2.4 && <2.5, attoparsec >=0.10 && <0.11, lens >= 3.9 && < 4, lens-aeson >= 0.1 && < 0.2+ build-depends: base >=4.6 && <4.7, conduit >=1.0.9 && <1.1, bytestring >=0.10 && <0.11, transformers >=0.3 && <0.4, aeson >=0.6 && <0.7, parallel-io >=0.3 && <0.4, text >=0.11 && <1.1, network >=2.4 && <2.5, network-conduit >=1.0 && <1.1, iconv >=0.4 && <0.5, http-conduit >= 2.0 && < 2.1, time >=1.4 && <1.5, text-format >=0.3 && <0.4, http-types >=0.8 && <0.9, unordered-containers >=0.2 && <0.3, vector >=0.10 && <0.11, containers >=0.5 && <0.6, stm-chans >=3.0 && <3.1, stm-conduit >=2.1 && <2.2, hedis >=0.6 && <0.7, stm >=2.4 && <2.5, attoparsec >=0.10 && <0.11, lens >= 3.9 && < 4, lens-aeson >= 0.1 && < 0.2, data-default, stm-firehose >= 0.1.1 && < 0.2, wai >= 2.0 && < 2.1, blaze-builder == 0.3.* default-language: Haskell2010 ghc-options: -Wall