mcp-wordpress 1.1.7 → 1.2.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.
Files changed (255) hide show
  1. package/README.md +388 -66
  2. package/dist/cache/CacheInvalidation.d.ts +118 -0
  3. package/dist/cache/CacheInvalidation.d.ts.map +1 -0
  4. package/dist/cache/CacheInvalidation.js +349 -0
  5. package/dist/cache/CacheInvalidation.js.map +1 -0
  6. package/dist/cache/CacheManager.d.ts +143 -0
  7. package/dist/cache/CacheManager.d.ts.map +1 -0
  8. package/dist/cache/CacheManager.js +308 -0
  9. package/dist/cache/CacheManager.js.map +1 -0
  10. package/dist/cache/HttpCacheWrapper.d.ts +121 -0
  11. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -0
  12. package/dist/cache/HttpCacheWrapper.js +280 -0
  13. package/dist/cache/HttpCacheWrapper.js.map +1 -0
  14. package/dist/cache/__tests__/CacheInvalidation.test.d.ts +5 -0
  15. package/dist/cache/__tests__/CacheInvalidation.test.d.ts.map +1 -0
  16. package/dist/cache/__tests__/CacheInvalidation.test.js +236 -0
  17. package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -0
  18. package/dist/cache/__tests__/CacheManager.test.d.ts +5 -0
  19. package/dist/cache/__tests__/CacheManager.test.d.ts.map +1 -0
  20. package/dist/cache/__tests__/CacheManager.test.js +233 -0
  21. package/dist/cache/__tests__/CacheManager.test.js.map +1 -0
  22. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts +5 -0
  23. package/dist/cache/__tests__/CachedWordPressClient.test.d.ts.map +1 -0
  24. package/dist/cache/__tests__/CachedWordPressClient.test.js +228 -0
  25. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -0
  26. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts +5 -0
  27. package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts.map +1 -0
  28. package/dist/cache/__tests__/HttpCacheWrapper.test.js +296 -0
  29. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -0
  30. package/dist/cache/index.d.ts +12 -0
  31. package/dist/cache/index.d.ts.map +1 -0
  32. package/dist/cache/index.js +9 -0
  33. package/dist/cache/index.js.map +1 -0
  34. package/dist/client/CachedWordPressClient.d.ts +160 -0
  35. package/dist/client/CachedWordPressClient.d.ts.map +1 -0
  36. package/dist/client/CachedWordPressClient.js +338 -0
  37. package/dist/client/CachedWordPressClient.js.map +1 -0
  38. package/dist/client/WordPressClient.d.ts +81 -0
  39. package/dist/client/WordPressClient.d.ts.map +1 -0
  40. package/dist/client/WordPressClient.js +354 -0
  41. package/dist/client/WordPressClient.js.map +1 -0
  42. package/dist/config/ConfigurationSchema.d.ts +281 -0
  43. package/dist/config/ConfigurationSchema.d.ts.map +1 -0
  44. package/dist/config/ConfigurationSchema.js +205 -0
  45. package/dist/config/ConfigurationSchema.js.map +1 -0
  46. package/dist/config/ServerConfiguration.d.ts +38 -0
  47. package/dist/config/ServerConfiguration.d.ts.map +1 -0
  48. package/dist/config/ServerConfiguration.js +158 -0
  49. package/dist/config/ServerConfiguration.js.map +1 -0
  50. package/dist/docs/DocumentationGenerator.d.ts +184 -0
  51. package/dist/docs/DocumentationGenerator.d.ts.map +1 -0
  52. package/dist/docs/DocumentationGenerator.js +735 -0
  53. package/dist/docs/DocumentationGenerator.js.map +1 -0
  54. package/dist/docs/MarkdownFormatter.d.ts +84 -0
  55. package/dist/docs/MarkdownFormatter.d.ts.map +1 -0
  56. package/dist/docs/MarkdownFormatter.js +448 -0
  57. package/dist/docs/MarkdownFormatter.js.map +1 -0
  58. package/dist/docs/index.d.ts +8 -0
  59. package/dist/docs/index.d.ts.map +1 -0
  60. package/dist/docs/index.js +7 -0
  61. package/dist/docs/index.js.map +1 -0
  62. package/dist/index.d.ts +1 -4
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +12 -212
  65. package/dist/index.js.map +1 -1
  66. package/dist/performance/AnomalyDetector.d.ts +63 -0
  67. package/dist/performance/AnomalyDetector.d.ts.map +1 -0
  68. package/dist/performance/AnomalyDetector.js +222 -0
  69. package/dist/performance/AnomalyDetector.js.map +1 -0
  70. package/dist/performance/BenchmarkAnalyzer.d.ts +67 -0
  71. package/dist/performance/BenchmarkAnalyzer.d.ts.map +1 -0
  72. package/dist/performance/BenchmarkAnalyzer.js +301 -0
  73. package/dist/performance/BenchmarkAnalyzer.js.map +1 -0
  74. package/dist/performance/MetricsCollector.d.ts +139 -0
  75. package/dist/performance/MetricsCollector.d.ts.map +1 -0
  76. package/dist/performance/MetricsCollector.js +320 -0
  77. package/dist/performance/MetricsCollector.js.map +1 -0
  78. package/dist/performance/PerformanceAnalytics.d.ts +162 -0
  79. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -0
  80. package/dist/performance/PerformanceAnalytics.js +554 -0
  81. package/dist/performance/PerformanceAnalytics.js.map +1 -0
  82. package/dist/performance/PerformanceMonitor.d.ts +202 -0
  83. package/dist/performance/PerformanceMonitor.d.ts.map +1 -0
  84. package/dist/performance/PerformanceMonitor.js +478 -0
  85. package/dist/performance/PerformanceMonitor.js.map +1 -0
  86. package/dist/performance/TrendAnalyzer.d.ts +69 -0
  87. package/dist/performance/TrendAnalyzer.d.ts.map +1 -0
  88. package/dist/performance/TrendAnalyzer.js +203 -0
  89. package/dist/performance/TrendAnalyzer.js.map +1 -0
  90. package/dist/performance/index.d.ts +11 -0
  91. package/dist/performance/index.d.ts.map +1 -0
  92. package/dist/performance/index.js +8 -0
  93. package/dist/performance/index.js.map +1 -0
  94. package/dist/security/InputValidator.d.ts +215 -0
  95. package/dist/security/InputValidator.d.ts.map +1 -0
  96. package/dist/security/InputValidator.js +278 -0
  97. package/dist/security/InputValidator.js.map +1 -0
  98. package/dist/security/SecurityConfig.d.ts +129 -0
  99. package/dist/security/SecurityConfig.d.ts.map +1 -0
  100. package/dist/security/SecurityConfig.js +262 -0
  101. package/dist/security/SecurityConfig.js.map +1 -0
  102. package/dist/server/ConnectionTester.d.ts +24 -0
  103. package/dist/server/ConnectionTester.d.ts.map +1 -0
  104. package/dist/server/ConnectionTester.js +61 -0
  105. package/dist/server/ConnectionTester.js.map +1 -0
  106. package/dist/server/ToolRegistry.d.ts +46 -0
  107. package/dist/server/ToolRegistry.d.ts.map +1 -0
  108. package/dist/server/ToolRegistry.js +148 -0
  109. package/dist/server/ToolRegistry.js.map +1 -0
  110. package/dist/tools/BaseToolClass.d.ts +76 -0
  111. package/dist/tools/BaseToolClass.d.ts.map +1 -0
  112. package/dist/tools/BaseToolClass.js +104 -0
  113. package/dist/tools/BaseToolClass.js.map +1 -0
  114. package/dist/tools/BaseToolManager.d.ts +26 -0
  115. package/dist/tools/BaseToolManager.d.ts.map +1 -0
  116. package/dist/tools/BaseToolManager.js +56 -0
  117. package/dist/tools/BaseToolManager.js.map +1 -0
  118. package/dist/tools/base.d.ts +37 -0
  119. package/dist/tools/base.d.ts.map +1 -0
  120. package/dist/tools/base.js +60 -0
  121. package/dist/tools/base.js.map +1 -0
  122. package/dist/tools/cache.d.ts +260 -0
  123. package/dist/tools/cache.d.ts.map +1 -0
  124. package/dist/tools/cache.js +237 -0
  125. package/dist/tools/cache.js.map +1 -0
  126. package/dist/tools/index.d.ts +2 -0
  127. package/dist/tools/index.d.ts.map +1 -1
  128. package/dist/tools/index.js +2 -0
  129. package/dist/tools/index.js.map +1 -1
  130. package/dist/tools/performance.d.ts +63 -0
  131. package/dist/tools/performance.d.ts.map +1 -0
  132. package/dist/tools/performance.js +865 -0
  133. package/dist/tools/performance.js.map +1 -0
  134. package/dist/types/client.d.ts +1 -0
  135. package/dist/types/client.d.ts.map +1 -1
  136. package/dist/types/client.js.map +1 -1
  137. package/dist/utils/toolWrapper.d.ts +4 -0
  138. package/dist/utils/toolWrapper.d.ts.map +1 -1
  139. package/dist/utils/toolWrapper.js +11 -0
  140. package/dist/utils/toolWrapper.js.map +1 -1
  141. package/dist/utils/validation.d.ts +68 -0
  142. package/dist/utils/validation.d.ts.map +1 -0
  143. package/dist/utils/validation.js +185 -0
  144. package/dist/utils/validation.js.map +1 -0
  145. package/docs/CACHING.md +340 -0
  146. package/docs/DOCKER.md +451 -0
  147. package/docs/PERFORMANCE_MONITORING.md +471 -0
  148. package/docs/SECURITY_TESTING.md +393 -0
  149. package/docs/api/README.md +200 -0
  150. package/docs/api/categories/auth.md +40 -0
  151. package/docs/api/categories/cache.md +41 -0
  152. package/docs/api/categories/comment.md +44 -0
  153. package/docs/api/categories/media.md +43 -0
  154. package/docs/api/categories/page.md +43 -0
  155. package/docs/api/categories/performance.md +44 -0
  156. package/docs/api/categories/post.md +43 -0
  157. package/docs/api/categories/site.md +43 -0
  158. package/docs/api/categories/taxonomy.md +47 -0
  159. package/docs/api/categories/user.md +43 -0
  160. package/docs/api/openapi.json +3305 -0
  161. package/docs/api/summary.json +12 -0
  162. package/docs/api/tools/wp_approve_comment.md +98 -0
  163. package/docs/api/tools/wp_cache_clear.md +120 -0
  164. package/docs/api/tools/wp_cache_info.md +119 -0
  165. package/docs/api/tools/wp_cache_stats.md +119 -0
  166. package/docs/api/tools/wp_cache_warm.md +119 -0
  167. package/docs/api/tools/wp_create_application_password.md +102 -0
  168. package/docs/api/tools/wp_create_category.md +102 -0
  169. package/docs/api/tools/wp_create_comment.md +128 -0
  170. package/docs/api/tools/wp_create_page.md +135 -0
  171. package/docs/api/tools/wp_create_post.md +147 -0
  172. package/docs/api/tools/wp_create_tag.md +101 -0
  173. package/docs/api/tools/wp_create_user.md +135 -0
  174. package/docs/api/tools/wp_delete_application_password.md +101 -0
  175. package/docs/api/tools/wp_delete_category.md +100 -0
  176. package/docs/api/tools/wp_delete_comment.md +101 -0
  177. package/docs/api/tools/wp_delete_media.md +108 -0
  178. package/docs/api/tools/wp_delete_page.md +108 -0
  179. package/docs/api/tools/wp_delete_post.md +117 -0
  180. package/docs/api/tools/wp_delete_tag.md +100 -0
  181. package/docs/api/tools/wp_delete_user.md +108 -0
  182. package/docs/api/tools/wp_get_application_passwords.md +103 -0
  183. package/docs/api/tools/wp_get_auth_status.md +101 -0
  184. package/docs/api/tools/wp_get_category.md +103 -0
  185. package/docs/api/tools/wp_get_comment.md +103 -0
  186. package/docs/api/tools/wp_get_current_user.md +101 -0
  187. package/docs/api/tools/wp_get_media.md +103 -0
  188. package/docs/api/tools/wp_get_page.md +103 -0
  189. package/docs/api/tools/wp_get_page_revisions.md +103 -0
  190. package/docs/api/tools/wp_get_post.md +112 -0
  191. package/docs/api/tools/wp_get_post_revisions.md +103 -0
  192. package/docs/api/tools/wp_get_site_settings.md +108 -0
  193. package/docs/api/tools/wp_get_tag.md +103 -0
  194. package/docs/api/tools/wp_get_user.md +103 -0
  195. package/docs/api/tools/wp_list_categories.md +111 -0
  196. package/docs/api/tools/wp_list_comments.md +111 -0
  197. package/docs/api/tools/wp_list_media.md +145 -0
  198. package/docs/api/tools/wp_list_pages.md +145 -0
  199. package/docs/api/tools/wp_list_posts.md +156 -0
  200. package/docs/api/tools/wp_list_tags.md +110 -0
  201. package/docs/api/tools/wp_list_users.md +111 -0
  202. package/docs/api/tools/wp_performance_alerts.md +162 -0
  203. package/docs/api/tools/wp_performance_benchmark.md +160 -0
  204. package/docs/api/tools/wp_performance_export.md +162 -0
  205. package/docs/api/tools/wp_performance_history.md +161 -0
  206. package/docs/api/tools/wp_performance_optimize.md +162 -0
  207. package/docs/api/tools/wp_performance_stats.md +160 -0
  208. package/docs/api/tools/wp_search_site.md +99 -0
  209. package/docs/api/tools/wp_spam_comment.md +98 -0
  210. package/docs/api/tools/wp_switch_auth_method.md +122 -0
  211. package/docs/api/tools/wp_test_auth.md +96 -0
  212. package/docs/api/tools/wp_update_category.md +102 -0
  213. package/docs/api/tools/wp_update_comment.md +127 -0
  214. package/docs/api/tools/wp_update_media.md +129 -0
  215. package/docs/api/tools/wp_update_page.md +135 -0
  216. package/docs/api/tools/wp_update_post.md +144 -0
  217. package/docs/api/tools/wp_update_site_settings.md +127 -0
  218. package/docs/api/tools/wp_update_tag.md +102 -0
  219. package/docs/api/tools/wp_update_user.md +134 -0
  220. package/docs/api/tools/wp_upload_media.md +131 -0
  221. package/docs/api/types/WordPressPost.md +39 -0
  222. package/docs/contract-testing.md +183 -0
  223. package/docs/developer/NPM_AUTH_SETUP.md +3 -3
  224. package/docs/wordpress-rest-api-authentication-troubleshooting.md +218 -0
  225. package/package.json +84 -64
  226. package/src/cache/CacheInvalidation.ts +421 -0
  227. package/src/cache/CacheManager.ts +391 -0
  228. package/src/cache/HttpCacheWrapper.ts +372 -0
  229. package/src/cache/__tests__/CacheInvalidation.test.ts +299 -0
  230. package/src/cache/__tests__/CacheManager.test.ts +300 -0
  231. package/src/cache/__tests__/CachedWordPressClient.test.ts +304 -0
  232. package/src/cache/__tests__/HttpCacheWrapper.test.ts +359 -0
  233. package/src/cache/index.ts +26 -0
  234. package/src/client/CachedWordPressClient.ts +442 -0
  235. package/src/config/ConfigurationSchema.ts +246 -0
  236. package/src/config/ServerConfiguration.ts +215 -0
  237. package/src/docs/DocumentationGenerator.ts +952 -0
  238. package/src/docs/MarkdownFormatter.ts +494 -0
  239. package/src/docs/index.ts +21 -0
  240. package/src/index.ts +14 -274
  241. package/src/performance/MetricsCollector.ts +447 -0
  242. package/src/performance/PerformanceAnalytics.ts +762 -0
  243. package/src/performance/PerformanceMonitor.ts +649 -0
  244. package/src/performance/index.ts +28 -0
  245. package/src/security/InputValidator.ts +319 -0
  246. package/src/security/SecurityConfig.ts +301 -0
  247. package/src/server/ConnectionTester.ts +74 -0
  248. package/src/server/ToolRegistry.ts +194 -0
  249. package/src/tools/BaseToolManager.ts +66 -0
  250. package/src/tools/cache.ts +259 -0
  251. package/src/tools/index.ts +2 -0
  252. package/src/tools/performance.ts +948 -0
  253. package/src/types/client.ts +1 -0
  254. package/src/utils/toolWrapper.ts +11 -0
  255. package/src/utils/validation.ts +259 -0
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Performance Monitoring System for WordPress MCP Server
3
+ * Collects, analyzes, and reports performance metrics
4
+ */
5
+ export interface PerformanceMetrics {
6
+ requests: {
7
+ total: number;
8
+ successful: number;
9
+ failed: number;
10
+ averageResponseTime: number;
11
+ minResponseTime: number;
12
+ maxResponseTime: number;
13
+ requestsPerSecond: number;
14
+ p50ResponseTime: number;
15
+ p95ResponseTime: number;
16
+ p99ResponseTime: number;
17
+ };
18
+ cache: {
19
+ hits: number;
20
+ misses: number;
21
+ hitRate: number;
22
+ totalSize: number;
23
+ memoryUsageMB: number;
24
+ evictions: number;
25
+ averageCacheTime: number;
26
+ };
27
+ system: {
28
+ cpuUsage: number;
29
+ memoryUsage: number;
30
+ uptime: number;
31
+ activeConnections: number;
32
+ concurrentRequests: number;
33
+ };
34
+ wordpress: {
35
+ authSuccessRate: number;
36
+ apiVersion: string;
37
+ siteHealth: 'healthy' | 'warning' | 'critical';
38
+ averageDbResponseTime: number;
39
+ pluginCompatibility: number;
40
+ };
41
+ tools: {
42
+ mostUsedTool: string;
43
+ toolUsageCount: Record<string, number>;
44
+ toolPerformance: Record<string, {
45
+ averageTime: number;
46
+ successRate: number;
47
+ callCount: number;
48
+ }>;
49
+ };
50
+ }
51
+ export interface PerformanceAlert {
52
+ id: string;
53
+ timestamp: number;
54
+ severity: 'info' | 'warning' | 'error' | 'critical';
55
+ category: 'performance' | 'cache' | 'system' | 'wordpress';
56
+ message: string;
57
+ metric: string;
58
+ threshold: number;
59
+ actualValue: number;
60
+ suggestion?: string;
61
+ }
62
+ export interface PerformanceConfig {
63
+ collectInterval: number;
64
+ retentionPeriod: number;
65
+ alertThresholds: {
66
+ responseTime: number;
67
+ errorRate: number;
68
+ cacheHitRate: number;
69
+ memoryUsage: number;
70
+ cpuUsage: number;
71
+ };
72
+ enableRealTimeMonitoring: boolean;
73
+ enableHistoricalData: boolean;
74
+ enableAlerts: boolean;
75
+ }
76
+ /**
77
+ * Core Performance Monitor class
78
+ */
79
+ export declare class PerformanceMonitor {
80
+ private metrics;
81
+ private historicalData;
82
+ private alerts;
83
+ private config;
84
+ private startTime;
85
+ private responseTimes;
86
+ private collectionTimer?;
87
+ constructor(config?: Partial<PerformanceConfig>);
88
+ /**
89
+ * Initialize empty metrics structure
90
+ */
91
+ private initializeMetrics;
92
+ /**
93
+ * Record a request performance metric
94
+ */
95
+ recordRequest(responseTime: number, success: boolean, toolName?: string): void;
96
+ /**
97
+ * Update cache metrics from cache manager
98
+ */
99
+ updateCacheMetrics(cacheStats: any): void;
100
+ /**
101
+ * Update system metrics
102
+ */
103
+ updateSystemMetrics(): void;
104
+ /**
105
+ * Get current performance metrics
106
+ */
107
+ getMetrics(): PerformanceMetrics;
108
+ /**
109
+ * Get historical performance data
110
+ */
111
+ getHistoricalData(startTime?: number, endTime?: number): PerformanceMetrics[];
112
+ /**
113
+ * Get performance alerts
114
+ */
115
+ getAlerts(severity?: string): PerformanceAlert[];
116
+ /**
117
+ * Clear alerts
118
+ */
119
+ clearAlerts(): void;
120
+ /**
121
+ * Generate performance insights
122
+ */
123
+ generateInsights(): {
124
+ summary: string;
125
+ recommendations: string[];
126
+ trends: string[];
127
+ health: 'excellent' | 'good' | 'warning' | 'critical';
128
+ };
129
+ /**
130
+ * Export performance data
131
+ */
132
+ exportData(format?: 'json' | 'csv'): string;
133
+ /**
134
+ * Start automatic metric collection
135
+ */
136
+ private startCollection;
137
+ /**
138
+ * Stop metric collection
139
+ */
140
+ stop(): void;
141
+ /**
142
+ * Record tool usage and performance
143
+ */
144
+ private recordToolUsage;
145
+ /**
146
+ * Update response time metrics with percentiles
147
+ */
148
+ private updateResponseTimeMetrics;
149
+ /**
150
+ * Get percentile value from sorted array
151
+ */
152
+ private getPercentile;
153
+ /**
154
+ * Estimate cache memory usage
155
+ */
156
+ private estimateCacheMemoryUsage;
157
+ /**
158
+ * Get CPU usage (simplified)
159
+ */
160
+ private getCpuUsage;
161
+ /**
162
+ * Check for performance alerts
163
+ */
164
+ private checkPerformanceAlerts;
165
+ /**
166
+ * Add performance alert
167
+ */
168
+ private addAlert;
169
+ /**
170
+ * Calculate overall system health
171
+ */
172
+ private calculateOverallHealth;
173
+ /**
174
+ * Generate performance summary
175
+ */
176
+ private generateSummary;
177
+ /**
178
+ * Generate performance recommendations
179
+ */
180
+ private generateRecommendations;
181
+ /**
182
+ * Generate trend analysis
183
+ */
184
+ private generateTrends;
185
+ /**
186
+ * Check if values are increasing
187
+ */
188
+ private isIncreasing;
189
+ /**
190
+ * Check if values are decreasing
191
+ */
192
+ private isDecreasing;
193
+ /**
194
+ * Convert data to CSV format
195
+ */
196
+ private convertToCSV;
197
+ /**
198
+ * Clean up old historical data
199
+ */
200
+ private cleanupOldData;
201
+ }
202
+ //# sourceMappingURL=PerformanceMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerformanceMonitor.d.ts","sourceRoot":"","sources":["../../src/performance/PerformanceMonitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Performance Monitoring System for WordPress MCP Server
3
+ * Collects, analyzes, and reports performance metrics
4
+ */
5
+ /**
6
+ * Core Performance Monitor class
7
+ */
8
+ export class PerformanceMonitor {
9
+ metrics;
10
+ historicalData = [];
11
+ alerts = [];
12
+ config;
13
+ startTime;
14
+ responseTimes = [];
15
+ collectionTimer;
16
+ constructor(config = {}) {
17
+ this.startTime = Date.now();
18
+ this.config = {
19
+ collectInterval: 30000, // 30 seconds
20
+ retentionPeriod: 24 * 60 * 60 * 1000, // 24 hours
21
+ alertThresholds: {
22
+ responseTime: 2000, // 2 seconds
23
+ errorRate: 0.05, // 5%
24
+ cacheHitRate: 0.8, // 80%
25
+ memoryUsage: 80, // 80%
26
+ cpuUsage: 80 // 80%
27
+ },
28
+ enableRealTimeMonitoring: true,
29
+ enableHistoricalData: true,
30
+ enableAlerts: true,
31
+ ...config
32
+ };
33
+ this.metrics = this.initializeMetrics();
34
+ if (this.config.enableRealTimeMonitoring) {
35
+ this.startCollection();
36
+ }
37
+ }
38
+ /**
39
+ * Initialize empty metrics structure
40
+ */
41
+ initializeMetrics() {
42
+ return {
43
+ requests: {
44
+ total: 0,
45
+ successful: 0,
46
+ failed: 0,
47
+ averageResponseTime: 0,
48
+ minResponseTime: 0,
49
+ maxResponseTime: 0,
50
+ requestsPerSecond: 0,
51
+ p50ResponseTime: 0,
52
+ p95ResponseTime: 0,
53
+ p99ResponseTime: 0
54
+ },
55
+ cache: {
56
+ hits: 0,
57
+ misses: 0,
58
+ hitRate: 0,
59
+ totalSize: 0,
60
+ memoryUsageMB: 0,
61
+ evictions: 0,
62
+ averageCacheTime: 0
63
+ },
64
+ system: {
65
+ cpuUsage: 0,
66
+ memoryUsage: 0,
67
+ uptime: 0,
68
+ activeConnections: 0,
69
+ concurrentRequests: 0
70
+ },
71
+ wordpress: {
72
+ authSuccessRate: 0,
73
+ apiVersion: 'v2',
74
+ siteHealth: 'healthy',
75
+ averageDbResponseTime: 0,
76
+ pluginCompatibility: 100
77
+ },
78
+ tools: {
79
+ mostUsedTool: '',
80
+ toolUsageCount: {},
81
+ toolPerformance: {}
82
+ }
83
+ };
84
+ }
85
+ /**
86
+ * Record a request performance metric
87
+ */
88
+ recordRequest(responseTime, success, toolName) {
89
+ this.metrics.requests.total++;
90
+ if (success) {
91
+ this.metrics.requests.successful++;
92
+ }
93
+ else {
94
+ this.metrics.requests.failed++;
95
+ }
96
+ // Track response times
97
+ this.responseTimes.push(responseTime);
98
+ this.updateResponseTimeMetrics();
99
+ // Track tool usage
100
+ if (toolName) {
101
+ this.recordToolUsage(toolName, responseTime, success);
102
+ }
103
+ // Check for alerts
104
+ if (this.config.enableAlerts) {
105
+ this.checkPerformanceAlerts();
106
+ }
107
+ }
108
+ /**
109
+ * Update cache metrics from cache manager
110
+ */
111
+ updateCacheMetrics(cacheStats) {
112
+ this.metrics.cache = {
113
+ hits: cacheStats.hits || 0,
114
+ misses: cacheStats.misses || 0,
115
+ hitRate: cacheStats.hitRate || 0,
116
+ totalSize: cacheStats.totalSize || 0,
117
+ memoryUsageMB: this.estimateCacheMemoryUsage(cacheStats.totalSize),
118
+ evictions: cacheStats.evictions || 0,
119
+ averageCacheTime: 0.5 // Sub-millisecond average
120
+ };
121
+ }
122
+ /**
123
+ * Update system metrics
124
+ */
125
+ updateSystemMetrics() {
126
+ const memUsage = process.memoryUsage();
127
+ this.metrics.system = {
128
+ cpuUsage: this.getCpuUsage(),
129
+ memoryUsage: Math.round((memUsage.heapUsed / memUsage.heapTotal) * 100),
130
+ uptime: Date.now() - this.startTime,
131
+ activeConnections: 1, // Will be updated by connection manager
132
+ concurrentRequests: 0 // Will be updated by request manager
133
+ };
134
+ }
135
+ /**
136
+ * Get current performance metrics
137
+ */
138
+ getMetrics() {
139
+ this.updateSystemMetrics();
140
+ return { ...this.metrics };
141
+ }
142
+ /**
143
+ * Get historical performance data
144
+ */
145
+ getHistoricalData(startTime, endTime) {
146
+ if (!this.config.enableHistoricalData) {
147
+ return [];
148
+ }
149
+ let data = [...this.historicalData];
150
+ if (startTime) {
151
+ data = data.filter(m => m.system.uptime >= startTime);
152
+ }
153
+ if (endTime) {
154
+ data = data.filter(m => m.system.uptime <= endTime);
155
+ }
156
+ return data;
157
+ }
158
+ /**
159
+ * Get performance alerts
160
+ */
161
+ getAlerts(severity) {
162
+ if (severity) {
163
+ return this.alerts.filter(alert => alert.severity === severity);
164
+ }
165
+ return [...this.alerts];
166
+ }
167
+ /**
168
+ * Clear alerts
169
+ */
170
+ clearAlerts() {
171
+ this.alerts = [];
172
+ }
173
+ /**
174
+ * Generate performance insights
175
+ */
176
+ generateInsights() {
177
+ const current = this.getMetrics();
178
+ const health = this.calculateOverallHealth(current);
179
+ return {
180
+ summary: this.generateSummary(current),
181
+ recommendations: this.generateRecommendations(current),
182
+ trends: this.generateTrends(),
183
+ health
184
+ };
185
+ }
186
+ /**
187
+ * Export performance data
188
+ */
189
+ exportData(format = 'json') {
190
+ const data = {
191
+ currentMetrics: this.getMetrics(),
192
+ historicalData: this.getHistoricalData(),
193
+ alerts: this.getAlerts(),
194
+ config: this.config,
195
+ generatedAt: new Date().toISOString()
196
+ };
197
+ if (format === 'csv') {
198
+ return this.convertToCSV(data);
199
+ }
200
+ return JSON.stringify(data, null, 2);
201
+ }
202
+ /**
203
+ * Start automatic metric collection
204
+ */
205
+ startCollection() {
206
+ this.collectionTimer = setInterval(() => {
207
+ const snapshot = this.getMetrics();
208
+ if (this.config.enableHistoricalData) {
209
+ this.historicalData.push(snapshot);
210
+ this.cleanupOldData();
211
+ }
212
+ }, this.config.collectInterval);
213
+ }
214
+ /**
215
+ * Stop metric collection
216
+ */
217
+ stop() {
218
+ if (this.collectionTimer) {
219
+ clearInterval(this.collectionTimer);
220
+ }
221
+ }
222
+ /**
223
+ * Record tool usage and performance
224
+ */
225
+ recordToolUsage(toolName, responseTime, success) {
226
+ // Update usage count
227
+ this.metrics.tools.toolUsageCount[toolName] =
228
+ (this.metrics.tools.toolUsageCount[toolName] || 0) + 1;
229
+ // Update performance metrics
230
+ if (!this.metrics.tools.toolPerformance[toolName]) {
231
+ this.metrics.tools.toolPerformance[toolName] = {
232
+ averageTime: responseTime,
233
+ successRate: success ? 1 : 0,
234
+ callCount: 1
235
+ };
236
+ }
237
+ else {
238
+ const perf = this.metrics.tools.toolPerformance[toolName];
239
+ const totalCalls = perf.callCount + 1;
240
+ // Update average time
241
+ perf.averageTime = (perf.averageTime * perf.callCount + responseTime) / totalCalls;
242
+ // Update success rate
243
+ const totalSuccess = perf.successRate * perf.callCount + (success ? 1 : 0);
244
+ perf.successRate = totalSuccess / totalCalls;
245
+ perf.callCount = totalCalls;
246
+ }
247
+ // Update most used tool
248
+ const usageCounts = this.metrics.tools.toolUsageCount;
249
+ this.metrics.tools.mostUsedTool = Object.keys(usageCounts)
250
+ .reduce((a, b) => usageCounts[a] > usageCounts[b] ? a : b);
251
+ }
252
+ /**
253
+ * Update response time metrics with percentiles
254
+ */
255
+ updateResponseTimeMetrics() {
256
+ if (this.responseTimes.length === 0)
257
+ return;
258
+ const sorted = [...this.responseTimes].sort((a, b) => a - b);
259
+ const total = this.metrics.requests.total;
260
+ this.metrics.requests.averageResponseTime =
261
+ this.responseTimes.reduce((sum, time) => sum + time, 0) / this.responseTimes.length;
262
+ this.metrics.requests.minResponseTime = sorted[0];
263
+ this.metrics.requests.maxResponseTime = sorted[sorted.length - 1];
264
+ // Calculate percentiles
265
+ this.metrics.requests.p50ResponseTime = this.getPercentile(sorted, 0.5);
266
+ this.metrics.requests.p95ResponseTime = this.getPercentile(sorted, 0.95);
267
+ this.metrics.requests.p99ResponseTime = this.getPercentile(sorted, 0.99);
268
+ // Calculate requests per second
269
+ const uptime = (Date.now() - this.startTime) / 1000;
270
+ this.metrics.requests.requestsPerSecond = total / uptime;
271
+ // Limit response time history to prevent memory growth
272
+ if (this.responseTimes.length > 10000) {
273
+ this.responseTimes = this.responseTimes.slice(-5000);
274
+ }
275
+ }
276
+ /**
277
+ * Get percentile value from sorted array
278
+ */
279
+ getPercentile(sorted, percentile) {
280
+ const index = Math.ceil(sorted.length * percentile) - 1;
281
+ return sorted[Math.max(0, index)];
282
+ }
283
+ /**
284
+ * Estimate cache memory usage
285
+ */
286
+ estimateCacheMemoryUsage(totalSize) {
287
+ // Rough estimate: ~1KB per cache entry
288
+ return (totalSize * 1024) / (1024 * 1024); // Convert to MB
289
+ }
290
+ /**
291
+ * Get CPU usage (simplified)
292
+ */
293
+ getCpuUsage() {
294
+ // Simplified CPU usage estimation
295
+ // In production, use more sophisticated monitoring
296
+ return Math.round(Math.random() * 20 + 10); // 10-30% placeholder
297
+ }
298
+ /**
299
+ * Check for performance alerts
300
+ */
301
+ checkPerformanceAlerts() {
302
+ const thresholds = this.config.alertThresholds;
303
+ // Response time alert
304
+ if (this.metrics.requests.averageResponseTime > thresholds.responseTime) {
305
+ this.addAlert('warning', 'performance', `High response time: ${this.metrics.requests.averageResponseTime}ms`, 'averageResponseTime', thresholds.responseTime, this.metrics.requests.averageResponseTime, 'Consider enabling caching or optimizing queries');
306
+ }
307
+ // Error rate alert
308
+ const errorRate = this.metrics.requests.failed / this.metrics.requests.total;
309
+ if (errorRate > thresholds.errorRate) {
310
+ this.addAlert('error', 'performance', `High error rate: ${Math.round(errorRate * 100)}%`, 'errorRate', thresholds.errorRate, errorRate, 'Check WordPress connectivity and authentication');
311
+ }
312
+ // Cache hit rate alert
313
+ if (this.metrics.cache.hitRate < thresholds.cacheHitRate) {
314
+ this.addAlert('warning', 'cache', `Low cache hit rate: ${Math.round(this.metrics.cache.hitRate * 100)}%`, 'cacheHitRate', thresholds.cacheHitRate, this.metrics.cache.hitRate, 'Consider cache warming or adjusting TTL values');
315
+ }
316
+ }
317
+ /**
318
+ * Add performance alert
319
+ */
320
+ addAlert(severity, category, message, metric, threshold, actualValue, suggestion) {
321
+ const alert = {
322
+ id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
323
+ timestamp: Date.now(),
324
+ severity,
325
+ category,
326
+ message,
327
+ metric,
328
+ threshold,
329
+ actualValue,
330
+ ...(suggestion && { suggestion })
331
+ };
332
+ this.alerts.push(alert);
333
+ // Limit alert history
334
+ if (this.alerts.length > 1000) {
335
+ this.alerts = this.alerts.slice(-500);
336
+ }
337
+ }
338
+ /**
339
+ * Calculate overall system health
340
+ */
341
+ calculateOverallHealth(metrics) {
342
+ let score = 100;
343
+ // Response time impact
344
+ if (metrics.requests.averageResponseTime > 3000)
345
+ score -= 30;
346
+ else if (metrics.requests.averageResponseTime > 1000)
347
+ score -= 15;
348
+ // Error rate impact
349
+ const errorRate = metrics.requests.failed / metrics.requests.total;
350
+ if (errorRate > 0.1)
351
+ score -= 40;
352
+ else if (errorRate > 0.05)
353
+ score -= 20;
354
+ // Cache performance impact
355
+ if (metrics.cache.hitRate < 0.5)
356
+ score -= 25;
357
+ else if (metrics.cache.hitRate < 0.8)
358
+ score -= 10;
359
+ // System resource impact
360
+ if (metrics.system.memoryUsage > 90)
361
+ score -= 20;
362
+ else if (metrics.system.memoryUsage > 80)
363
+ score -= 10;
364
+ if (score >= 90)
365
+ return 'excellent';
366
+ if (score >= 75)
367
+ return 'good';
368
+ if (score >= 50)
369
+ return 'warning';
370
+ return 'critical';
371
+ }
372
+ /**
373
+ * Generate performance summary
374
+ */
375
+ generateSummary(metrics) {
376
+ const errorRate = metrics.requests.total > 0
377
+ ? (metrics.requests.failed / metrics.requests.total * 100).toFixed(1)
378
+ : '0';
379
+ return `Performance Summary: ${metrics.requests.total} requests processed with ${errorRate}% error rate. ` +
380
+ `Average response time: ${metrics.requests.averageResponseTime.toFixed(0)}ms. ` +
381
+ `Cache hit rate: ${(metrics.cache.hitRate * 100).toFixed(1)}%. ` +
382
+ `System uptime: ${Math.round(metrics.system.uptime / 1000 / 60)} minutes.`;
383
+ }
384
+ /**
385
+ * Generate performance recommendations
386
+ */
387
+ generateRecommendations(metrics) {
388
+ const recommendations = [];
389
+ if (metrics.requests.averageResponseTime > 1000) {
390
+ recommendations.push('Enable caching to reduce response times');
391
+ }
392
+ if (metrics.cache.hitRate < 0.8) {
393
+ recommendations.push('Warm cache with frequently accessed data');
394
+ }
395
+ if (metrics.system.memoryUsage > 80) {
396
+ recommendations.push('Consider increasing memory allocation or cache size limits');
397
+ }
398
+ const errorRate = metrics.requests.failed / metrics.requests.total;
399
+ if (errorRate > 0.05) {
400
+ recommendations.push('Review error logs and improve error handling');
401
+ }
402
+ return recommendations;
403
+ }
404
+ /**
405
+ * Generate trend analysis
406
+ */
407
+ generateTrends() {
408
+ if (this.historicalData.length < 2) {
409
+ return ['Insufficient data for trend analysis'];
410
+ }
411
+ const trends = [];
412
+ const recent = this.historicalData.slice(-5);
413
+ // Response time trend
414
+ const responseTimes = recent.map(d => d.requests.averageResponseTime);
415
+ if (this.isIncreasing(responseTimes)) {
416
+ trends.push('Response times are increasing');
417
+ }
418
+ else if (this.isDecreasing(responseTimes)) {
419
+ trends.push('Response times are improving');
420
+ }
421
+ // Cache hit rate trend
422
+ const hitRates = recent.map(d => d.cache.hitRate);
423
+ if (this.isIncreasing(hitRates)) {
424
+ trends.push('Cache performance is improving');
425
+ }
426
+ else if (this.isDecreasing(hitRates)) {
427
+ trends.push('Cache performance is declining');
428
+ }
429
+ return trends;
430
+ }
431
+ /**
432
+ * Check if values are increasing
433
+ */
434
+ isIncreasing(values) {
435
+ for (let i = 1; i < values.length; i++) {
436
+ if (values[i] <= values[i - 1])
437
+ return false;
438
+ }
439
+ return true;
440
+ }
441
+ /**
442
+ * Check if values are decreasing
443
+ */
444
+ isDecreasing(values) {
445
+ for (let i = 1; i < values.length; i++) {
446
+ if (values[i] >= values[i - 1])
447
+ return false;
448
+ }
449
+ return true;
450
+ }
451
+ /**
452
+ * Convert data to CSV format
453
+ */
454
+ convertToCSV(data) {
455
+ // Simplified CSV conversion for metrics
456
+ const metrics = data.currentMetrics;
457
+ const csv = [
458
+ 'Metric,Value',
459
+ `Total Requests,${metrics.requests.total}`,
460
+ `Successful Requests,${metrics.requests.successful}`,
461
+ `Failed Requests,${metrics.requests.failed}`,
462
+ `Average Response Time,${metrics.requests.averageResponseTime}`,
463
+ `Cache Hit Rate,${metrics.cache.hitRate}`,
464
+ `Cache Size,${metrics.cache.totalSize}`,
465
+ `Memory Usage,${metrics.system.memoryUsage}%`,
466
+ `Uptime,${metrics.system.uptime}ms`
467
+ ];
468
+ return csv.join('\n');
469
+ }
470
+ /**
471
+ * Clean up old historical data
472
+ */
473
+ cleanupOldData() {
474
+ const cutoff = Date.now() - this.config.retentionPeriod;
475
+ this.historicalData = this.historicalData.filter(data => data.system.uptime > cutoff);
476
+ }
477
+ }
478
+ //# sourceMappingURL=PerformanceMonitor.js.map