hono-status-monitor 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,209 @@
1
+ import type { Server as SocketServer } from 'socket.io';
2
+ /**
3
+ * Configuration options for the status monitor
4
+ */
5
+ export interface StatusMonitorConfig {
6
+ /** Path where the dashboard will be mounted (default: '/status') */
7
+ path?: string;
8
+ /** Dashboard title (default: 'Server Status') */
9
+ title?: string;
10
+ /** Socket.io path (default: '/status/socket.io') */
11
+ socketPath?: string;
12
+ /** Update interval in milliseconds (default: 1000) */
13
+ updateInterval?: number;
14
+ /** History retention in seconds (default: 60) */
15
+ retentionSeconds?: number;
16
+ /** Maximum recent errors to store (default: 10) */
17
+ maxRecentErrors?: number;
18
+ /** Maximum routes to show in analytics (default: 10) */
19
+ maxRoutes?: number;
20
+ /** Alert thresholds */
21
+ alerts?: AlertThresholds;
22
+ /** Optional async function to check database health */
23
+ healthCheck?: () => Promise<HealthCheckResult>;
24
+ /** Custom path normalization function */
25
+ normalizePath?: (path: string) => string;
26
+ }
27
+ /**
28
+ * Alert thresholds configuration
29
+ */
30
+ export interface AlertThresholds {
31
+ /** CPU percentage threshold (default: 80) */
32
+ cpu?: number;
33
+ /** Memory percentage threshold (default: 90) */
34
+ memory?: number;
35
+ /** Response time in ms threshold (default: 500) */
36
+ responseTime?: number;
37
+ /** Error rate percentage threshold (default: 5) */
38
+ errorRate?: number;
39
+ /** Event loop lag in ms threshold (default: 100) */
40
+ eventLoopLag?: number;
41
+ }
42
+ /**
43
+ * Health check result from custom health check function
44
+ */
45
+ export interface HealthCheckResult {
46
+ connected: boolean;
47
+ latencyMs: number;
48
+ name?: string;
49
+ details?: Record<string, unknown>;
50
+ }
51
+ /**
52
+ * Single metric data point
53
+ */
54
+ export interface MetricDataPoint {
55
+ timestamp: number;
56
+ value: number;
57
+ }
58
+ /**
59
+ * Status code counts
60
+ */
61
+ export interface StatusCodeCount {
62
+ [code: string]: number;
63
+ }
64
+ /**
65
+ * Route statistics
66
+ */
67
+ export interface RouteStats {
68
+ path: string;
69
+ method: string;
70
+ count: number;
71
+ totalTime: number;
72
+ avgTime: number;
73
+ minTime: number;
74
+ maxTime: number;
75
+ errors: number;
76
+ lastAccess: number;
77
+ }
78
+ /**
79
+ * Error entry
80
+ */
81
+ export interface ErrorEntry {
82
+ timestamp: number;
83
+ path: string;
84
+ method: string;
85
+ status: number;
86
+ message: string;
87
+ }
88
+ /**
89
+ * Response time percentiles
90
+ */
91
+ export interface PercentileData {
92
+ p50: number;
93
+ p95: number;
94
+ p99: number;
95
+ avg: number;
96
+ }
97
+ /**
98
+ * Alert status flags
99
+ */
100
+ export interface AlertStatus {
101
+ cpu: boolean;
102
+ memory: boolean;
103
+ responseTime: boolean;
104
+ errorRate: boolean;
105
+ eventLoopLag: boolean;
106
+ }
107
+ /**
108
+ * GC statistics
109
+ */
110
+ export interface GCStats {
111
+ collections: number;
112
+ pauseTimeMs: number;
113
+ heapGrowthRate: number;
114
+ }
115
+ /**
116
+ * Database/Health check stats
117
+ */
118
+ export interface DatabaseStats {
119
+ connected: boolean;
120
+ poolSize: number;
121
+ availableConnections: number;
122
+ waitQueueSize: number;
123
+ latencyMs: number;
124
+ name?: string;
125
+ }
126
+ /**
127
+ * Full metrics snapshot
128
+ */
129
+ export interface MetricsSnapshot {
130
+ timestamp: number;
131
+ cpu: number;
132
+ memoryMB: number;
133
+ memoryPercent: number;
134
+ heapUsedMB: number;
135
+ heapTotalMB: number;
136
+ loadAvg: number;
137
+ uptime: number;
138
+ processUptime: number;
139
+ responseTime: number;
140
+ rps: number;
141
+ statusCodes: StatusCodeCount;
142
+ totalRequests: number;
143
+ activeConnections: number;
144
+ eventLoopLag: number;
145
+ hostname: string;
146
+ platform: string;
147
+ nodeVersion: string;
148
+ pid: number;
149
+ cpuCount: number;
150
+ percentiles: PercentileData;
151
+ topRoutes: RouteStats[];
152
+ slowestRoutes: RouteStats[];
153
+ errorRoutes: RouteStats[];
154
+ recentErrors: ErrorEntry[];
155
+ alerts: AlertStatus;
156
+ gc: GCStats;
157
+ database: DatabaseStats;
158
+ rateLimitStats: {
159
+ blocked: number;
160
+ total: number;
161
+ };
162
+ errorRate: number;
163
+ }
164
+ /**
165
+ * Chart data for all metrics
166
+ */
167
+ export interface ChartData {
168
+ cpu: MetricDataPoint[];
169
+ memory: MetricDataPoint[];
170
+ heap: MetricDataPoint[];
171
+ loadAvg: MetricDataPoint[];
172
+ responseTime: MetricDataPoint[];
173
+ rps: MetricDataPoint[];
174
+ eventLoopLag: MetricDataPoint[];
175
+ errorRate: MetricDataPoint[];
176
+ }
177
+ /**
178
+ * Dashboard props
179
+ */
180
+ export interface DashboardProps {
181
+ hostname: string;
182
+ uptime: string;
183
+ socketPath: string;
184
+ title: string;
185
+ }
186
+ /**
187
+ * Status monitor instance
188
+ */
189
+ export interface StatusMonitor {
190
+ /** Hono middleware for tracking requests */
191
+ middleware: (c: any, next: () => Promise<void>) => Promise<void>;
192
+ /** Initialize socket.io server */
193
+ initSocket: (server: any) => SocketServer;
194
+ /** Get current metrics snapshot */
195
+ getMetrics: () => Promise<MetricsSnapshot>;
196
+ /** Get chart data */
197
+ getCharts: () => ChartData;
198
+ /** Start metrics collection */
199
+ start: () => void;
200
+ /** Stop metrics collection */
201
+ stop: () => void;
202
+ /** Track a rate limit event */
203
+ trackRateLimit: (blocked: boolean) => void;
204
+ /** Get dashboard HTML */
205
+ getDashboard: () => Promise<string>;
206
+ /** Configuration */
207
+ config: Required<StatusMonitorConfig>;
208
+ }
209
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ // =============================================================================
2
+ // HONO STATUS MONITOR - TYPE DEFINITIONS
3
+ // =============================================================================
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yCAAyC;AACzC,gFAAgF"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "hono-status-monitor",
3
+ "version": "1.0.0",
4
+ "description": "Real-time server monitoring dashboard for Hono.js with WebSocket updates. Express-status-monitor style metrics with Socket.io.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "prepublishOnly": "npm run build",
14
+ "clean": "rm -rf dist"
15
+ },
16
+ "keywords": [
17
+ "hono",
18
+ "status",
19
+ "monitor",
20
+ "dashboard",
21
+ "websocket",
22
+ "metrics",
23
+ "real-time",
24
+ "performance",
25
+ "cpu",
26
+ "memory",
27
+ "socket.io",
28
+ "express-status-monitor"
29
+ ],
30
+ "author": "Vinit Kumar Goel",
31
+ "email": "vinit928@gmail.com",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/vinitkumargoel/hono-status-monitor.git"
36
+ },
37
+ "homepage": "https://github.com/vinitkumargoel/hono-status-monitor#readme",
38
+ "bugs": {
39
+ "url": "https://github.com/vinitkumargoel/hono-status-monitor/issues"
40
+ },
41
+ "peerDependencies": {
42
+ "hono": ">=4.0.0",
43
+ "@hono/node-server": ">=1.0.0"
44
+ },
45
+ "dependencies": {
46
+ "socket.io": "^4.7.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^20.0.0",
50
+ "hono": "^4.6.0",
51
+ "@hono/node-server": "^1.19.0",
52
+ "typescript": "^5.3.0"
53
+ },
54
+ "engines": {
55
+ "node": ">=18.0.0"
56
+ }
57
+ }