redis-io-0.4.1: src/Database/Redis/IO/Settings.hs
-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at http://mozilla.org/MPL/2.0/.
{-# LANGUAGE OverloadedStrings #-}
module Database.Redis.IO.Settings where
import Data.Time
import Data.Word
import Database.Redis.IO.Types (Milliseconds (..))
data Settings = Settings
{ sHost :: !String
, sPort :: !Word16
, sIdleTimeout :: !NominalDiffTime
, sMaxConnections :: !Int
, sPoolStripes :: !Int
, sConnectTimeout :: !Milliseconds
, sSendRecvTimeout :: !Milliseconds
}
-- | Default settings.
--
-- * host = localhost
-- * port = 6379
-- * idle timeout = 60s
-- * stripes = 2
-- * connections per stripe = 25
-- * connect timeout = 5s
-- * send-receive timeout = 10s
defSettings :: Settings
defSettings = Settings "localhost" 6379
60 -- idle timeout
50 -- max connections per stripe
2 -- max stripes
5000 -- connect timeout
10000 -- send and recv timeout (sum)
setHost :: String -> Settings -> Settings
setHost v s = s { sHost = v }
setPort :: Word16 -> Settings -> Settings
setPort v s = s { sPort = v }
setIdleTimeout :: NominalDiffTime -> Settings -> Settings
setIdleTimeout v s = s { sIdleTimeout = v }
-- | Maximum connections per pool stripe.
setMaxConnections :: Int -> Settings -> Settings
setMaxConnections v s = s { sMaxConnections = v }
setPoolStripes :: Int -> Settings -> Settings
setPoolStripes v s
| v < 1 = error "Network.Redis.IO.Settings: at least one stripe required"
| otherwise = s { sPoolStripes = v }
-- | When a pool connection is opened, connect timeout is the maximum time
-- we are willing to wait for the connection attempt to the redis server to
-- succeed.
setConnectTimeout :: NominalDiffTime -> Settings -> Settings
setConnectTimeout v s = s { sConnectTimeout = Ms $ round (1000 * v) }
setSendRecvTimeout :: NominalDiffTime -> Settings -> Settings
setSendRecvTimeout v s = s { sSendRecvTimeout = Ms $ round (1000 * v) }