packages feed

freckle-app 1.9.1.0 → 1.9.1.1

raw patch · 4 files changed

+47/−19 lines, 4 files

Files

CHANGELOG.md view
@@ -1,4 +1,8 @@-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.1.0...main)+## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.1.1...main)++## [v1.9.1.1](https://github.com/freckle/freckle-app/compare/v1.9.1.0...v1.9.1.1)++- Add `KafkaProducerPoolConfig` for controlling Kafka producer pool parameters  ## [v1.9.1.0](https://github.com/freckle/freckle-app/compare/v1.9.0.3...v1.9.1.0) 
freckle-app.cabal view
@@ -1,6 +1,6 @@ cabal-version:      1.18 name:               freckle-app-version:            1.9.1.0+version:            1.9.1.1 license:            MIT license-file:       LICENSE maintainer:         Freckle Education
library/Freckle/App/Kafka.hs view
@@ -1,7 +1,10 @@+{-# LANGUAGE ApplicativeDo #-} {-# LANGUAGE NamedFieldPuns #-}  module Freckle.App.Kafka   ( envKafkaBrokerAddresses+  , KafkaProducerPoolConfig (..)+  , envKafkaProducerPoolConfig   , KafkaProducerPool (..)   , HasKafkaProducerPool (..)   , createKafkaProducerPool@@ -40,37 +43,58 @@     | x /= "" -> Right $ BrokerAddress <$> xs   _ -> Left "Broker Address cannot be empty" -data KafkaProducerPool-  = NullKafkaProducerPool-  | KafkaProducerPool (Pool KafkaProducer)--class HasKafkaProducerPool env where-  kafkaProducerPoolL :: Lens' env KafkaProducerPool--instance HasKafkaProducerPool site => HasKafkaProducerPool (HandlerData child site) where-  kafkaProducerPoolL = envL . siteL . kafkaProducerPoolL--createKafkaProducerPool-  :: NonEmpty BrokerAddress-  -> Int+data KafkaProducerPoolConfig = KafkaProducerPoolConfig+  { kafkaProducerPoolConfigStripes :: Int   -- ^ The number of stripes (distinct sub-pools) to maintain.   -- The smallest acceptable value is 1.-  -> NominalDiffTime+  , kafkaProducerPoolConfigIdleTimeout :: 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.-  -> Int+  , kafkaProducerPoolConfigSize :: 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'+defaultKafkaProducerPoolConfig :: KafkaProducerPoolConfig+defaultKafkaProducerPoolConfig = KafkaProducerPoolConfig 1 600 10++envKafkaProducerPoolConfig+  :: Env.Parser Env.Error KafkaProducerPoolConfig+envKafkaProducerPoolConfig = do+  poolSize <- Env.var Env.auto "KAFKA_PRODUCER_POOL_SIZE" $ Env.def 10+  pure $ defaultKafkaProducerPoolConfig {kafkaProducerPoolConfigSize = poolSize}++data KafkaProducerPool+  = NullKafkaProducerPool+  | KafkaProducerPool (Pool KafkaProducer)++class HasKafkaProducerPool env where+  kafkaProducerPoolL :: Lens' env KafkaProducerPool++instance HasKafkaProducerPool site => HasKafkaProducerPool (HandlerData child site) where+  kafkaProducerPoolL = envL . siteL . kafkaProducerPoolL++createKafkaProducerPool+  :: NonEmpty BrokerAddress+  -> KafkaProducerPoolConfig   -> IO (Pool KafkaProducer)-createKafkaProducerPool addresses = Pool.createPool mkProducer closeProducer+createKafkaProducerPool addresses KafkaProducerPoolConfig {..} =+  Pool.createPool+    mkProducer+    closeProducer+    kafkaProducerPoolConfigStripes+    kafkaProducerPoolConfigIdleTimeout+    kafkaProducerPoolConfigSize  where   mkProducer =     either throw pure =<< newProducer (brokersList $ toList addresses)
package.yaml view
@@ -1,5 +1,5 @@ name: freckle-app-version: 1.9.1.0+version: 1.9.1.1 maintainer: Freckle Education category: Utils github: freckle/freckle-app