packages feed

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 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 <-