NestJS Profiler
Packages

nest-profiler-cache

Record cache GET/SET/DEL operations and the hit ratio in the Cache panel.

@eleven-labs/nest-profiler-cache

@eleven-labs/nest-profiler-cache intercepts @nestjs/cache-manager operations (GET HIT, GET MISS, SET, DEL) during a profiled execution and displays them in a Cache panel with hit/miss statistics.

Cache panel — GET_HIT / GET_MISS / SET / DEL operations with the hit-ratio badge

Installation

pnpm add @eleven-labs/nest-profiler-cache@alpha @nestjs/cache-manager

There is no stable release yet — install every @eleven-labs/nest-profiler* package with the @alpha dist-tag (@latest resolves to nothing).

Peer dependencies: @nestjs/cache-manager ^3.0.0

Setup

app.module.ts
import { ConditionalModule } from '@nestjs/config';
import { CacheModule } from '@nestjs/cache-manager';
import { CacheCollectorModule } from '@eleven-labs/nest-profiler-cache';

const isProfilerEnabled = (env: NodeJS.ProcessEnv) => env['PROFILER_ENABLED'] === 'true';

@Module({
  imports: [
    CacheModule.register({ isGlobal: true }),
    ConditionalModule.registerWhen(CacheCollectorModule.forRoot(), isProfilerEnabled),
  ],
})
export class AppModule {}

Enabling / disabling — gate the collector with ConditionalModule.registerWhen(..., isProfilerEnabled) as shown, so it loads only when PROFILER_ENABLED is on. Wire the core ProfilerModule once at the root — the recommended setup bundles the root-level profiler modules into a single ProfilingModule behind a ConditionalModule gate (see Enabling and disabling the profiler and the example app). A top-level enabled option is also supported as an alternative.

What it collects

For each cache operation:

FieldDescription
operationGET_HIT, GET_MISS, SET, or DEL
keyCache key
durationOperation duration in ms
startedAtUnix timestamp

The panel also displays an aggregated hit/miss ratio.

Toolbar badge

{hits}H/{misses}M (e.g., 8H/2M). When no GET operations: {n}ops.

How it works

At module initialization, the collector wraps the CACHE_MANAGER's get, set, and del methods using a JavaScript Proxy. Each wrapped call records the operation type, key, and duration into the current request profile.

Powered & maintained by

On this page