Releases: DavideCarvalho/nestjs-telescope
@dudousxd/nestjs-telescope@1.12.0
Minor Changes
0d1f7ae- Add observability export seams used by@dudousxd/nestjs-telescope-otel. TheRecordergains a best-effortonRecorded(input)hook fired at the top ofrecord()— before pause/sampling — so a metrics consumer gets complete counts even under overload. TheTelescopeExtensionSPI gains optionalobserveRecord(input)/observeFlush(entries)hooks, andExtensionRegistryfans every record and every stored flush out to them (notifyRecord/notifyFlush), each isolated so a misbehaving observer can never break capture or the flush. Existing behavior is unchanged when no extension uses the hooks.
@dudousxd/nestjs-telescope-otel@1.13.0
Minor Changes
-
5fd5b30- Capture MikroORM flush/transaction lifecycle and export duration histograms.@dudousxd/nestjs-telescope-mikro-orm-watcher: the model watcher now also records flush ({ kind: 'flush' }) and transaction ({ kind: 'transaction', outcome }) entries with a measureddurationMs, in addition to entity create/update/delete (now tagged{ kind: 'entity' }). Timing is keyed per-EntityManager via a WeakMap, so concurrent flushes from different forked EMs never share a start slot.@dudousxd/nestjs-telescope-otel:mapInputnow emitstelescope_mikroorm_flush_total+telescope_mikroorm_flush_duration_ms,telescope_mikroorm_transaction_total{outcome}+telescope_mikroorm_transaction_duration_ms, and — when adiagnosticentry carries adurationMs— atelescope_diagnostic_duration_ms{lib,event}histogram alongside the existingtelescope_diagnostic_totalcounter. This lets MikroORM flush/transaction timing and duration-bearing diagnostics events become Grafana-queryablehistogram_quantilemetrics.
@dudousxd/nestjs-telescope-otel@1.12.0
Minor Changes
0d1f7ae- Export everything Telescope records to OpenTelemetry/Grafana.TelescopeOtelExporter(aTelescopeExtension) pushes complete metrics (counted pre-sampling) into the OTel Meter for OTLP and a dependency-free Prometheus/metricsscrape (TelescopeOtelMetricsModule.forExporter), and sampled spans into the OTel Tracer. Durations export as real Prometheus histograms (_bucket{le}+_sum/_count) with boundaries aligned to the OTel Meter, sohistogram_quantileworks in Grafana. Metric cardinality is bounded per metric (maxSeriesPerMetric, default 2000) with a visibletelescope_metrics_dropped_series_total{metric}instead of unbounded growth.@nestjs/commonand@nestjs/coreare optional peers (only the/metricsmodule needs them; the exporter itself is NestJS-free).
@dudousxd/nestjs-telescope-mikro-orm-watcher@1.12.0
Minor Changes
-
5fd5b30- Capture MikroORM flush/transaction lifecycle and export duration histograms.@dudousxd/nestjs-telescope-mikro-orm-watcher: the model watcher now also records flush ({ kind: 'flush' }) and transaction ({ kind: 'transaction', outcome }) entries with a measureddurationMs, in addition to entity create/update/delete (now tagged{ kind: 'entity' }). Timing is keyed per-EntityManager via a WeakMap, so concurrent flushes from different forked EMs never share a start slot.@dudousxd/nestjs-telescope-otel:mapInputnow emitstelescope_mikroorm_flush_total+telescope_mikroorm_flush_duration_ms,telescope_mikroorm_transaction_total{outcome}+telescope_mikroorm_transaction_duration_ms, and — when adiagnosticentry carries adurationMs— atelescope_diagnostic_duration_ms{lib,event}histogram alongside the existingtelescope_diagnostic_totalcounter. This lets MikroORM flush/transaction timing and duration-bearing diagnostics events become Grafana-queryablehistogram_quantilemetrics.
@dudousxd/nestjs-telescope@1.11.2
Patch Changes
-
ba64ffb- Fix (redis): make rollup merges atomic via a per-bucket Lua script (HINCRBYcount/sum/histogram cells + max CAS +ZADD), removing the read-modify-write race that could drop concurrent rollup writes;readHistogramstill merges any legacy JSON blob.Fix (mikro-orm): honor empty-string entry-query filters (switched truthy checks to
!== undefinedfor type/familyHash/batchId/tag), matching the in-memory/sqlite/redis providers.Internal refactors (behavior-preserving): drive
jobActionoff anACTION_METHODdispatch map, extract a module-levelparseWindowMs(deduping 5 identical parsers), and move the request-replay subsystem out of the controller intonest/request-replay.ts.
@dudousxd/nestjs-telescope-ui@1.12.0
Minor Changes
74a6563- Surface the Inertia v3 render metadata in the entry detail UI: new Prepend and Rescued prop rows, a Once cache section (cache key → prop, with expiry), a Scroll section showing the infinite-scroll cursor (prev ← current → next, reset), and except-once chips on the partial-reload panel. All fields are read defensively, so older diagnostic payloads still render.
@dudousxd/nestjs-telescope-redis@1.11.1
Patch Changes
-
ba64ffb- Fix (redis): make rollup merges atomic via a per-bucket Lua script (HINCRBYcount/sum/histogram cells + max CAS +ZADD), removing the read-modify-write race that could drop concurrent rollup writes;readHistogramstill merges any legacy JSON blob.Fix (mikro-orm): honor empty-string entry-query filters (switched truthy checks to
!== undefinedfor type/familyHash/batchId/tag), matching the in-memory/sqlite/redis providers.Internal refactors (behavior-preserving): drive
jobActionoff anACTION_METHODdispatch map, extract a module-levelparseWindowMs(deduping 5 identical parsers), and move the request-replay subsystem out of the controller intonest/request-replay.ts.
@dudousxd/nestjs-telescope-mikro-orm@1.11.1
Patch Changes
-
ba64ffb- Fix (redis): make rollup merges atomic via a per-bucket Lua script (HINCRBYcount/sum/histogram cells + max CAS +ZADD), removing the read-modify-write race that could drop concurrent rollup writes;readHistogramstill merges any legacy JSON blob.Fix (mikro-orm): honor empty-string entry-query filters (switched truthy checks to
!== undefinedfor type/familyHash/batchId/tag), matching the in-memory/sqlite/redis providers.Internal refactors (behavior-preserving): drive
jobActionoff anACTION_METHODdispatch map, extract a module-levelparseWindowMs(deduping 5 identical parsers), and move the request-replay subsystem out of the controller intonest/request-replay.ts.
@dudousxd/nestjs-telescope@1.11.1
Patch Changes
82280c8- perf:runTaggersfast-paths the no-taggers case (the common high-volume path), skipping the Set + result array + closure allocation while preserving the existing tag de-dup semantics.
@dudousxd/nestjs-telescope@1.11.0
Minor Changes
-
#17
76228a3Thanks @DavideCarvalho! - On-demand CPU flamegraph profiling. A new strictly-opt-inprofilingoption
(OFF by default) captures V8 CPU profiles around sampled or manually-triggered
requests via Node'sinspector, aggregates them into a self/total frame tree,
and persists them ascpu_profileentries correlated to their request batch.
The dashboard gains a Profiles tab with a dependency-light flamegraph renderer,
a hot-functions table, and an "arm next N requests" trigger. New headless API
routes:GET /profiles,GET /profiles/:id,GET /profiles/status, and
POST /profiles/arm(gated by the default-deny mutation guard). When profiling
is disabled there is ZERO inspector usage and no request-path cost beyond a
single boolean check. -
#17
76228a3Thanks @DavideCarvalho! - Ecosystem improvements across the telescope packages.- Nested trace / batch waterfall view. Traces and batches now render as a
nested waterfall, showing child spans nested under their parents with relative
offsets and durations so the critical path of a request is visible at a glance. - Pulse-style outlier & rollup cards. New overview cards surface the slowest
endpoints, slowest queries, slowest jobs, and slowest outbound calls, plus
load-by-user and CPU/memory history, in the spirit of Laravel Pulse rollups. - Metric-threshold alert rules. Alerts can now fire on metric thresholds
(p95 / p99 latency, cache-hit ratio) in addition to existing rules, with
shared-storage exception deduplication so the same exception is not alerted
multiple times across replicas. - Improved N+1 detection. Detection now recognizes the 1+N loop pattern and
is duration-weighted, reducing false positives and prioritizing the queries
that actually cost time. - On-demand CPU flamegraph profiling. A strictly-opt-in
profilingoption
(OFF by default) captures V8 CPU profiles via Node'sinspector, aggregates
them into a self/total frame tree, and persists them ascpu_profileentries
correlated to their request batch. The dashboard gains a Profiles tab with a
dependency-light flamegraph renderer, a hot-functions table, and an
"arm next N requests" trigger. When profiling is disabled there is zero
inspector usage and no request-path cost beyond a single boolean check. TelescopeUiModule.forRootAsync. The UI module now mirrors
TelescopeModule.forRootAsync, resolving dashboard options via DI.- Realtime dashboards / SSE live-tail. Dashboards update in realtime over an
@Sseinvalidation stream (falling back to polling) with a LIVE indicator. - Packaging hygiene.
sideEffectsis now declared on each publishable
package to enable safe tree-shaking for downstream bundlers. - Independent versioning. The changeset
fixedgroup was removed so packages
version independently going forward.
- Nested trace / batch waterfall view. Traces and batches now render as a
-
#15
ba7790bThanks @DavideCarvalho! - Rich extension dashboards: the panel IR gains delta/sparkline/threshold onstat
and newdistribution,gauge, andbreakdownpanel kinds, plus asections
layout. Dashboards update in realtime over a new@Sseinvalidation stream
(falling back to polling), with a LIVE indicator. Fully backward compatible —
existing extensions and flatstatpanels render unchanged.