freckle-app 1.15.1.0 → 1.15.2.0
raw patch · 4 files changed
+86/−3 lines, 4 filesdep +faktoryPVP ok
version bump matches the API change (PVP)
Dependencies added: faktory
API changes (from Hackage documentation)
+ Freckle.App.Faktory.ProducerPool: FaktoryProducerPoolConfig :: Int -> NominalDiffTime -> Int -> FaktoryProducerPoolConfig
+ Freckle.App.Faktory.ProducerPool: [faktoryProducerPoolConfigIdleTimeout] :: FaktoryProducerPoolConfig -> NominalDiffTime
+ Freckle.App.Faktory.ProducerPool: [faktoryProducerPoolConfigSize] :: FaktoryProducerPoolConfig -> Int
+ Freckle.App.Faktory.ProducerPool: [faktoryProducerPoolConfigStripes] :: FaktoryProducerPoolConfig -> Int
+ Freckle.App.Faktory.ProducerPool: class HasFaktoryProducerPool env
+ Freckle.App.Faktory.ProducerPool: createFaktoryProducerPool :: Settings -> FaktoryProducerPoolConfig -> IO FaktoryProducerPool
+ Freckle.App.Faktory.ProducerPool: data FaktoryProducerPoolConfig
+ Freckle.App.Faktory.ProducerPool: envFaktoryProducerPoolConfig :: Parser Error FaktoryProducerPoolConfig
+ Freckle.App.Faktory.ProducerPool: faktoryProducerPoolL :: HasFaktoryProducerPool env => Lens' env FaktoryProducerPool
+ Freckle.App.Faktory.ProducerPool: instance Freckle.App.Faktory.ProducerPool.HasFaktoryProducerPool site => Freckle.App.Faktory.ProducerPool.HasFaktoryProducerPool (Yesod.Core.Types.HandlerData child site)
+ Freckle.App.Faktory.ProducerPool: instance GHC.Show.Show Freckle.App.Faktory.ProducerPool.FaktoryProducerPoolConfig
+ Freckle.App.Faktory.ProducerPool: type FaktoryProducerPool = Pool Producer
Files
- CHANGELOG.md +5/−1
- freckle-app.cabal +3/−1
- library/Freckle/App/Faktory/ProducerPool.hs +76/−0
- package.yaml +2/−1
CHANGELOG.md view
@@ -1,4 +1,8 @@-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.15.1.0...main)+## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.15.2.0...main)++## [v1.15.0.1](https://github.com/freckle/freckle-app/compare/v1.15.2.0...v1.15.1.0)++- Add `FaktoryProducerPool` and `HasFaktoryProducerPool` for pooling connections to Faktory ## [v1.15.1.0](https://github.com/freckle/freckle-app/compare/v1.15.0.1...v1.15.1.0)
freckle-app.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: freckle-app-version: 1.15.1.0+version: 1.15.2.0 license: MIT license-file: LICENSE maintainer: Freckle Education@@ -37,6 +37,7 @@ Freckle.App.Exception.MonadThrow Freckle.App.Exception.MonadUnliftIO Freckle.App.Exception.Types+ Freckle.App.Faktory.ProducerPool Freckle.App.Ghci Freckle.App.GlobalCache Freckle.App.Http@@ -128,6 +129,7 @@ errors >=2.3.0, exceptions >=0.10.4, extra >=1.7.13,+ faktory >=1.1.2.4, filepath >=1.4.2.2, hashable >=1.4.2.0, hs-opentelemetry-api >=0.1.0.0,
+ library/Freckle/App/Faktory/ProducerPool.hs view
@@ -0,0 +1,76 @@+{-# LANGUAGE ApplicativeDo #-}++module Freckle.App.Faktory.ProducerPool+ ( FaktoryProducerPool+ , FaktoryProducerPoolConfig (..)+ , envFaktoryProducerPoolConfig+ , HasFaktoryProducerPool (..)+ , createFaktoryProducerPool+ ) where++import Freckle.App.Prelude++import Control.Lens (Lens')+import Data.Pool+ ( Pool+ , defaultPoolConfig+ , newPool+ , setNumStripes+ )+import qualified Faktory.Producer as Faktory+import qualified Faktory.Settings as Faktory+import qualified Freckle.App.Env as Env+import Yesod.Core.Lens (envL, siteL)+import Yesod.Core.Types (HandlerData)++data FaktoryProducerPoolConfig = FaktoryProducerPoolConfig+ { faktoryProducerPoolConfigStripes :: Int+ -- ^ The number of stripes (distinct sub-pools) to maintain.+ -- The smallest acceptable value is 1.+ , faktoryProducerPoolConfigIdleTimeout :: NominalDiffTime+ -- ^ Amount of time for which an unused resource is kept open.+ -- The smallest acceptable value is 0.5 seconds.+ --+ -- The elapsed time before destroying a resource may be a little+ -- longer than requested, as the reaper thread wakes at 1-second+ -- intervals.+ , faktoryProducerPoolConfigSize :: Int+ -- ^ Maximum number of resources to keep open per stripe. The+ -- smallest acceptable value is 1.+ --+ -- Requests for resources will block if this limit is reached on a+ -- single stripe, even if other stripes have idle resources+ -- available.+ }+ deriving stock (Show)++-- | Same defaults as 'Database.Persist.Sql.ConnectionPoolConfig'+defaultFaktoryProducerPoolConfig :: FaktoryProducerPoolConfig+defaultFaktoryProducerPoolConfig = FaktoryProducerPoolConfig 1 600 10++envFaktoryProducerPoolConfig+ :: Env.Parser Env.Error FaktoryProducerPoolConfig+envFaktoryProducerPoolConfig = do+ poolSize <- Env.var Env.auto "FAKTORY_PRODUCER_POOL_SIZE" $ Env.def 10+ pure $+ defaultFaktoryProducerPoolConfig {faktoryProducerPoolConfigSize = poolSize}++type FaktoryProducerPool = Pool Faktory.Producer++class HasFaktoryProducerPool env where+ faktoryProducerPoolL :: Lens' env FaktoryProducerPool++instance HasFaktoryProducerPool site => HasFaktoryProducerPool (HandlerData child site) where+ faktoryProducerPoolL = envL . siteL . faktoryProducerPoolL++createFaktoryProducerPool+ :: Faktory.Settings -> FaktoryProducerPoolConfig -> IO FaktoryProducerPool+createFaktoryProducerPool faktorySettings poolConfig =+ newPool+ $ setNumStripes+ (Just $ faktoryProducerPoolConfigStripes poolConfig)+ $ defaultPoolConfig+ (Faktory.newProducer faktorySettings)+ Faktory.closeProducer+ (realToFrac $ faktoryProducerPoolConfigIdleTimeout poolConfig)+ (faktoryProducerPoolConfigSize poolConfig)
package.yaml view
@@ -1,5 +1,5 @@ name: freckle-app-version: 1.15.1.0+version: 1.15.2.0 maintainer: Freckle Education category: Utils github: freckle/freckle-app@@ -96,6 +96,7 @@ - errors - exceptions - extra+ - faktory - filepath - hashable - hs-opentelemetry-api