hono-status-monitor 1.0.0 → 1.0.2

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/dist/index.js CHANGED
@@ -1,20 +1,27 @@
1
1
  // =============================================================================
2
2
  // HONO STATUS MONITOR
3
3
  // Real-time server monitoring dashboard for Hono.js with WebSocket updates
4
+ // Supports Node.js and Cloudflare Workers/Edge environments
4
5
  // =============================================================================
5
6
  import { Hono } from 'hono';
6
- import { createMonitor } from './monitor.js';
7
- import { createMiddleware } from './middleware.js';
8
- import { generateDashboard } from './dashboard.js';
7
+ import { detectPlatform } from './platform.js';
8
+ import { createEdgeMonitor } from './monitor-edge.js';
9
+ import { generateDashboard, generateEdgeDashboard } from './dashboard.js';
9
10
  // Re-export types
10
11
  export * from './types.js';
12
+ export { generateDashboard, generateEdgeDashboard } from './dashboard.js';
13
+ export { createEdgeMonitor } from './monitor-edge.js';
14
+ export { detectPlatform, isNodeEnvironment, isCloudflareEnvironment, isEdgeEnvironment, getPlatformInfo } from './platform.js';
15
+ // Conditionally export Node.js-specific modules
16
+ // These will throw errors if imported in edge environments
11
17
  export { createMonitor } from './monitor.js';
12
18
  export { createMiddleware } from './middleware.js';
13
- export { generateDashboard } from './dashboard.js';
19
+ export { isClusterWorker, isClusterMaster, getWorkerId, createClusterAggregator } from './cluster.js';
14
20
  /**
15
21
  * Create a complete status monitor with routes, middleware, and WebSocket
22
+ * Automatically detects the runtime environment and uses the appropriate implementation
16
23
  *
17
- * @example
24
+ * @example Node.js
18
25
  * ```typescript
19
26
  * import { Hono } from 'hono';
20
27
  * import { serve } from '@hono/node-server';
@@ -23,23 +30,50 @@ export { generateDashboard } from './dashboard.js';
23
30
  * const app = new Hono();
24
31
  * const monitor = statusMonitor();
25
32
  *
26
- * // Add middleware to track all requests
27
33
  * app.use('*', monitor.middleware);
28
- *
29
- * // Mount status routes
30
34
  * app.route('/status', monitor.routes);
31
35
  *
32
- * // Start server and initialize WebSocket
33
36
  * const server = serve({ fetch: app.fetch, port: 3000 });
34
37
  * monitor.initSocket(server);
35
38
  * ```
39
+ *
40
+ * @example Cloudflare Workers
41
+ * ```typescript
42
+ * import { Hono } from 'hono';
43
+ * import { statusMonitor } from 'hono-status-monitor';
44
+ *
45
+ * const app = new Hono();
46
+ * const monitor = statusMonitor();
47
+ *
48
+ * app.use('*', monitor.middleware);
49
+ * app.route('/status', monitor.routes);
50
+ *
51
+ * export default app;
52
+ * ```
36
53
  */
37
54
  export function statusMonitor(config = {}) {
38
- // Create monitor instance
55
+ // Force platform check if specified in config
56
+ const platform = detectPlatform();
57
+ const useNodeVersion = platform === 'node';
58
+ if (useNodeVersion) {
59
+ // Node.js version with full features
60
+ return createNodeStatusMonitor(config);
61
+ }
62
+ else {
63
+ // Edge/Cloudflare version with limited features
64
+ return createEdgeStatusMonitor(config);
65
+ }
66
+ }
67
+ /**
68
+ * Create a Node.js status monitor with full features
69
+ * Requires Node.js runtime with os, process, http modules
70
+ */
71
+ function createNodeStatusMonitor(config = {}) {
72
+ // Dynamic import to avoid loading Node.js modules in edge
73
+ const { createMonitor } = require('./monitor.js');
74
+ const { createMiddleware } = require('./middleware.js');
39
75
  const monitor = createMonitor(config);
40
- // Create middleware
41
76
  const middleware = createMiddleware(monitor);
42
- // Create Hono routes
43
77
  const routes = new Hono();
44
78
  // Dashboard page
45
79
  routes.get('/', async (c) => {
@@ -77,8 +111,83 @@ export function statusMonitor(config = {}) {
77
111
  /** Stop metrics collection */
78
112
  stop: () => monitor.stop(),
79
113
  /** Access to the underlying monitor instance */
80
- monitor
114
+ monitor,
115
+ /** Whether running in edge mode */
116
+ isEdgeMode: false
117
+ };
118
+ }
119
+ /**
120
+ * Create an edge-compatible status monitor with limited features
121
+ * Works in Cloudflare Workers, Vercel Edge, and other edge runtimes
122
+ */
123
+ function createEdgeStatusMonitor(config = {}) {
124
+ const monitor = createEdgeMonitor(config);
125
+ const routes = new Hono();
126
+ // Create middleware for edge
127
+ const middleware = async (c, next) => {
128
+ const path = new URL(c.req.url).pathname;
129
+ const method = c.req.method;
130
+ // Skip status route itself
131
+ if (path.startsWith(config.path || '/status')) {
132
+ return next();
133
+ }
134
+ const start = performance.now();
135
+ monitor.trackRequest(path, method);
136
+ try {
137
+ await next();
138
+ }
139
+ finally {
140
+ const duration = performance.now() - start;
141
+ const status = c.res?.status || 200;
142
+ monitor.trackRequestComplete(path, method, duration, status);
143
+ }
81
144
  };
145
+ // Dashboard page - uses polling mode
146
+ routes.get('/', async (c) => {
147
+ const snapshot = await monitor.getMetricsSnapshot();
148
+ const html = generateEdgeDashboard({
149
+ hostname: snapshot.hostname,
150
+ uptime: monitor.formatUptime(snapshot.uptime),
151
+ title: monitor.config.title
152
+ });
153
+ return c.html(html);
154
+ });
155
+ // JSON API endpoint
156
+ routes.get('/api/metrics', async (c) => {
157
+ return c.json({
158
+ snapshot: await monitor.getMetricsSnapshot(),
159
+ charts: monitor.getChartData()
160
+ });
161
+ });
162
+ // Start (no-op in edge mode)
163
+ monitor.start();
164
+ return {
165
+ /** Hono middleware for tracking all requests */
166
+ middleware,
167
+ /** Pre-configured Hono routes for dashboard and API */
168
+ routes,
169
+ /** Initialize Socket.io - not available in edge, returns null */
170
+ initSocket: () => null,
171
+ /** Track rate limit events for the dashboard */
172
+ trackRateLimit: (blocked) => monitor.trackRateLimitEvent(blocked),
173
+ /** Get current metrics snapshot */
174
+ getMetrics: () => monitor.getMetricsSnapshot(),
175
+ /** Get chart data for all metrics */
176
+ getCharts: () => monitor.getChartData(),
177
+ /** Stop metrics collection */
178
+ stop: () => monitor.stop(),
179
+ /** Access to the underlying monitor instance */
180
+ monitor,
181
+ /** Whether running in edge mode */
182
+ isEdgeMode: true
183
+ };
184
+ }
185
+ /**
186
+ * Explicitly create an edge-compatible status monitor
187
+ * Use this when you want to force edge mode regardless of environment
188
+ */
189
+ export function statusMonitorEdge(config = {}) {
190
+ return createEdgeStatusMonitor(config);
82
191
  }
83
192
  // Default export
84
193
  export default statusMonitor;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sBAAsB;AACtB,2EAA2E;AAC3E,gFAAgF;AAEhF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,aAAa,CAAC,SAA8B,EAAE;IAC1D,0BAA0B;IAC1B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC,oBAAoB;IACpB,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE7C,qBAAqB;IACrB,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAE1B,iBAAiB;IACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,iBAAiB,CAAC;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7C,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;YACrC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;SAC9B,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE;YAC5C,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE;SACjC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,OAAO;QACH,gDAAgD;QAChD,UAAU;QACV,uDAAuD;QACvD,MAAM;QACN,oEAAoE;QACpE,UAAU,EAAE,CAAC,MAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9D,gDAAgD;QAChD,cAAc,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAC1E,mCAAmC;QACnC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE;QAC9C,qCAAqC;QACrC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE;QACvC,8BAA8B;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QAC1B,gDAAgD;QAChD,OAAO;KACV,CAAC;AACN,CAAC;AAED,iBAAiB;AACjB,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { StatusMonitorConfig, MetricsSnapshot, ChartData } from './types.js';
2
+ /**
3
+ * Create an edge-compatible status monitor instance
4
+ * Works without Node.js APIs (os, process, cluster)
5
+ */
6
+ export declare function createEdgeMonitor(userConfig?: StatusMonitorConfig): {
7
+ config: Required<StatusMonitorConfig>;
8
+ trackRequest: (path: string, method: string) => void;
9
+ trackRequestComplete: (path: string, method: string, durationMs: number, statusCode: number) => void;
10
+ trackRateLimitEvent: (blocked: boolean) => void;
11
+ getMetricsSnapshot: () => Promise<MetricsSnapshot>;
12
+ getChartData: () => ChartData;
13
+ start: () => void;
14
+ stop: () => void;
15
+ initSocket: () => null;
16
+ formatUptime: (seconds: number) => string;
17
+ isEdgeMode: boolean;
18
+ readonly io: null;
19
+ };
20
+ export type EdgeMonitor = ReturnType<typeof createEdgeMonitor>;
21
+ //# sourceMappingURL=monitor-edge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-edge.d.ts","sourceRoot":"","sources":["../src/monitor-edge.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,mBAAmB,EAOnB,eAAe,EACf,SAAS,EACZ,MAAM,YAAY,CAAC;AAkCpB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,GAAE,mBAAwB;;yBAyKtC,MAAM,UAAU,MAAM,KAAG,IAAI;iCA2B/C,MAAM,UACJ,MAAM,cACF,MAAM,cACN,MAAM,KACnB,IAAI;mCAkD+B,OAAO,KAAG,IAAI;8BAQf,OAAO,CAAC,eAAe,CAAC;wBAgEpC,SAAS;iBAgChB,IAAI;gBAKL,IAAI;sBAME,IAAI;4BA3BI,MAAM,KAAG,MAAM;;;EA8CjD;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,376 @@
1
+ // =============================================================================
2
+ // HONO STATUS MONITOR - EDGE-COMPATIBLE MONITOR
3
+ // Lightweight monitor for Cloudflare Workers and Edge environments
4
+ // No Node.js-specific APIs (os, process, cluster, socket.io)
5
+ // =============================================================================
6
+ // Default configuration for edge environments
7
+ const DEFAULT_EDGE_CONFIG = {
8
+ path: '/status',
9
+ title: 'Server Status',
10
+ socketPath: '/status/socket.io', // Not used in edge, included for compatibility
11
+ updateInterval: 5000, // Polling interval (not real-time)
12
+ retentionSeconds: 60,
13
+ maxRecentErrors: 10,
14
+ maxRoutes: 10,
15
+ alerts: {
16
+ cpu: 80, // Not available in edge
17
+ memory: 90, // Not available in edge
18
+ responseTime: 500,
19
+ errorRate: 5,
20
+ eventLoopLag: 100 // Not available in edge
21
+ },
22
+ healthCheck: async () => ({ connected: true, latencyMs: 0 }),
23
+ normalizePath: (path) => path,
24
+ clusterMode: false // Not supported in edge
25
+ };
26
+ /**
27
+ * Default path normalization function
28
+ */
29
+ function defaultNormalizePath(path) {
30
+ return path
31
+ .replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi, ':uuid')
32
+ .replace(/[0-9a-f]{24}/gi, ':id')
33
+ .replace(/\/\d+/g, '/:id')
34
+ .split('/').slice(0, 4).join('/');
35
+ }
36
+ /**
37
+ * Create an edge-compatible status monitor instance
38
+ * Works without Node.js APIs (os, process, cluster)
39
+ */
40
+ export function createEdgeMonitor(userConfig = {}) {
41
+ // Merge configuration
42
+ const config = {
43
+ ...DEFAULT_EDGE_CONFIG,
44
+ ...userConfig,
45
+ alerts: { ...DEFAULT_EDGE_CONFIG.alerts, ...userConfig.alerts },
46
+ normalizePath: userConfig.normalizePath || defaultNormalizePath,
47
+ clusterMode: false // Never in cluster mode on edge
48
+ };
49
+ // In-memory metrics storage
50
+ let responseTimeHistory = [];
51
+ let rpsHistory = [];
52
+ let errorRateHistory = [];
53
+ // Request tracking
54
+ let requestCount = 0;
55
+ let lastRequestCount = 0;
56
+ let lastUpdateTime = Date.now();
57
+ let totalResponseTime = 0;
58
+ let responseTimeCount = 0;
59
+ let statusCodes = {};
60
+ let totalRequests = 0;
61
+ let activeConnections = 0;
62
+ // Route tracking
63
+ const routeStats = new Map();
64
+ const recentErrors = [];
65
+ // Response time samples for percentiles
66
+ let responseTimeSamples = [];
67
+ // Rate limit tracking
68
+ let rateLimitBlocked = 0;
69
+ let rateLimitTotal = 0;
70
+ // Start time for uptime calculation
71
+ const startTime = Date.now();
72
+ /**
73
+ * Calculate percentiles from samples
74
+ */
75
+ function calculatePercentiles() {
76
+ if (responseTimeSamples.length === 0) {
77
+ return { p50: 0, p95: 0, p99: 0, avg: 0 };
78
+ }
79
+ const sorted = [...responseTimeSamples].sort((a, b) => a - b);
80
+ const len = sorted.length;
81
+ const p50Index = Math.floor(len * 0.5);
82
+ const p95Index = Math.floor(len * 0.95);
83
+ const p99Index = Math.floor(len * 0.99);
84
+ const avg = sorted.reduce((a, b) => a + b, 0) / len;
85
+ return {
86
+ p50: Math.round(sorted[p50Index] * 100) / 100,
87
+ p95: Math.round(sorted[p95Index] * 100) / 100,
88
+ p99: Math.round(sorted[Math.min(p99Index, len - 1)] * 100) / 100,
89
+ avg: Math.round(avg * 100) / 100
90
+ };
91
+ }
92
+ /**
93
+ * Get top routes by request count
94
+ */
95
+ function getTopRoutes() {
96
+ return Array.from(routeStats.values())
97
+ .sort((a, b) => b.count - a.count)
98
+ .slice(0, config.maxRoutes);
99
+ }
100
+ /**
101
+ * Get slowest routes by average response time
102
+ */
103
+ function getSlowestRoutes() {
104
+ return Array.from(routeStats.values())
105
+ .filter(r => r.count > 0)
106
+ .sort((a, b) => b.avgTime - a.avgTime)
107
+ .slice(0, config.maxRoutes);
108
+ }
109
+ /**
110
+ * Get routes with most errors
111
+ */
112
+ function getErrorRoutes() {
113
+ return Array.from(routeStats.values())
114
+ .filter(r => r.errors > 0)
115
+ .sort((a, b) => b.errors - a.errors)
116
+ .slice(0, config.maxRoutes);
117
+ }
118
+ /**
119
+ * Calculate current error rate
120
+ */
121
+ function getErrorRate() {
122
+ const totalErrors = Array.from(routeStats.values()).reduce((sum, r) => sum + r.errors, 0);
123
+ if (totalRequests === 0)
124
+ return 0;
125
+ return Math.round((totalErrors / totalRequests) * 10000) / 100;
126
+ }
127
+ /**
128
+ * Check alert conditions (limited to available metrics)
129
+ */
130
+ function checkAlerts() {
131
+ const respTime = responseTimeHistory.length > 0
132
+ ? responseTimeHistory[responseTimeHistory.length - 1].value
133
+ : 0;
134
+ const errorRate = getErrorRate();
135
+ return {
136
+ cpu: false, // Not available in edge
137
+ memory: false, // Not available in edge
138
+ responseTime: respTime > (config.alerts.responseTime ?? 500),
139
+ errorRate: errorRate > (config.alerts.errorRate ?? 5),
140
+ eventLoopLag: false // Not available in edge
141
+ };
142
+ }
143
+ /**
144
+ * Add a data point to history
145
+ */
146
+ function addToHistory(history, value) {
147
+ const now = Date.now();
148
+ history.push({ timestamp: now, value });
149
+ const cutoff = now - (config.retentionSeconds * 1000);
150
+ while (history.length > 0 && history[0].timestamp < cutoff) {
151
+ history.shift();
152
+ }
153
+ }
154
+ /**
155
+ * Update metrics (called on each request in edge mode, not on interval)
156
+ */
157
+ function updateMetricsIfNeeded() {
158
+ const now = Date.now();
159
+ const elapsed = now - lastUpdateTime;
160
+ // Only update history at configured intervals
161
+ if (elapsed >= config.updateInterval) {
162
+ const intervalSeconds = elapsed / 1000;
163
+ const currentRps = Math.round((requestCount - lastRequestCount) / intervalSeconds);
164
+ lastRequestCount = requestCount;
165
+ lastUpdateTime = now;
166
+ addToHistory(rpsHistory, currentRps);
167
+ const avgResponseTime = responseTimeCount > 0
168
+ ? Math.round((totalResponseTime / responseTimeCount) * 100) / 100
169
+ : 0;
170
+ addToHistory(responseTimeHistory, avgResponseTime);
171
+ addToHistory(errorRateHistory, getErrorRate());
172
+ // Reset counters
173
+ totalResponseTime = 0;
174
+ responseTimeCount = 0;
175
+ // Trim samples (keep last 1000)
176
+ if (responseTimeSamples.length > 1000) {
177
+ responseTimeSamples = responseTimeSamples.slice(-500);
178
+ }
179
+ }
180
+ }
181
+ /**
182
+ * Track a request start
183
+ */
184
+ function trackRequest(path, method) {
185
+ requestCount++;
186
+ totalRequests++;
187
+ activeConnections++;
188
+ const normalizedPath = config.normalizePath(path);
189
+ const key = `${method}:${normalizedPath}`;
190
+ if (!routeStats.has(key)) {
191
+ routeStats.set(key, {
192
+ path: normalizedPath,
193
+ method,
194
+ count: 0,
195
+ totalTime: 0,
196
+ avgTime: 0,
197
+ minTime: Infinity,
198
+ maxTime: 0,
199
+ errors: 0,
200
+ lastAccess: Date.now()
201
+ });
202
+ }
203
+ }
204
+ /**
205
+ * Track request completion
206
+ */
207
+ function trackRequestComplete(path, method, durationMs, statusCode) {
208
+ activeConnections = Math.max(0, activeConnections - 1);
209
+ // Track response time
210
+ totalResponseTime += durationMs;
211
+ responseTimeCount++;
212
+ responseTimeSamples.push(durationMs);
213
+ // Track status code
214
+ const codeStr = statusCode.toString();
215
+ statusCodes[codeStr] = (statusCodes[codeStr] || 0) + 1;
216
+ // Update route stats
217
+ const normalizedPath = config.normalizePath(path);
218
+ const key = `${method}:${normalizedPath}`;
219
+ const stats = routeStats.get(key);
220
+ if (stats) {
221
+ stats.count++;
222
+ stats.totalTime += durationMs;
223
+ stats.avgTime = stats.totalTime / stats.count;
224
+ stats.minTime = Math.min(stats.minTime, durationMs);
225
+ stats.maxTime = Math.max(stats.maxTime, durationMs);
226
+ stats.lastAccess = Date.now();
227
+ // Track errors
228
+ if (statusCode >= 400) {
229
+ stats.errors++;
230
+ recentErrors.unshift({
231
+ timestamp: Date.now(),
232
+ path: normalizedPath,
233
+ method,
234
+ status: statusCode,
235
+ message: `${method} ${normalizedPath} returned ${statusCode}`
236
+ });
237
+ while (recentErrors.length > config.maxRecentErrors) {
238
+ recentErrors.pop();
239
+ }
240
+ }
241
+ }
242
+ // Update metrics if interval has passed
243
+ updateMetricsIfNeeded();
244
+ }
245
+ /**
246
+ * Track rate limit event
247
+ */
248
+ function trackRateLimitEvent(blocked) {
249
+ rateLimitTotal++;
250
+ if (blocked)
251
+ rateLimitBlocked++;
252
+ }
253
+ /**
254
+ * Get current metrics snapshot
255
+ */
256
+ async function getMetricsSnapshot() {
257
+ // Trigger update check
258
+ updateMetricsIfNeeded();
259
+ const uptimeSeconds = Math.round((Date.now() - startTime) / 1000);
260
+ return {
261
+ timestamp: Date.now(),
262
+ // System metrics - not available in edge
263
+ cpu: 0,
264
+ memoryMB: 0,
265
+ memoryPercent: 0,
266
+ heapUsedMB: 0,
267
+ heapTotalMB: 0,
268
+ loadAvg: 0,
269
+ uptime: uptimeSeconds, // Worker uptime
270
+ processUptime: uptimeSeconds,
271
+ // Request metrics - available
272
+ responseTime: responseTimeHistory.length > 0
273
+ ? responseTimeHistory[responseTimeHistory.length - 1].value
274
+ : 0,
275
+ rps: rpsHistory.length > 0
276
+ ? rpsHistory[rpsHistory.length - 1].value
277
+ : 0,
278
+ statusCodes: { ...statusCodes },
279
+ totalRequests,
280
+ activeConnections,
281
+ eventLoopLag: 0, // Not available in edge
282
+ // Platform info
283
+ hostname: 'cloudflare-worker',
284
+ platform: 'Cloudflare Workers',
285
+ nodeVersion: 'N/A',
286
+ pid: 0,
287
+ cpuCount: 0,
288
+ // Analytics - available
289
+ percentiles: calculatePercentiles(),
290
+ topRoutes: getTopRoutes(),
291
+ slowestRoutes: getSlowestRoutes(),
292
+ errorRoutes: getErrorRoutes(),
293
+ recentErrors: [...recentErrors],
294
+ alerts: checkAlerts(),
295
+ // Not available metrics
296
+ gc: {
297
+ collections: 0,
298
+ pauseTimeMs: 0,
299
+ heapGrowthRate: 0
300
+ },
301
+ database: {
302
+ connected: false,
303
+ poolSize: 0,
304
+ availableConnections: 0,
305
+ waitQueueSize: 0,
306
+ latencyMs: 0
307
+ },
308
+ rateLimitStats: { blocked: rateLimitBlocked, total: rateLimitTotal },
309
+ errorRate: getErrorRate(),
310
+ // Edge mode indicator
311
+ isEdgeMode: true
312
+ };
313
+ }
314
+ /**
315
+ * Get chart data
316
+ */
317
+ function getChartData() {
318
+ return {
319
+ cpu: [], // Not available
320
+ memory: [], // Not available
321
+ heap: [], // Not available
322
+ loadAvg: [], // Not available
323
+ responseTime: [...responseTimeHistory],
324
+ rps: [...rpsHistory],
325
+ eventLoopLag: [], // Not available
326
+ errorRate: [...errorRateHistory]
327
+ };
328
+ }
329
+ /**
330
+ * Format uptime
331
+ */
332
+ function formatUptime(seconds) {
333
+ const days = Math.floor(seconds / 86400);
334
+ const hours = Math.floor((seconds % 86400) / 3600);
335
+ const minutes = Math.floor((seconds % 3600) / 60);
336
+ const secs = Math.floor(seconds % 60);
337
+ const parts = [];
338
+ if (days > 0)
339
+ parts.push(`${days}d`);
340
+ if (hours > 0)
341
+ parts.push(`${hours}h`);
342
+ if (minutes > 0)
343
+ parts.push(`${minutes}m`);
344
+ parts.push(`${secs}s`);
345
+ return parts.join(' ');
346
+ }
347
+ // No-op functions for compatibility
348
+ function start() {
349
+ // No interval needed in edge - updates happen on each request
350
+ console.log('📊 Status monitor started (edge mode)');
351
+ }
352
+ function stop() {
353
+ // Nothing to stop in edge mode
354
+ console.log('📊 Status monitor stopped (edge mode)');
355
+ }
356
+ // Socket not available in edge
357
+ function initSocket() {
358
+ console.log('📊 WebSocket not available in edge mode, use polling');
359
+ return null;
360
+ }
361
+ return {
362
+ config,
363
+ trackRequest,
364
+ trackRequestComplete,
365
+ trackRateLimitEvent,
366
+ getMetricsSnapshot,
367
+ getChartData,
368
+ start,
369
+ stop,
370
+ initSocket,
371
+ formatUptime,
372
+ isEdgeMode: true,
373
+ get io() { return null; }
374
+ };
375
+ }
376
+ //# sourceMappingURL=monitor-edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-edge.js","sourceRoot":"","sources":["../src/monitor-edge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EACR,mBAAmB,EAQnB,aAAa,EACb,eAAe,EACf,SAAS,EACZ,MAAM,YAAY,CAAC;AAsCpB;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,GAAE,mBAAwB;;yBAyYlC,MAAM,UAAU,MAAM,KAAG,IAAI;iCA2B/C,MAAM,UACJ,MAAM,cACF,MAAM,cACN,MAAM,KACnB,IAAI;mCAiD+B,OAAO,KAAG,IAAI;mCAnJR,aAAa,KAAG,OAAO,CAAC,eAAe,CAAC;wBAmD3D,SAAS;iBAwGhB,IAAI;gBAWL,IAAI;yBAWO,UAAU,KAAG,YAAY;4BAuBtB,MAAM,KAAG,MAAM;;EA4BjD;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EACR,mBAAmB,EAQnB,aAAa,EACb,eAAe,EACf,SAAS,EAEZ,MAAM,YAAY,CAAC;AA8CpB;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,GAAE,mBAAwB;;yBA8ZlC,MAAM,UAAU,MAAM,KAAG,IAAI;iCA2B/C,MAAM,UACJ,MAAM,cACF,MAAM,cACN,MAAM,KACnB,IAAI;mCAiD+B,OAAO,KAAG,IAAI;mCAnJR,aAAa,KAAG,OAAO,CAAC,eAAe,CAAC;wBAmD3D,SAAS;iBAwGhB,IAAI;gBAWL,IAAI;yBAWO,UAAU,KAAG,YAAY;4BAwCtB,MAAM,KAAG,MAAM;;EA4BjD;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}