@tezx/profiler
Version:
Lightweight profiling middleware for TezX framework with built-in system stats UI and rotating file storage.
170 lines (119 loc) âĒ 4.02 kB
Markdown
# @tezx/profiler
A lightweight, extensible profiling middleware for the [TezX](https://www.npmjs.com/package/tezx) framework. This module enables detailed tracking of runtime performance metrics, memory usage, CPU statistics, and supports custom plugins and rotating file storage.
## ð Features
- âąïļ Measure route execution time.
- ðū Monitor memory usage in MB.
- âïļ Capture CPU usage in milliseconds.
- ð System stats endpoint (`/__profiler`) with a clean UI.
- ð Plugin hooks (`beforeProfile`, `afterProfile`).
- ð Rotating file storage for logs.
- â
Written in TypeScript with full type safety.
- ð Supports Node.js, Deno, and Bun environments.
## ðĶ Installation
```bash
npm install @tezx/profiler
```
## ð ïļ Usage Example
### Basic Setup
```ts
import { TezX } from 'tezx';
import { profiler, createRotatingFileStorage } from '@tezx/profiler';
const app =new TezX();
app.use(
profiler({
route: '/__profiler',
excludePaths: ['/favicon.ico'],
metrics: ['time', 'memory', 'cpu'],
storage: createRotatingFileStorage('./profiler.log', 1024 * 1024), // Rotate every 1MB
plugins: [],
})
);
app.get('/', (ctx) => ctx.json({ message: 'Hello World' }));
```
## ð Profiler UI
Visit your app at:
```bash
http://localhost:3000/__profiler
```
You'll see:
- â
Uptime (seconds)
- â
Timestamp
- â
Memory Usage (rss, heapTotal, heapUsed, etc.) in MB
- â
CPU Usage (user/system) in milliseconds
## âïļ Profiler Options
| Option | Type | Default | Description |
|------------------|---------------------------------------------|-----------------|-----------------------------------------|
| `route` | `string` | `/__profiler` | Path to view system stats |
| `excludePaths` | `string[]` | `[]` | Paths to ignore |
| `metrics` | `(\"time\" \| \"memory\" \| \"cpu\")[]` | `['time', 'memory']` | Metrics to collect |
| `storage` | `StorageAdapter` | `undefined` | Save profile results |
| `plugins` | `ProfilerPlugin[]` | `[]` | Hook into the profiling lifecycle |
## ð Plugins Example
```typescript
const myPlugin = {
beforeProfile: () => console.log('Starting profiling...'),
afterProfile: (result) => console.log('Profile completed:', result),
};
app.use(profiler({ plugins: [myPlugin] }));
```
## ðïļ Rotating File Storage Example
```typescript
const storage = createRotatingFileStorage('./profiler.log', 1024 * 1024); // 1MB rotation
app.use(profiler({ storage }));
```
- File automatically rotates when it reaches the configured size.
- Supports Node.js, Deno, Bun file systems.
## ð§âðŧ Example Profile Output
```json
{
"name": "default",
"duration": 6.25,
"timestamp": "2025-07-06T19:25:47.753Z",
"method": "GET",
"path": "/",
"memoryUsage": {
"rss": 10485760,
"heapTotal": 6291456,
"heapUsed": 4194304,
"external": 102400,
"arrayBuffers": 51200
},
"cpuUsage": {
"user": 1416,
"system": 312
}
}
```
## ⥠System Stats Breakdown
### Memory Usage
- `rss`: Resident Set Size (total memory allocated for the process)
- `heapTotal`: Total size of allocated heap
- `heapUsed`: Heap actually used
- `external`: Memory used by C++ objects bound to JS
- `arrayBuffers`: Memory allocated for ArrayBuffer
### CPU Usage
- `user`: Time spent in user mode (Ξs)
- `system`: Time spent in kernel mode (Ξs)
## ð Environment Support
âïļ Node.js
âïļ Deno
âïļ Bun
<!--
## ð Future Enhancements
- ð Redis or database storage adapters
- ð Export metrics in Prometheus format
- ð Remote profiling dashboard -->
## ð License
MIT ÂĐ 2025 TezX Team