3.0 KiB
3.0 KiB
Tasks: enterprise-events-metrics
- Change ID: enterprise-events-metrics
- Package:
@suaveplan/events-metrics - Date: 2026-04-24
Prerequisites (must be published to Verdaccio first)
@suaveplan/events@suaveplan/opentelemetry@suaveplan/error@suaveplan/types
Tasks
1. Scaffold package
- Create
universal/events/events-metrics/directory tree per file layout inproposal.md - Write
package.json(name@suaveplan/events-metrics, version0.1.0,sideEffects: false, correct workspace deps) - Write
tsconfig.jsonextending@suaveplan/typescript-config/library.json - Write
vitest.config.tsusingcreateTestConfig()from@suaveplan/testing/config
2. Error codes (src/error-codes.ts)
- Define
EventsMetricsErrorCodeunion type - Call
defineCodesto register allEVENTS_METRICS.*codes - Export
registerEventsMetricsErrorCodes()andEventsMetricsError
3. Metric name constants (src/metrics/metric-names/)
- Export
METRIC_NAMESandATTRIBUTE_KEYSasas constobjects - Write
metric-names.mdandindex.ts
4. Core attachEventMetrics (src/core/attach-event-metrics/)
- Implement
attachEventMetrics(bus, options?)using@suaveplan/eventsinterceptor API only - Zero-allocation hot path: pre-cache event-name → attribute set on first dispatch; no object creation on subsequent dispatches for the same event name
- Counter:
DISPATCH_TOTALper event.name - Counter:
LISTENER_ERROR_TOTALper event.name + listener.id - Histogram:
DISPATCH_LATENCY_MSusingperformance.now()or injectable clock - ObservableGauge:
QUEUE_DEPTHandACTIVE_SUBSCRIBERS— polled at collection time, not per-dispatch - Return
EventMetricsHandlewithdetach()andsnapshot() - Write
.md,.types.ts,.test.ts,index.ts
5. Snapshot (src/metrics/snapshot/)
- Implement
MetricsSnapshotaccumulator that mirrors the OTel metric state in-memory for test/introspection - Write
.md,.test.ts,index.ts
6. Tests
- Unit tests co-located (100% coverage target)
tests/integration.test.ts— attach to real EventBus, dispatch events, assert snapshot counts matchtests/property.test.ts— fast-check properties perproposal.md§4
7. Benchmarks (src/__benchmarks__/events-metrics.bench.ts)
- Overhead benchmark: instrumented vs uninstrumented bus at high dispatch frequency
- Snapshot retrieval benchmark
8. Docs
- Every
.tsimplementation file has a sibling.md - Root
README.md
9. Pre-publish gate
bunx turbo lint typecheck test --filter=@suaveplan/events-metricsgreenbunx turbo test:coverage --filter=@suaveplan/events-metrics≥ 100% on touched modules
10. Publish
bun scripts/publish.ts --package @suaveplan/events-metrics
11. Archive
- Fold spec delta into
openspec/specs/events/spec.md mv openspec/changes/enterprise-events-metrics openspec/archive/2026-04-24-enterprise-events-metrics