From 9cdee8017606580a3c4e8ca7de854cf90e41d9cf Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Thu, 21 Sep 2017 18:09:23 +0300 Subject: Allow configure backend response timeout --- sproxy.example.yml | 2 ++ src/Sproxy/Config.hs | 4 +++- src/Sproxy/Server.hs | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/sproxy.example.yml b/sproxy.example.yml index c67afba..f87d97b 100644 --- a/sproxy.example.yml +++ b/sproxy.example.yml @@ -164,6 +164,8 @@ ssl_key: /path/key.pem # cookie_name - sproxy cookie name. Optional. Default is "sproxy". # cookie_domain - sproxy cookie domain. Optional. Default is the request host name as per RFC2109. # cookie_max_age - sproxy cookie shelflife in seconds. Optional. Default is 604800 (7 days). +# +# timeout - response timeout in seconds. Optional. Default is 30. # conn_count - number of connections to keep alive. Optional. Default is 32. # This is specific to Haskell HTTP Client library, and is per host name, # not per backend. HTTP Client's default is 10. diff --git a/src/Sproxy/Config.hs b/src/Sproxy/Config.hs index f1d8004..cb32a06 100644 --- a/src/Sproxy/Config.hs +++ b/src/Sproxy/Config.hs @@ -65,6 +65,7 @@ data BackendConf = BackendConf , beCookieDomain :: Maybe String , beCookieMaxAge :: Int64 , beConnCount :: Int + , beTimeout :: Int } deriving (Show) instance FromJSON BackendConf where @@ -75,7 +76,8 @@ instance FromJSON BackendConf where m .:? "cookie_name" .!= "sproxy" <*> m .:? "cookie_domain" <*> m .:? "cookie_max_age" .!= (7 * 24 * 60 * 60) <*> - m .:? "conn_count" .!= 32 + m .:? "conn_count" .!= 32 <*> + m .:? "timeout" .!= 30 parseJSON _ = empty data OAuth2Conf = OAuth2Conf diff --git a/src/Sproxy/Server.hs b/src/Sproxy/Server.hs index 75a50a4..2477364 100644 --- a/src/Sproxy/Server.hs +++ b/src/Sproxy/Server.hs @@ -13,7 +13,7 @@ import Data.Word (Word16) import Data.Yaml.Include (decodeFileEither) import Network.HTTP.Client (Manager, ManagerSettings(..), defaultManagerSettings, newManager, - socketConnection) + responseTimeoutMicro, socketConnection) import Network.HTTP.Client.Internal (Connection) import Network.Socket (Family(AF_INET, AF_UNIX), SockAddr(SockAddrInet, SockAddrUnix), @@ -152,6 +152,7 @@ newBackendManager be = do defaultManagerSettings { managerRawConnection = return $ \_ _ _ -> openConn , managerConnCount = beConnCount be + , managerResponseTimeout = responseTimeoutMicro (1000000 * beTimeout be) } newServer :: ConfigFile -> IO (Settings -> Socket -> Application -> IO ()) -- cgit v1.2.3