mcp-wordpress 1.2.2 → 1.3.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/README.md +210 -182
- package/dist/cache/CacheInvalidation.d.ts +3 -3
- package/dist/cache/CacheInvalidation.d.ts.map +1 -1
- package/dist/cache/CacheInvalidation.js +119 -119
- package/dist/cache/CacheInvalidation.js.map +1 -1
- package/dist/cache/CacheManager.d.ts +5 -0
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.js +26 -16
- package/dist/cache/CacheManager.js.map +1 -1
- package/dist/cache/HttpCacheWrapper.d.ts +1 -1
- package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
- package/dist/cache/HttpCacheWrapper.js +29 -29
- package/dist/cache/HttpCacheWrapper.js.map +1 -1
- package/dist/cache/__tests__/CacheInvalidation.test.js +96 -94
- package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -1
- package/dist/cache/__tests__/CacheManager.test.js +113 -113
- package/dist/cache/__tests__/CacheManager.test.js.map +1 -1
- package/dist/cache/__tests__/CachedWordPressClient.test.js +102 -99
- package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -1
- package/dist/cache/__tests__/HttpCacheWrapper.test.js +98 -95
- package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
- package/dist/cache/index.d.ts +7 -7
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +4 -4
- package/dist/cache/index.js.map +1 -1
- package/dist/client/CachedWordPressClient.d.ts +4 -4
- package/dist/client/CachedWordPressClient.d.ts.map +1 -1
- package/dist/client/CachedWordPressClient.js +55 -51
- package/dist/client/CachedWordPressClient.js.map +1 -1
- package/dist/client/api.d.ts +10 -10
- package/dist/client/api.js +158 -158
- package/dist/client/api.js.map +1 -1
- package/dist/client/auth.d.ts +2 -2
- package/dist/client/auth.js +72 -72
- package/dist/client/managers/AuthenticationManager.d.ts +2 -2
- package/dist/client/managers/AuthenticationManager.js +46 -46
- package/dist/client/managers/BaseManager.d.ts +1 -1
- package/dist/client/managers/BaseManager.js +9 -9
- package/dist/client/managers/RequestManager.d.ts +5 -3
- package/dist/client/managers/RequestManager.d.ts.map +1 -1
- package/dist/client/managers/RequestManager.js +39 -19
- package/dist/client/managers/RequestManager.js.map +1 -1
- package/dist/client/managers/index.d.ts +3 -3
- package/dist/client/managers/index.js +3 -3
- package/dist/config/ConfigurationSchema.d.ts +2 -2
- package/dist/config/ConfigurationSchema.d.ts.map +1 -1
- package/dist/config/ConfigurationSchema.js +40 -40
- package/dist/config/ConfigurationSchema.js.map +1 -1
- package/dist/config/ServerConfiguration.d.ts +2 -2
- package/dist/config/ServerConfiguration.js +35 -35
- package/dist/config/ServerConfiguration.js.map +1 -1
- package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
- package/dist/docs/DocumentationGenerator.js +296 -255
- package/dist/docs/DocumentationGenerator.js.map +1 -1
- package/dist/docs/MarkdownFormatter.d.ts +1 -1
- package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
- package/dist/docs/MarkdownFormatter.js +60 -51
- package/dist/docs/MarkdownFormatter.js.map +1 -1
- package/dist/docs/index.d.ts +3 -3
- package/dist/docs/index.d.ts.map +1 -1
- package/dist/docs/index.js +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp-wordpress-1.3.0.tgz +0 -0
- package/dist/performance/MetricsCollector.d.ts +3 -3
- package/dist/performance/MetricsCollector.d.ts.map +1 -1
- package/dist/performance/MetricsCollector.js +33 -27
- package/dist/performance/MetricsCollector.js.map +1 -1
- package/dist/performance/PerformanceAnalytics.d.ts +12 -12
- package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
- package/dist/performance/PerformanceAnalytics.js +200 -154
- package/dist/performance/PerformanceAnalytics.js.map +1 -1
- package/dist/performance/PerformanceMonitor.d.ts +5 -5
- package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
- package/dist/performance/PerformanceMonitor.js +53 -52
- package/dist/performance/PerformanceMonitor.js.map +1 -1
- package/dist/performance/index.d.ts +6 -6
- package/dist/performance/index.d.ts.map +1 -1
- package/dist/performance/index.js +3 -3
- package/dist/security/InputValidator.d.ts +1 -1
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +111 -88
- package/dist/security/InputValidator.js.map +1 -1
- package/dist/security/SecurityConfig.d.ts +5 -5
- package/dist/security/SecurityConfig.js +92 -92
- package/dist/security/SecurityConfig.js.map +1 -1
- package/dist/server/ConnectionTester.d.ts +1 -1
- package/dist/server/ConnectionTester.d.ts.map +1 -1
- package/dist/server/ConnectionTester.js +4 -4
- package/dist/server/ConnectionTester.js.map +1 -1
- package/dist/server/ToolRegistry.d.ts +2 -2
- package/dist/server/ToolRegistry.d.ts.map +1 -1
- package/dist/server/ToolRegistry.js +35 -32
- package/dist/server/ToolRegistry.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.js +2 -2
- package/dist/tools/BaseToolManager.js +5 -5
- package/dist/tools/auth.d.ts +2 -2
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +32 -31
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/cache.d.ts +1 -1
- package/dist/tools/cache.d.ts.map +1 -1
- package/dist/tools/cache.js +71 -71
- package/dist/tools/cache.js.map +1 -1
- package/dist/tools/comments.d.ts +2 -2
- package/dist/tools/comments.d.ts.map +1 -1
- package/dist/tools/comments.js +79 -79
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/index.d.ts +10 -10
- package/dist/tools/index.js +10 -10
- package/dist/tools/media.d.ts +2 -2
- package/dist/tools/media.js +80 -80
- package/dist/tools/pages.d.ts +2 -2
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js +75 -75
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/performance.d.ts +1 -1
- package/dist/tools/performance.d.ts.map +1 -1
- package/dist/tools/performance.js +311 -287
- package/dist/tools/performance.js.map +1 -1
- package/dist/tools/posts.d.ts +2 -2
- package/dist/tools/posts.d.ts.map +1 -1
- package/dist/tools/posts.js +94 -94
- package/dist/tools/posts.js.map +1 -1
- package/dist/tools/site.d.ts +2 -2
- package/dist/tools/site.d.ts.map +1 -1
- package/dist/tools/site.js +60 -60
- package/dist/tools/site.js.map +1 -1
- package/dist/tools/taxonomies.d.ts +2 -2
- package/dist/tools/taxonomies.js +89 -89
- package/dist/tools/users.d.ts +2 -2
- package/dist/tools/users.js +68 -68
- package/dist/tools/users.js.map +1 -1
- package/dist/types/client.d.ts +13 -13
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/client.js +12 -12
- package/dist/types/client.js.map +1 -1
- package/dist/types/index.d.ts +19 -19
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -3
- package/dist/types/mcp.d.ts +7 -7
- package/dist/types/wordpress.d.ts +21 -21
- package/dist/types/wordpress.d.ts.map +1 -1
- package/dist/utils/debug.d.ts +2 -2
- package/dist/utils/debug.js +28 -28
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/utils/error.js +13 -13
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/toolWrapper.d.ts.map +1 -1
- package/dist/utils/toolWrapper.js +5 -5
- package/dist/utils/toolWrapper.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +41 -31
- package/dist/utils/validation.js.map +1 -1
- package/docs/CACHING.md +36 -2
- package/docs/DOCKER.md +24 -18
- package/docs/PERFORMANCE_MONITORING.md +49 -1
- package/docs/SECURITY_TESTING.md +30 -1
- package/docs/api/README.md +9 -1
- package/docs/api/summary.json +1 -1
- package/docs/contract-testing.md +24 -3
- package/docs/developer/GITHUB_ACTIONS_SETUP.md +8 -2
- package/docs/developer/MAINTENANCE.md +29 -3
- package/docs/developer/MIGRATION_GUIDE.md +13 -1
- package/docs/developer/NPM_AUTH_SETUP.md +13 -2
- package/docs/developer/REFACTORING.md +31 -1
- package/docs/releases/COMMUNITY_ANNOUNCEMENT_v1.1.2.md +18 -7
- package/docs/releases/RELEASE_NOTES_v1.1.2.md +31 -5
- package/docs/user-guides/DOCKER_SETUP.md +264 -0
- package/docs/user-guides/DTX_SETUP.md +327 -0
- package/docs/user-guides/NPM_SETUP.md +109 -0
- package/docs/user-guides/NPX_SETUP.md +281 -0
- package/docs/wordpress-rest-api-authentication-troubleshooting.md +13 -2
- package/package.json +27 -8
- package/src/cache/CacheInvalidation.ts +140 -132
- package/src/cache/CacheManager.ts +40 -29
- package/src/cache/HttpCacheWrapper.ts +105 -68
- package/src/cache/__tests__/CacheInvalidation.test.ts +123 -118
- package/src/cache/__tests__/CacheManager.test.ts +156 -152
- package/src/cache/__tests__/CachedWordPressClient.test.ts +131 -116
- package/src/cache/__tests__/HttpCacheWrapper.test.ts +118 -115
- package/src/cache/index.ts +13 -13
- package/src/client/CachedWordPressClient.ts +90 -80
- package/src/client/api.ts +205 -205
- package/src/client/auth.ts +80 -80
- package/src/client/managers/AuthenticationManager.ts +61 -61
- package/src/client/managers/BaseManager.ts +11 -11
- package/src/client/managers/RequestManager.ts +79 -47
- package/src/client/managers/index.ts +3 -3
- package/src/config/ConfigurationSchema.ts +44 -44
- package/src/config/ServerConfiguration.ts +39 -39
- package/src/docs/DocumentationGenerator.ts +402 -295
- package/src/docs/MarkdownFormatter.ts +94 -69
- package/src/docs/index.ts +4 -4
- package/src/index.ts +24 -21
- package/src/performance/MetricsCollector.ts +90 -58
- package/src/performance/PerformanceAnalytics.ts +386 -262
- package/src/performance/PerformanceMonitor.ts +152 -118
- package/src/performance/index.ts +9 -9
- package/src/security/InputValidator.ts +148 -91
- package/src/security/SecurityConfig.ts +94 -94
- package/src/server/ConnectionTester.ts +21 -15
- package/src/server/ToolRegistry.ts +64 -51
- package/src/server.ts +2 -2
- package/src/tools/BaseToolManager.ts +6 -6
- package/src/tools/auth.ts +42 -37
- package/src/tools/cache.ts +85 -81
- package/src/tools/comments.ts +93 -91
- package/src/tools/index.ts +10 -10
- package/src/tools/media.ts +89 -89
- package/src/tools/pages.ts +89 -87
- package/src/tools/performance.ts +443 -352
- package/src/tools/posts.ts +109 -107
- package/src/tools/site.ts +86 -77
- package/src/tools/taxonomies.ts +102 -102
- package/src/tools/users.ts +77 -77
- package/src/types/client.ts +157 -60
- package/src/types/index.ts +49 -27
- package/src/types/mcp.ts +15 -15
- package/src/types/wordpress.ts +57 -29
- package/src/utils/debug.ts +37 -37
- package/src/utils/error.ts +47 -25
- package/src/utils/toolWrapper.ts +12 -8
- package/src/utils/validation.ts +116 -65
- package/dist/client/WordPressClient.d.ts +0 -81
- package/dist/client/WordPressClient.d.ts.map +0 -1
- package/dist/client/WordPressClient.js +0 -354
- package/dist/client/WordPressClient.js.map +0 -1
- package/dist/performance/AnomalyDetector.d.ts +0 -63
- package/dist/performance/AnomalyDetector.d.ts.map +0 -1
- package/dist/performance/AnomalyDetector.js +0 -222
- package/dist/performance/AnomalyDetector.js.map +0 -1
- package/dist/performance/BenchmarkAnalyzer.d.ts +0 -67
- package/dist/performance/BenchmarkAnalyzer.d.ts.map +0 -1
- package/dist/performance/BenchmarkAnalyzer.js +0 -301
- package/dist/performance/BenchmarkAnalyzer.js.map +0 -1
- package/dist/performance/TrendAnalyzer.d.ts +0 -69
- package/dist/performance/TrendAnalyzer.d.ts.map +0 -1
- package/dist/performance/TrendAnalyzer.js +0 -203
- package/dist/performance/TrendAnalyzer.js.map +0 -1
- package/dist/tools/BaseToolClass.d.ts +0 -76
- package/dist/tools/BaseToolClass.d.ts.map +0 -1
- package/dist/tools/BaseToolClass.js +0 -104
- package/dist/tools/BaseToolClass.js.map +0 -1
- package/dist/tools/base.d.ts +0 -37
- package/dist/tools/base.d.ts.map +0 -1
- package/dist/tools/base.js +0 -60
- package/dist/tools/base.js.map +0 -1
- package/docs/user-guides/CLAUDE_DESKTOP_SETUP.md +0 -187
|
@@ -18,7 +18,7 @@ export interface PerformanceMetrics {
|
|
|
18
18
|
p99ResponseTime: number;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
// Cache Performance
|
|
21
|
+
// Cache Performance
|
|
22
22
|
cache: {
|
|
23
23
|
hits: number;
|
|
24
24
|
misses: number;
|
|
@@ -42,7 +42,7 @@ export interface PerformanceMetrics {
|
|
|
42
42
|
wordpress: {
|
|
43
43
|
authSuccessRate: number;
|
|
44
44
|
apiVersion: string;
|
|
45
|
-
siteHealth:
|
|
45
|
+
siteHealth: "healthy" | "warning" | "critical";
|
|
46
46
|
averageDbResponseTime: number;
|
|
47
47
|
pluginCompatibility: number;
|
|
48
48
|
};
|
|
@@ -51,19 +51,22 @@ export interface PerformanceMetrics {
|
|
|
51
51
|
tools: {
|
|
52
52
|
mostUsedTool: string;
|
|
53
53
|
toolUsageCount: Record<string, number>;
|
|
54
|
-
toolPerformance: Record<
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
toolPerformance: Record<
|
|
55
|
+
string,
|
|
56
|
+
{
|
|
57
|
+
averageTime: number;
|
|
58
|
+
successRate: number;
|
|
59
|
+
callCount: number;
|
|
60
|
+
}
|
|
61
|
+
>;
|
|
59
62
|
};
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
export interface PerformanceAlert {
|
|
63
66
|
id: string;
|
|
64
67
|
timestamp: number;
|
|
65
|
-
severity:
|
|
66
|
-
category:
|
|
68
|
+
severity: "info" | "warning" | "error" | "critical";
|
|
69
|
+
category: "performance" | "cache" | "system" | "wordpress";
|
|
67
70
|
message: string;
|
|
68
71
|
metric: string;
|
|
69
72
|
threshold: number;
|
|
@@ -108,16 +111,16 @@ export class PerformanceMonitor {
|
|
|
108
111
|
errorRate: 0.05, // 5%
|
|
109
112
|
cacheHitRate: 0.8, // 80%
|
|
110
113
|
memoryUsage: 80, // 80%
|
|
111
|
-
cpuUsage: 80 // 80%
|
|
114
|
+
cpuUsage: 80, // 80%
|
|
112
115
|
},
|
|
113
116
|
enableRealTimeMonitoring: true,
|
|
114
117
|
enableHistoricalData: true,
|
|
115
118
|
enableAlerts: true,
|
|
116
|
-
...config
|
|
119
|
+
...config,
|
|
117
120
|
};
|
|
118
121
|
|
|
119
122
|
this.metrics = this.initializeMetrics();
|
|
120
|
-
|
|
123
|
+
|
|
121
124
|
if (this.config.enableRealTimeMonitoring) {
|
|
122
125
|
this.startCollection();
|
|
123
126
|
}
|
|
@@ -138,7 +141,7 @@ export class PerformanceMonitor {
|
|
|
138
141
|
requestsPerSecond: 0,
|
|
139
142
|
p50ResponseTime: 0,
|
|
140
143
|
p95ResponseTime: 0,
|
|
141
|
-
p99ResponseTime: 0
|
|
144
|
+
p99ResponseTime: 0,
|
|
142
145
|
},
|
|
143
146
|
cache: {
|
|
144
147
|
hits: 0,
|
|
@@ -147,36 +150,40 @@ export class PerformanceMonitor {
|
|
|
147
150
|
totalSize: 0,
|
|
148
151
|
memoryUsageMB: 0,
|
|
149
152
|
evictions: 0,
|
|
150
|
-
averageCacheTime: 0
|
|
153
|
+
averageCacheTime: 0,
|
|
151
154
|
},
|
|
152
155
|
system: {
|
|
153
156
|
cpuUsage: 0,
|
|
154
157
|
memoryUsage: 0,
|
|
155
158
|
uptime: 0,
|
|
156
159
|
activeConnections: 0,
|
|
157
|
-
concurrentRequests: 0
|
|
160
|
+
concurrentRequests: 0,
|
|
158
161
|
},
|
|
159
162
|
wordpress: {
|
|
160
163
|
authSuccessRate: 0,
|
|
161
|
-
apiVersion:
|
|
162
|
-
siteHealth:
|
|
164
|
+
apiVersion: "v2",
|
|
165
|
+
siteHealth: "healthy",
|
|
163
166
|
averageDbResponseTime: 0,
|
|
164
|
-
pluginCompatibility: 100
|
|
167
|
+
pluginCompatibility: 100,
|
|
165
168
|
},
|
|
166
169
|
tools: {
|
|
167
|
-
mostUsedTool:
|
|
170
|
+
mostUsedTool: "",
|
|
168
171
|
toolUsageCount: {},
|
|
169
|
-
toolPerformance: {}
|
|
170
|
-
}
|
|
172
|
+
toolPerformance: {},
|
|
173
|
+
},
|
|
171
174
|
};
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
/**
|
|
175
178
|
* Record a request performance metric
|
|
176
179
|
*/
|
|
177
|
-
recordRequest(
|
|
180
|
+
recordRequest(
|
|
181
|
+
responseTime: number,
|
|
182
|
+
success: boolean,
|
|
183
|
+
toolName?: string,
|
|
184
|
+
): void {
|
|
178
185
|
this.metrics.requests.total++;
|
|
179
|
-
|
|
186
|
+
|
|
180
187
|
if (success) {
|
|
181
188
|
this.metrics.requests.successful++;
|
|
182
189
|
} else {
|
|
@@ -209,7 +216,7 @@ export class PerformanceMonitor {
|
|
|
209
216
|
totalSize: cacheStats.totalSize || 0,
|
|
210
217
|
memoryUsageMB: this.estimateCacheMemoryUsage(cacheStats.totalSize),
|
|
211
218
|
evictions: cacheStats.evictions || 0,
|
|
212
|
-
averageCacheTime: 0.5 // Sub-millisecond average
|
|
219
|
+
averageCacheTime: 0.5, // Sub-millisecond average
|
|
213
220
|
};
|
|
214
221
|
}
|
|
215
222
|
|
|
@@ -218,13 +225,13 @@ export class PerformanceMonitor {
|
|
|
218
225
|
*/
|
|
219
226
|
updateSystemMetrics(): void {
|
|
220
227
|
const memUsage = process.memoryUsage();
|
|
221
|
-
|
|
228
|
+
|
|
222
229
|
this.metrics.system = {
|
|
223
230
|
cpuUsage: this.getCpuUsage(),
|
|
224
231
|
memoryUsage: Math.round((memUsage.heapUsed / memUsage.heapTotal) * 100),
|
|
225
232
|
uptime: Date.now() - this.startTime,
|
|
226
233
|
activeConnections: 1, // Will be updated by connection manager
|
|
227
|
-
concurrentRequests: 0 // Will be updated by request manager
|
|
234
|
+
concurrentRequests: 0, // Will be updated by request manager
|
|
228
235
|
};
|
|
229
236
|
}
|
|
230
237
|
|
|
@@ -240,23 +247,23 @@ export class PerformanceMonitor {
|
|
|
240
247
|
* Get historical performance data
|
|
241
248
|
*/
|
|
242
249
|
getHistoricalData(
|
|
243
|
-
startTime?: number,
|
|
244
|
-
endTime?: number
|
|
250
|
+
startTime?: number,
|
|
251
|
+
endTime?: number,
|
|
245
252
|
): PerformanceMetrics[] {
|
|
246
253
|
if (!this.config.enableHistoricalData) {
|
|
247
254
|
return [];
|
|
248
255
|
}
|
|
249
256
|
|
|
250
257
|
let data = [...this.historicalData];
|
|
251
|
-
|
|
258
|
+
|
|
252
259
|
if (startTime) {
|
|
253
|
-
data = data.filter(m => m.system.uptime >= startTime);
|
|
260
|
+
data = data.filter((m) => m.system.uptime >= startTime);
|
|
254
261
|
}
|
|
255
|
-
|
|
262
|
+
|
|
256
263
|
if (endTime) {
|
|
257
|
-
data = data.filter(m => m.system.uptime <= endTime);
|
|
264
|
+
data = data.filter((m) => m.system.uptime <= endTime);
|
|
258
265
|
}
|
|
259
|
-
|
|
266
|
+
|
|
260
267
|
return data;
|
|
261
268
|
}
|
|
262
269
|
|
|
@@ -265,7 +272,7 @@ export class PerformanceMonitor {
|
|
|
265
272
|
*/
|
|
266
273
|
getAlerts(severity?: string): PerformanceAlert[] {
|
|
267
274
|
if (severity) {
|
|
268
|
-
return this.alerts.filter(alert => alert.severity === severity);
|
|
275
|
+
return this.alerts.filter((alert) => alert.severity === severity);
|
|
269
276
|
}
|
|
270
277
|
return [...this.alerts];
|
|
271
278
|
}
|
|
@@ -284,35 +291,35 @@ export class PerformanceMonitor {
|
|
|
284
291
|
summary: string;
|
|
285
292
|
recommendations: string[];
|
|
286
293
|
trends: string[];
|
|
287
|
-
health:
|
|
294
|
+
health: "excellent" | "good" | "warning" | "critical";
|
|
288
295
|
} {
|
|
289
296
|
const current = this.getMetrics();
|
|
290
297
|
const health = this.calculateOverallHealth(current);
|
|
291
|
-
|
|
298
|
+
|
|
292
299
|
return {
|
|
293
300
|
summary: this.generateSummary(current),
|
|
294
301
|
recommendations: this.generateRecommendations(current),
|
|
295
302
|
trends: this.generateTrends(),
|
|
296
|
-
health
|
|
303
|
+
health,
|
|
297
304
|
};
|
|
298
305
|
}
|
|
299
306
|
|
|
300
307
|
/**
|
|
301
308
|
* Export performance data
|
|
302
309
|
*/
|
|
303
|
-
exportData(format:
|
|
310
|
+
exportData(format: "json" | "csv" = "json"): string {
|
|
304
311
|
const data = {
|
|
305
312
|
currentMetrics: this.getMetrics(),
|
|
306
313
|
historicalData: this.getHistoricalData(),
|
|
307
314
|
alerts: this.getAlerts(),
|
|
308
315
|
config: this.config,
|
|
309
|
-
generatedAt: new Date().toISOString()
|
|
316
|
+
generatedAt: new Date().toISOString(),
|
|
310
317
|
};
|
|
311
318
|
|
|
312
|
-
if (format ===
|
|
319
|
+
if (format === "csv") {
|
|
313
320
|
return this.convertToCSV(data);
|
|
314
321
|
}
|
|
315
|
-
|
|
322
|
+
|
|
316
323
|
return JSON.stringify(data, null, 2);
|
|
317
324
|
}
|
|
318
325
|
|
|
@@ -322,7 +329,7 @@ export class PerformanceMonitor {
|
|
|
322
329
|
private startCollection(): void {
|
|
323
330
|
this.collectionTimer = setInterval(() => {
|
|
324
331
|
const snapshot = this.getMetrics();
|
|
325
|
-
|
|
332
|
+
|
|
326
333
|
if (this.config.enableHistoricalData) {
|
|
327
334
|
this.historicalData.push(snapshot);
|
|
328
335
|
this.cleanupOldData();
|
|
@@ -342,9 +349,13 @@ export class PerformanceMonitor {
|
|
|
342
349
|
/**
|
|
343
350
|
* Record tool usage and performance
|
|
344
351
|
*/
|
|
345
|
-
private recordToolUsage(
|
|
352
|
+
private recordToolUsage(
|
|
353
|
+
toolName: string,
|
|
354
|
+
responseTime: number,
|
|
355
|
+
success: boolean,
|
|
356
|
+
): void {
|
|
346
357
|
// Update usage count
|
|
347
|
-
this.metrics.tools.toolUsageCount[toolName] =
|
|
358
|
+
this.metrics.tools.toolUsageCount[toolName] =
|
|
348
359
|
(this.metrics.tools.toolUsageCount[toolName] || 0) + 1;
|
|
349
360
|
|
|
350
361
|
// Update performance metrics
|
|
@@ -352,26 +363,29 @@ export class PerformanceMonitor {
|
|
|
352
363
|
this.metrics.tools.toolPerformance[toolName] = {
|
|
353
364
|
averageTime: responseTime,
|
|
354
365
|
successRate: success ? 1 : 0,
|
|
355
|
-
callCount: 1
|
|
366
|
+
callCount: 1,
|
|
356
367
|
};
|
|
357
368
|
} else {
|
|
358
369
|
const perf = this.metrics.tools.toolPerformance[toolName];
|
|
359
370
|
const totalCalls = perf.callCount + 1;
|
|
360
|
-
|
|
371
|
+
|
|
361
372
|
// Update average time
|
|
362
|
-
perf.averageTime =
|
|
363
|
-
|
|
373
|
+
perf.averageTime =
|
|
374
|
+
(perf.averageTime * perf.callCount + responseTime) / totalCalls;
|
|
375
|
+
|
|
364
376
|
// Update success rate
|
|
365
|
-
const totalSuccess =
|
|
377
|
+
const totalSuccess =
|
|
378
|
+
perf.successRate * perf.callCount + (success ? 1 : 0);
|
|
366
379
|
perf.successRate = totalSuccess / totalCalls;
|
|
367
|
-
|
|
380
|
+
|
|
368
381
|
perf.callCount = totalCalls;
|
|
369
382
|
}
|
|
370
383
|
|
|
371
384
|
// Update most used tool
|
|
372
385
|
const usageCounts = this.metrics.tools.toolUsageCount;
|
|
373
|
-
this.metrics.tools.mostUsedTool = Object.keys(usageCounts)
|
|
374
|
-
|
|
386
|
+
this.metrics.tools.mostUsedTool = Object.keys(usageCounts).reduce((a, b) =>
|
|
387
|
+
usageCounts[a] > usageCounts[b] ? a : b,
|
|
388
|
+
);
|
|
375
389
|
}
|
|
376
390
|
|
|
377
391
|
/**
|
|
@@ -382,22 +396,23 @@ export class PerformanceMonitor {
|
|
|
382
396
|
|
|
383
397
|
const sorted = [...this.responseTimes].sort((a, b) => a - b);
|
|
384
398
|
const total = this.metrics.requests.total;
|
|
385
|
-
|
|
386
|
-
this.metrics.requests.averageResponseTime =
|
|
387
|
-
this.responseTimes.reduce((sum, time) => sum + time, 0) /
|
|
388
|
-
|
|
399
|
+
|
|
400
|
+
this.metrics.requests.averageResponseTime =
|
|
401
|
+
this.responseTimes.reduce((sum, time) => sum + time, 0) /
|
|
402
|
+
this.responseTimes.length;
|
|
403
|
+
|
|
389
404
|
this.metrics.requests.minResponseTime = sorted[0];
|
|
390
405
|
this.metrics.requests.maxResponseTime = sorted[sorted.length - 1];
|
|
391
|
-
|
|
406
|
+
|
|
392
407
|
// Calculate percentiles
|
|
393
408
|
this.metrics.requests.p50ResponseTime = this.getPercentile(sorted, 0.5);
|
|
394
409
|
this.metrics.requests.p95ResponseTime = this.getPercentile(sorted, 0.95);
|
|
395
410
|
this.metrics.requests.p99ResponseTime = this.getPercentile(sorted, 0.99);
|
|
396
|
-
|
|
411
|
+
|
|
397
412
|
// Calculate requests per second
|
|
398
413
|
const uptime = (Date.now() - this.startTime) / 1000;
|
|
399
414
|
this.metrics.requests.requestsPerSecond = total / uptime;
|
|
400
|
-
|
|
415
|
+
|
|
401
416
|
// Limit response time history to prevent memory growth
|
|
402
417
|
if (this.responseTimes.length > 10000) {
|
|
403
418
|
this.responseTimes = this.responseTimes.slice(-5000);
|
|
@@ -434,33 +449,45 @@ export class PerformanceMonitor {
|
|
|
434
449
|
*/
|
|
435
450
|
private checkPerformanceAlerts(): void {
|
|
436
451
|
const thresholds = this.config.alertThresholds;
|
|
437
|
-
|
|
452
|
+
|
|
438
453
|
// Response time alert
|
|
439
454
|
if (this.metrics.requests.averageResponseTime > thresholds.responseTime) {
|
|
440
|
-
this.addAlert(
|
|
455
|
+
this.addAlert(
|
|
456
|
+
"warning",
|
|
457
|
+
"performance",
|
|
441
458
|
`High response time: ${this.metrics.requests.averageResponseTime}ms`,
|
|
442
|
-
|
|
459
|
+
"averageResponseTime",
|
|
460
|
+
thresholds.responseTime,
|
|
443
461
|
this.metrics.requests.averageResponseTime,
|
|
444
|
-
|
|
462
|
+
"Consider enabling caching or optimizing queries",
|
|
445
463
|
);
|
|
446
464
|
}
|
|
447
465
|
|
|
448
466
|
// Error rate alert
|
|
449
|
-
const errorRate =
|
|
467
|
+
const errorRate =
|
|
468
|
+
this.metrics.requests.failed / this.metrics.requests.total;
|
|
450
469
|
if (errorRate > thresholds.errorRate) {
|
|
451
|
-
this.addAlert(
|
|
470
|
+
this.addAlert(
|
|
471
|
+
"error",
|
|
472
|
+
"performance",
|
|
452
473
|
`High error rate: ${Math.round(errorRate * 100)}%`,
|
|
453
|
-
|
|
454
|
-
|
|
474
|
+
"errorRate",
|
|
475
|
+
thresholds.errorRate,
|
|
476
|
+
errorRate,
|
|
477
|
+
"Check WordPress connectivity and authentication",
|
|
455
478
|
);
|
|
456
479
|
}
|
|
457
480
|
|
|
458
481
|
// Cache hit rate alert
|
|
459
482
|
if (this.metrics.cache.hitRate < thresholds.cacheHitRate) {
|
|
460
|
-
this.addAlert(
|
|
483
|
+
this.addAlert(
|
|
484
|
+
"warning",
|
|
485
|
+
"cache",
|
|
461
486
|
`Low cache hit rate: ${Math.round(this.metrics.cache.hitRate * 100)}%`,
|
|
462
|
-
|
|
463
|
-
|
|
487
|
+
"cacheHitRate",
|
|
488
|
+
thresholds.cacheHitRate,
|
|
489
|
+
this.metrics.cache.hitRate,
|
|
490
|
+
"Consider cache warming or adjusting TTL values",
|
|
464
491
|
);
|
|
465
492
|
}
|
|
466
493
|
}
|
|
@@ -469,13 +496,13 @@ export class PerformanceMonitor {
|
|
|
469
496
|
* Add performance alert
|
|
470
497
|
*/
|
|
471
498
|
private addAlert(
|
|
472
|
-
severity:
|
|
473
|
-
category:
|
|
499
|
+
severity: "info" | "warning" | "error" | "critical",
|
|
500
|
+
category: "performance" | "cache" | "system" | "wordpress",
|
|
474
501
|
message: string,
|
|
475
502
|
metric: string,
|
|
476
503
|
threshold: number,
|
|
477
504
|
actualValue: number,
|
|
478
|
-
suggestion?: string
|
|
505
|
+
suggestion?: string,
|
|
479
506
|
): void {
|
|
480
507
|
const alert: PerformanceAlert = {
|
|
481
508
|
id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
@@ -486,11 +513,11 @@ export class PerformanceMonitor {
|
|
|
486
513
|
metric,
|
|
487
514
|
threshold,
|
|
488
515
|
actualValue,
|
|
489
|
-
...(suggestion && { suggestion })
|
|
516
|
+
...(suggestion && { suggestion }),
|
|
490
517
|
};
|
|
491
518
|
|
|
492
519
|
this.alerts.push(alert);
|
|
493
|
-
|
|
520
|
+
|
|
494
521
|
// Limit alert history
|
|
495
522
|
if (this.alerts.length > 1000) {
|
|
496
523
|
this.alerts = this.alerts.slice(-500);
|
|
@@ -500,44 +527,49 @@ export class PerformanceMonitor {
|
|
|
500
527
|
/**
|
|
501
528
|
* Calculate overall system health
|
|
502
529
|
*/
|
|
503
|
-
private calculateOverallHealth(
|
|
530
|
+
private calculateOverallHealth(
|
|
531
|
+
metrics: PerformanceMetrics,
|
|
532
|
+
): "excellent" | "good" | "warning" | "critical" {
|
|
504
533
|
let score = 100;
|
|
505
|
-
|
|
534
|
+
|
|
506
535
|
// Response time impact
|
|
507
536
|
if (metrics.requests.averageResponseTime > 3000) score -= 30;
|
|
508
537
|
else if (metrics.requests.averageResponseTime > 1000) score -= 15;
|
|
509
|
-
|
|
538
|
+
|
|
510
539
|
// Error rate impact
|
|
511
540
|
const errorRate = metrics.requests.failed / metrics.requests.total;
|
|
512
541
|
if (errorRate > 0.1) score -= 40;
|
|
513
542
|
else if (errorRate > 0.05) score -= 20;
|
|
514
|
-
|
|
543
|
+
|
|
515
544
|
// Cache performance impact
|
|
516
545
|
if (metrics.cache.hitRate < 0.5) score -= 25;
|
|
517
546
|
else if (metrics.cache.hitRate < 0.8) score -= 10;
|
|
518
|
-
|
|
547
|
+
|
|
519
548
|
// System resource impact
|
|
520
549
|
if (metrics.system.memoryUsage > 90) score -= 20;
|
|
521
550
|
else if (metrics.system.memoryUsage > 80) score -= 10;
|
|
522
|
-
|
|
523
|
-
if (score >= 90) return
|
|
524
|
-
if (score >= 75) return
|
|
525
|
-
if (score >= 50) return
|
|
526
|
-
return
|
|
551
|
+
|
|
552
|
+
if (score >= 90) return "excellent";
|
|
553
|
+
if (score >= 75) return "good";
|
|
554
|
+
if (score >= 50) return "warning";
|
|
555
|
+
return "critical";
|
|
527
556
|
}
|
|
528
557
|
|
|
529
558
|
/**
|
|
530
559
|
* Generate performance summary
|
|
531
560
|
*/
|
|
532
561
|
private generateSummary(metrics: PerformanceMetrics): string {
|
|
533
|
-
const errorRate =
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
562
|
+
const errorRate =
|
|
563
|
+
metrics.requests.total > 0
|
|
564
|
+
? ((metrics.requests.failed / metrics.requests.total) * 100).toFixed(1)
|
|
565
|
+
: "0";
|
|
566
|
+
|
|
567
|
+
return (
|
|
568
|
+
`Performance Summary: ${metrics.requests.total} requests processed with ${errorRate}% error rate. ` +
|
|
569
|
+
`Average response time: ${metrics.requests.averageResponseTime.toFixed(0)}ms. ` +
|
|
570
|
+
`Cache hit rate: ${(metrics.cache.hitRate * 100).toFixed(1)}%. ` +
|
|
571
|
+
`System uptime: ${Math.round(metrics.system.uptime / 1000 / 60)} minutes.`
|
|
572
|
+
);
|
|
541
573
|
}
|
|
542
574
|
|
|
543
575
|
/**
|
|
@@ -545,24 +577,26 @@ export class PerformanceMonitor {
|
|
|
545
577
|
*/
|
|
546
578
|
private generateRecommendations(metrics: PerformanceMetrics): string[] {
|
|
547
579
|
const recommendations: string[] = [];
|
|
548
|
-
|
|
580
|
+
|
|
549
581
|
if (metrics.requests.averageResponseTime > 1000) {
|
|
550
|
-
recommendations.push(
|
|
582
|
+
recommendations.push("Enable caching to reduce response times");
|
|
551
583
|
}
|
|
552
|
-
|
|
584
|
+
|
|
553
585
|
if (metrics.cache.hitRate < 0.8) {
|
|
554
|
-
recommendations.push(
|
|
586
|
+
recommendations.push("Warm cache with frequently accessed data");
|
|
555
587
|
}
|
|
556
|
-
|
|
588
|
+
|
|
557
589
|
if (metrics.system.memoryUsage > 80) {
|
|
558
|
-
recommendations.push(
|
|
590
|
+
recommendations.push(
|
|
591
|
+
"Consider increasing memory allocation or cache size limits",
|
|
592
|
+
);
|
|
559
593
|
}
|
|
560
|
-
|
|
594
|
+
|
|
561
595
|
const errorRate = metrics.requests.failed / metrics.requests.total;
|
|
562
596
|
if (errorRate > 0.05) {
|
|
563
|
-
recommendations.push(
|
|
597
|
+
recommendations.push("Review error logs and improve error handling");
|
|
564
598
|
}
|
|
565
|
-
|
|
599
|
+
|
|
566
600
|
return recommendations;
|
|
567
601
|
}
|
|
568
602
|
|
|
@@ -571,28 +605,28 @@ export class PerformanceMonitor {
|
|
|
571
605
|
*/
|
|
572
606
|
private generateTrends(): string[] {
|
|
573
607
|
if (this.historicalData.length < 2) {
|
|
574
|
-
return [
|
|
608
|
+
return ["Insufficient data for trend analysis"];
|
|
575
609
|
}
|
|
576
|
-
|
|
610
|
+
|
|
577
611
|
const trends: string[] = [];
|
|
578
612
|
const recent = this.historicalData.slice(-5);
|
|
579
|
-
|
|
613
|
+
|
|
580
614
|
// Response time trend
|
|
581
|
-
const responseTimes = recent.map(d => d.requests.averageResponseTime);
|
|
615
|
+
const responseTimes = recent.map((d) => d.requests.averageResponseTime);
|
|
582
616
|
if (this.isIncreasing(responseTimes)) {
|
|
583
|
-
trends.push(
|
|
617
|
+
trends.push("Response times are increasing");
|
|
584
618
|
} else if (this.isDecreasing(responseTimes)) {
|
|
585
|
-
trends.push(
|
|
619
|
+
trends.push("Response times are improving");
|
|
586
620
|
}
|
|
587
|
-
|
|
621
|
+
|
|
588
622
|
// Cache hit rate trend
|
|
589
|
-
const hitRates = recent.map(d => d.cache.hitRate);
|
|
623
|
+
const hitRates = recent.map((d) => d.cache.hitRate);
|
|
590
624
|
if (this.isIncreasing(hitRates)) {
|
|
591
|
-
trends.push(
|
|
625
|
+
trends.push("Cache performance is improving");
|
|
592
626
|
} else if (this.isDecreasing(hitRates)) {
|
|
593
|
-
trends.push(
|
|
627
|
+
trends.push("Cache performance is declining");
|
|
594
628
|
}
|
|
595
|
-
|
|
629
|
+
|
|
596
630
|
return trends;
|
|
597
631
|
}
|
|
598
632
|
|
|
@@ -623,7 +657,7 @@ export class PerformanceMonitor {
|
|
|
623
657
|
// Simplified CSV conversion for metrics
|
|
624
658
|
const metrics = data.currentMetrics;
|
|
625
659
|
const csv = [
|
|
626
|
-
|
|
660
|
+
"Metric,Value",
|
|
627
661
|
`Total Requests,${metrics.requests.total}`,
|
|
628
662
|
`Successful Requests,${metrics.requests.successful}`,
|
|
629
663
|
`Failed Requests,${metrics.requests.failed}`,
|
|
@@ -631,10 +665,10 @@ export class PerformanceMonitor {
|
|
|
631
665
|
`Cache Hit Rate,${metrics.cache.hitRate}`,
|
|
632
666
|
`Cache Size,${metrics.cache.totalSize}`,
|
|
633
667
|
`Memory Usage,${metrics.system.memoryUsage}%`,
|
|
634
|
-
`Uptime,${metrics.system.uptime}ms
|
|
668
|
+
`Uptime,${metrics.system.uptime}ms`,
|
|
635
669
|
];
|
|
636
|
-
|
|
637
|
-
return csv.join(
|
|
670
|
+
|
|
671
|
+
return csv.join("\n");
|
|
638
672
|
}
|
|
639
673
|
|
|
640
674
|
/**
|
|
@@ -643,7 +677,7 @@ export class PerformanceMonitor {
|
|
|
643
677
|
private cleanupOldData(): void {
|
|
644
678
|
const cutoff = Date.now() - this.config.retentionPeriod;
|
|
645
679
|
this.historicalData = this.historicalData.filter(
|
|
646
|
-
data => data.system.uptime > cutoff
|
|
680
|
+
(data) => data.system.uptime > cutoff,
|
|
647
681
|
);
|
|
648
682
|
}
|
|
649
683
|
}
|
package/src/performance/index.ts
CHANGED
|
@@ -3,26 +3,26 @@
|
|
|
3
3
|
* Central export point for all performance monitoring components
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
export { PerformanceMonitor } from
|
|
7
|
-
export { MetricsCollector } from
|
|
8
|
-
export { PerformanceAnalytics } from
|
|
6
|
+
export { PerformanceMonitor } from "./PerformanceMonitor.js";
|
|
7
|
+
export { MetricsCollector } from "./MetricsCollector.js";
|
|
8
|
+
export { PerformanceAnalytics } from "./PerformanceAnalytics.js";
|
|
9
9
|
|
|
10
10
|
export type {
|
|
11
11
|
PerformanceMetrics,
|
|
12
12
|
PerformanceAlert,
|
|
13
|
-
PerformanceConfig
|
|
14
|
-
} from
|
|
13
|
+
PerformanceConfig,
|
|
14
|
+
} from "./PerformanceMonitor.js";
|
|
15
15
|
|
|
16
16
|
export type {
|
|
17
17
|
CollectorConfig,
|
|
18
18
|
RequestMetadata,
|
|
19
|
-
ToolExecutionContext
|
|
20
|
-
} from
|
|
19
|
+
ToolExecutionContext,
|
|
20
|
+
} from "./MetricsCollector.js";
|
|
21
21
|
|
|
22
22
|
export type {
|
|
23
23
|
AnalyticsConfig,
|
|
24
24
|
PerformanceTrend,
|
|
25
25
|
PerformanceAnomaly,
|
|
26
26
|
PerformanceInsight,
|
|
27
|
-
BenchmarkComparison
|
|
28
|
-
} from
|
|
27
|
+
BenchmarkComparison,
|
|
28
|
+
} from "./PerformanceAnalytics.js";
|