kiroku-metrics 0.1.0.3 → 0.1.0.4
raw patch · 4 files changed
+48/−6 lines, 4 filesdep ~kiroku-storePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: kiroku-store
API changes (from Hackage documentation)
Files
- CHANGELOG.md +9/−0
- kiroku-metrics.cabal +4/−4
- src/Kiroku/Metrics/Collector.hs +12/−1
- test/Test/CollectorSpec.hs +23/−1
CHANGELOG.md view
@@ -1,5 +1,14 @@ # Revision history for kiroku-metrics +## 0.1.0.4 -- 2026-08-11++### Other Changes++* The collector consumes the new subscription checkpoint-resolution lifecycle+ event and records its durable position as the subscription checkpoint gauge.+ It also remains exhaustive for typed missing-checkpoint startup refusal.+* Requires `kiroku-store ^>=0.5`. No `kiroku-metrics` API changed.+ ## 0.1.0.3 -- 2026-08-09 ### Bug Fixes
kiroku-metrics.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: kiroku-metrics-version: 0.1.0.3+version: 0.1.0.4 synopsis: Metrics, health, and event-streaming HTTP endpoints for Kiroku @@ -60,7 +60,7 @@ , hasql-pool >=1.2 && <1.5 , http-types >=0.12 && <0.13 , kiroku-cli ^>=0.2- , kiroku-store ^>=0.4+ , kiroku-store ^>=0.5 , stm >=2.5 && <2.6 , text >=2.0 && <2.2 , time >=1.12 && <1.15@@ -102,7 +102,7 @@ , http-client >=0.7 && <0.8 , http-types >=0.12 && <0.13 , kiroku-metrics- , kiroku-store ^>=0.4+ , kiroku-store ^>=0.5 , kiroku-test-support ^>=0.1 , lens >=5.2 && <5.4 , scientific >=0.3 && <0.4@@ -137,7 +137,7 @@ , http-types >=0.12 && <0.13 , kiroku-cli ^>=0.2 , kiroku-metrics- , kiroku-store ^>=0.4+ , kiroku-store ^>=0.5 , kiroku-test-support , lens >=5.2 && <5.4 , scientific >=0.3 && <0.4
src/Kiroku/Metrics/Collector.hs view
@@ -50,7 +50,12 @@ EventPublisher (..), publisherPosition, )-import Kiroku.Store.Subscription.Types (SubscriptionName (..))+import Kiroku.Store.Subscription.Types (+ CheckpointInitialization (..),+ SubscriptionCheckpointKey (..),+ SubscriptionCheckpointMissing (..),+ SubscriptionName (..),+ ) import Kiroku.Store.Types (GlobalPosition (..)) -- | Opaque collector handle. Construct with 'newKirokuMetrics'.@@ -168,6 +173,12 @@ KirokuEventSubscriptionDbError name phase _ _ -> do bumpCounters km (bumpDbPhase phase) touchSub km name (\s -> s{smDbErrorCount = s.smDbErrorCount + 1})+ KirokuEventSubscriptionCheckpointResolved initialization _ ->+ case initialization of+ ExistingCheckpoint (SubscriptionCheckpointKey name _) pos -> recordPosition km name pos+ InitializedCheckpoint _ (SubscriptionCheckpointKey name _) pos -> recordPosition km name pos+ KirokuEventSubscriptionCheckpointMissing (SubscriptionCheckpointMissing (SubscriptionCheckpointKey name _)) _ ->+ touchSub km name id KirokuEventSubscriptionStarted name pos _ -> do bumpCounters km (\c -> c{subscriptionsStarted = c.subscriptionsStarted + 1}) recordPosition km name pos
test/Test/CollectorSpec.hs view
@@ -34,7 +34,12 @@ SubscriptionStopReason (..), ) import Kiroku.Store.Observability (SubscriptionDeliveryPhase (..))-import Kiroku.Store.Subscription.Types (SubscriptionName (..))+import Kiroku.Store.Subscription.Types (+ CheckpointInitialization (..),+ MissingCheckpointPolicy (..),+ SubscriptionCheckpointKey (..),+ SubscriptionName (..),+ ) import Kiroku.Store.Types (GlobalPosition (..)) {- | A collector whose fake store readers report the given global position and@@ -109,6 +114,23 @@ Just m -> do m.lastKnownPosition `shouldBe` 5 m.lag `shouldBe` 7++ it "records the durable position from checkpoint resolution telemetry" $ do+ let key = SubscriptionCheckpointKey sub 0+ snap <-+ runScript+ (pure (GlobalPosition 12))+ (pure 0)+ [ KirokuEventSubscriptionCheckpointResolved+ (InitializedCheckpoint FromCurrentHead key (GlobalPosition 9))+ NonGroup+ ]+ []+ case Map.lookup "p" snap.subscriptions of+ Nothing -> expectationFailure "expected resolved subscription in snapshot"+ Just metrics -> do+ metrics.lastKnownPosition `shouldBe` 9+ metrics.lag `shouldBe` 3 it "advances last-known position monotonically and never reports negative lag" $ do snap <-