You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* ingestion: OTel histograms for decode + write phase
Initialises a global MeterProvider in Start.startApp (nested inside the
existing TracerProvider bracket so shutdown order is meter→tracer, both
flushing pending exports via shutdown*Provider). Picks up the same
OTEL_EXPORTER_OTLP_ENDPOINT / headers as traces by default, with the
usual per-signal overrides.
Adds Pkg.Metrics with two top-level NOINLINE instruments
(monoscope.ingest.decode.duration, monoscope.ingest.write.duration, ms)
plus a `timed` helper that brackets the action so latency is recorded
on exception too — useful for the dual-write where a timeout is still
latency we want in the distribution.
ProcessMessage.processMessages now records the decode phase manually
and wraps insertAndHandOff in `timed`.
* Auto-format code with fourmolu
* ingestion: per-partition Kafka group concurrency
Group records by (topic, partition) instead of just topic and process
groups via pooledForConcurrentlyN with a new kafkaGroupConcurrency knob
(default 4). Each tpsFor still yields exactly one TP, so a failed group
only stalls its own partition's commits.
Bound stays well under the hasql pool (shared with web): the failure
mode to avoid is AcquisitionTimeout → Hasql.isTransientException → no
commit → redelivery storm. Single committer (the poll thread) — no
concurrent commitPartitionsOffsets.
* ingestion: symmetric Metrics.timed for decode + write, redactJSON elem idiom
Wraps the decode block in Metrics.timed (replacing manual getMonotonicTime
+ recordMs) so both phases use the same bracket-on-exception path. Drops
the GHC.Clock import.
redactJSON: switches `any T.null ps` to `"" \`elem\` ps` — equivalent but
reads as "have we consumed all path segments?" which matches intent.
Removes TODO.md — belongs in PR/issue tracker, not the repo.
* hpack: pick up Pkg.Metrics in test-dev other-modules
After merging master (which added the test-dev stanza in #411), the
auto-generated other-modules list was missing Pkg.Metrics — the stanza
was hpack-generated before this branch's new module existed.
* queue: use HashMap consistently for byTP + tpsFor, drop Data.Map import
The rest of Pkg/Queue.hs uses HM throughout; (Text, Int32) and Int32
keys are both Hashable, so HashMap is a drop-in. tpsFor's group is
always single-partition, so the map has size 1 — ordering doesn't
matter.
* queue: revert HashMap swap, KP.PartitionId has no Hashable instance
The previous 79bd1bc assumed crPartition was Int32 (Hashable), but
it's KP.PartitionId (Ord-only). Data.Map.Strict was load-bearing, not
an inconsistency. Comment added to prevent the next reviewer from
trying the same swap.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
0 commit comments