packages feed

freckle-kafka 0.0.0.4 → 0.1.0.0

raw patch · 4 files changed

+42/−14 lines, 4 files

Files

CHANGELOG.md view
@@ -1,4 +1,12 @@-## [_Unreleased_](https://github.com/freckle/freckle-kafka/compare/v0.0.0.4...main)+## [_Unreleased_](https://github.com/freckle/freckle-kafka/compare/v0.1.0.0...main)++## [v0.1.0.0](https://github.com/freckle/freckle-kafka/compare/v0.0.0.4...v0.1.0.0)++- Add `withKafkaProducerPool`, which creates a Kafka producer pool and+  closes it with `Pool.destroyAllResources` once the given action+  completes. Prefer this to `createKafkaProducerPool`, which leaves the+  pool open for the caller to close.+- Generalize `createKafkaProducerPool` from `IO` to any `MonadIO`  ## [v0.0.0.4](https://github.com/freckle/freckle-kafka/tree/v0.0.0.4) 
freckle-kafka.cabal view
@@ -1,6 +1,6 @@ cabal-version:      1.18 name:               freckle-kafka-version:            0.0.0.4+version:            0.1.0.0 license:            MIT license-file:       LICENSE maintainer:         Freckle Education
library/Freckle/App/Kafka/Producer.hs view
@@ -7,6 +7,7 @@   , envKafkaProducerPoolConfig   , KafkaProducerPool (..)   , HasKafkaProducerPool (..)+  , withKafkaProducerPool   , createKafkaProducerPool   , produceKeyedOn   , produce@@ -23,7 +24,7 @@   ) import Control.Exception.Annotated.UnliftIO qualified as Annotated import Control.Lens (Lens', lens, view)-import Control.Monad.IO.Class (liftIO)+import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Reader (MonadReader) import Data.Aeson (ToJSON, encode) import Data.ByteString.Lazy qualified as BSL@@ -40,7 +41,7 @@ import OpenTelemetry.Trace (SpanKind (..), defaultSpanArguments) import OpenTelemetry.Trace qualified as Trace import OpenTelemetry.Trace.Monad (MonadTracer, inSpan)-import UnliftIO (MonadUnliftIO, withRunInIO)+import UnliftIO (MonadUnliftIO, bracket, withRunInIO) import Yesod.Core.Types (HandlerData (..), RunHandlerEnv (..))  envKafkaBrokerAddresses@@ -104,18 +105,37 @@ siteL :: Lens' (RunHandlerEnv child site) site siteL = lens rheSite $ \x y -> x {rheSite = y} +-- | Create a Kafka producer pool, closing it once the given action+--   completes+withKafkaProducerPool+  :: MonadUnliftIO m+  => NonEmpty BrokerAddress+  -> KafkaProducerPoolConfig+  -> (Pool KafkaProducer -> m a)+  -> m a+withKafkaProducerPool addresses config =+  bracket+    (createKafkaProducerPool addresses config)+    (liftIO . Pool.destroyAllResources)++-- | Create a Kafka producer pool for the given broker addresses and config+--+-- Prefer 'withKafkaProducerPool', which closes the pool with+-- 'Pool.destroyAllResources' once the given action completes. createKafkaProducerPool-  :: NonEmpty BrokerAddress+  :: MonadIO m+  => NonEmpty BrokerAddress   -> KafkaProducerPoolConfig-  -> IO (Pool KafkaProducer)+  -> m (Pool KafkaProducer) createKafkaProducerPool addresses config =-  Pool.newPool $-    Pool.setNumStripes (Just $ kafkaProducerPoolConfigStripes config) $-      Pool.defaultPoolConfig-        mkProducer-        closeProducer-        (realToFrac $ kafkaProducerPoolConfigIdleTimeout config)-        (kafkaProducerPoolConfigSize config)+  liftIO $+    Pool.newPool $+      Pool.setNumStripes (Just $ kafkaProducerPoolConfigStripes config) $+        Pool.defaultPoolConfig+          mkProducer+          closeProducer+          (realToFrac $ kafkaProducerPoolConfigIdleTimeout config)+          (kafkaProducerPoolConfigSize config)  where   mkProducer =     either
package.yaml view
@@ -1,5 +1,5 @@ name: freckle-kafka-version: 0.0.0.4+version: 0.1.0.0 maintainer: Freckle Education category: Database github: freckle/freckle-kafka