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.
- package/LICENSE +21 -0
- package/README.md +320 -0
- package/dist/dashboard.d.ts +6 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +454 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware.d.ts +6 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +30 -0
- package/dist/middleware.js.map +1 -0
- package/dist/monitor.d.ts +21 -0
- package/dist/monitor.d.ts.map +1 -0
- package/dist/monitor.js +527 -0
- package/dist/monitor.js.map +1 -0
- package/dist/types.d.ts +209 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|