hslogstash-0.2.0: Data/Conduit/Redis.hs
{-| Quick conduit for reading from Redis lists. Not tested much, and probably quite slow.
-}
module Data.Conduit.Redis where
import Data.Conduit
import Data.Conduit.Util
import qualified Data.ByteString.Char8 as BS
import Network
import Database.Redis hiding (String, decode)
import Control.Monad (void)
import Control.Monad.IO.Class (liftIO)
redisSource :: (MonadResource m) => HostName -- ^ Hostname of the Redis server
-> Int -- ^ Port of the Redis server (usually 6379)
-> BS.ByteString -- ^ Name of the list
-> Source m BS.ByteString
redisSource h p list =
let cinfo = defaultConnectInfo { connectHost = h, connectPort = PortNumber $ fromIntegral p }
pull = do
o <- blpop [list] 0
case o of
Right (Just (_,k)) -> return k
_ -> pull
in sourceStateIO (connect cinfo)
(\conn -> runRedis conn (void quit))
(\conn -> do
o <- liftIO $ runRedis conn pull
return (StateOpen conn o)
)