mcp-wordpress 2.11.13 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/README.md +14 -29
  2. package/dist/cache/CacheInvalidation.js.map +1 -1
  3. package/dist/cache/CacheManager.d.ts +7 -0
  4. package/dist/cache/CacheManager.d.ts.map +1 -1
  5. package/dist/cache/CacheManager.js +21 -7
  6. package/dist/cache/CacheManager.js.map +1 -1
  7. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  8. package/dist/cache/SEOCacheManager.d.ts.map +1 -1
  9. package/dist/cache/SEOCacheManager.js +6 -1
  10. package/dist/cache/SEOCacheManager.js.map +1 -1
  11. package/dist/cache/index.d.ts.map +1 -1
  12. package/dist/cache/index.js.map +1 -1
  13. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  14. package/dist/client/CachedWordPressClient.js.map +1 -1
  15. package/dist/client/MockWordPressClient.d.ts.map +1 -1
  16. package/dist/client/MockWordPressClient.js.map +1 -1
  17. package/dist/client/SEOWordPressClient.d.ts.map +1 -1
  18. package/dist/client/SEOWordPressClient.js.map +1 -1
  19. package/dist/client/api.d.ts +11 -26
  20. package/dist/client/api.d.ts.map +1 -1
  21. package/dist/client/api.js +111 -203
  22. package/dist/client/api.js.map +1 -1
  23. package/dist/client/auth.d.ts.map +1 -1
  24. package/dist/client/auth.js.map +1 -1
  25. package/dist/client/managers/AuthManager.d.ts.map +1 -1
  26. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  27. package/dist/client/managers/RequestManager.js +6 -5
  28. package/dist/client/managers/RequestManager.js.map +1 -1
  29. package/dist/client/managers/composed/MigrationAdapter.d.ts +3 -3
  30. package/dist/client/managers/composed/MigrationAdapter.d.ts.map +1 -1
  31. package/dist/client/managers/composed/MigrationAdapter.js +2 -2
  32. package/dist/client/managers/composed/MigrationAdapter.js.map +1 -1
  33. package/dist/client/managers/composed/index.d.ts +7 -7
  34. package/dist/client/managers/composed/index.d.ts.map +1 -1
  35. package/dist/client/managers/composed/index.js +6 -6
  36. package/dist/client/managers/composed/index.js.map +1 -1
  37. package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts +1 -1
  38. package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts.map +1 -1
  39. package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts +1 -1
  40. package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts.map +1 -1
  41. package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts +1 -1
  42. package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts.map +1 -1
  43. package/dist/client/operations/comments.d.ts +58 -0
  44. package/dist/client/operations/comments.d.ts.map +1 -0
  45. package/dist/client/operations/comments.js +74 -0
  46. package/dist/client/operations/comments.js.map +1 -0
  47. package/dist/client/operations/index.d.ts +12 -0
  48. package/dist/client/operations/index.d.ts.map +1 -0
  49. package/dist/client/operations/index.js +12 -0
  50. package/dist/client/operations/index.js.map +1 -0
  51. package/dist/client/operations/media.d.ts +55 -0
  52. package/dist/client/operations/media.d.ts.map +1 -0
  53. package/dist/client/operations/media.js +132 -0
  54. package/dist/client/operations/media.js.map +1 -0
  55. package/dist/client/operations/pages.d.ts +50 -0
  56. package/dist/client/operations/pages.d.ts.map +1 -0
  57. package/dist/client/operations/pages.js +56 -0
  58. package/dist/client/operations/pages.js.map +1 -0
  59. package/dist/client/operations/posts.d.ts +50 -0
  60. package/dist/client/operations/posts.d.ts.map +1 -0
  61. package/dist/client/operations/posts.js +53 -0
  62. package/dist/client/operations/posts.js.map +1 -0
  63. package/dist/client/operations/site.d.ts +60 -0
  64. package/dist/client/operations/site.d.ts.map +1 -0
  65. package/dist/client/operations/site.js +83 -0
  66. package/dist/client/operations/site.js.map +1 -0
  67. package/dist/client/operations/taxonomies.d.ts +69 -0
  68. package/dist/client/operations/taxonomies.d.ts.map +1 -0
  69. package/dist/client/operations/taxonomies.js +87 -0
  70. package/dist/client/operations/taxonomies.js.map +1 -0
  71. package/dist/client/operations/users.d.ts +50 -0
  72. package/dist/client/operations/users.d.ts.map +1 -0
  73. package/dist/client/operations/users.js +57 -0
  74. package/dist/client/operations/users.js.map +1 -0
  75. package/dist/config/ServerConfiguration.d.ts.map +1 -1
  76. package/dist/config/ServerConfiguration.js.map +1 -1
  77. package/dist/docs/DocumentationGenerator.js.map +1 -1
  78. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  79. package/dist/performance/MetricsCollector.js.map +1 -1
  80. package/dist/performance/PerformanceMonitor.js.map +1 -1
  81. package/dist/security/AISecurityScanner.d.ts.map +1 -1
  82. package/dist/security/AISecurityScanner.js +3 -2
  83. package/dist/security/AISecurityScanner.js.map +1 -1
  84. package/dist/security/AutomatedRemediation.js.map +1 -1
  85. package/dist/security/InputValidator.d.ts.map +1 -1
  86. package/dist/security/InputValidator.js +30 -18
  87. package/dist/security/InputValidator.js.map +1 -1
  88. package/dist/security/SecurityCIPipeline.d.ts +19 -196
  89. package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
  90. package/dist/security/SecurityCIPipeline.js +95 -639
  91. package/dist/security/SecurityCIPipeline.js.map +1 -1
  92. package/dist/security/SecurityConfig.js.map +1 -1
  93. package/dist/security/SecurityConfigManager.js.map +1 -1
  94. package/dist/security/SecurityGateExecutor.d.ts +67 -0
  95. package/dist/security/SecurityGateExecutor.d.ts.map +1 -0
  96. package/dist/security/SecurityGateExecutor.js +363 -0
  97. package/dist/security/SecurityGateExecutor.js.map +1 -0
  98. package/dist/security/SecurityMonitoring.js.map +1 -1
  99. package/dist/security/SecurityReportGenerator.d.ts +65 -0
  100. package/dist/security/SecurityReportGenerator.d.ts.map +1 -0
  101. package/dist/security/SecurityReportGenerator.js +210 -0
  102. package/dist/security/SecurityReportGenerator.js.map +1 -0
  103. package/dist/security/SecurityReviewer.js.map +1 -1
  104. package/dist/security/SecurityTypes.d.ts +188 -0
  105. package/dist/security/SecurityTypes.d.ts.map +1 -0
  106. package/dist/security/SecurityTypes.js +6 -0
  107. package/dist/security/SecurityTypes.js.map +1 -0
  108. package/dist/security/index.d.ts +5 -28
  109. package/dist/security/index.d.ts.map +1 -1
  110. package/dist/security/index.js +4 -0
  111. package/dist/security/index.js.map +1 -1
  112. package/dist/server/ConnectionTester.d.ts.map +1 -1
  113. package/dist/server/ConnectionTester.js.map +1 -1
  114. package/dist/server/ToolRegistry.d.ts.map +1 -1
  115. package/dist/server/ToolRegistry.js.map +1 -1
  116. package/dist/tools/BaseToolManager.d.ts.map +1 -1
  117. package/dist/tools/BaseToolManager.js.map +1 -1
  118. package/dist/tools/auth.d.ts.map +1 -1
  119. package/dist/tools/auth.js.map +1 -1
  120. package/dist/tools/cache.d.ts.map +1 -1
  121. package/dist/tools/cache.js.map +1 -1
  122. package/dist/tools/comments.d.ts.map +1 -1
  123. package/dist/tools/comments.js.map +1 -1
  124. package/dist/tools/media.d.ts.map +1 -1
  125. package/dist/tools/media.js.map +1 -1
  126. package/dist/tools/pages.d.ts.map +1 -1
  127. package/dist/tools/pages.js.map +1 -1
  128. package/dist/tools/performance/PerformanceHelpers.d.ts +116 -0
  129. package/dist/tools/performance/PerformanceHelpers.d.ts.map +1 -0
  130. package/dist/tools/performance/PerformanceHelpers.js +298 -0
  131. package/dist/tools/performance/PerformanceHelpers.js.map +1 -0
  132. package/dist/tools/performance/PerformanceTools.d.ts +54 -0
  133. package/dist/tools/performance/PerformanceTools.d.ts.map +1 -0
  134. package/dist/tools/performance/PerformanceTools.js +687 -0
  135. package/dist/tools/performance/PerformanceTools.js.map +1 -0
  136. package/dist/tools/performance/index.d.ts +8 -0
  137. package/dist/tools/performance/index.d.ts.map +1 -0
  138. package/dist/tools/performance/index.js +8 -0
  139. package/dist/tools/performance/index.js.map +1 -0
  140. package/dist/tools/performance.d.ts +12 -69
  141. package/dist/tools/performance.d.ts.map +1 -1
  142. package/dist/tools/performance.js +12 -920
  143. package/dist/tools/performance.js.map +1 -1
  144. package/dist/tools/posts.d.ts.map +1 -1
  145. package/dist/tools/seo/analyzers/ContentAnalyzer.d.ts.map +1 -1
  146. package/dist/tools/seo/analyzers/ContentAnalyzer.js +14 -3
  147. package/dist/tools/seo/analyzers/ContentAnalyzer.js.map +1 -1
  148. package/dist/tools/seo/auditors/SiteAuditor.d.ts.map +1 -1
  149. package/dist/tools/seo/auditors/SiteAuditor.js +12 -3
  150. package/dist/tools/seo/auditors/SiteAuditor.js.map +1 -1
  151. package/dist/tools/seo/generators/MetaGenerator.d.ts.map +1 -1
  152. package/dist/tools/seo/generators/MetaGenerator.js +25 -8
  153. package/dist/tools/seo/generators/MetaGenerator.js.map +1 -1
  154. package/dist/tools/seo/generators/SchemaGenerator.d.ts.map +1 -1
  155. package/dist/tools/seo/generators/SchemaGenerator.js.map +1 -1
  156. package/dist/tools/seo/optimizers/InternalLinkingSuggester.d.ts.map +1 -1
  157. package/dist/tools/seo/optimizers/InternalLinkingSuggester.js.map +1 -1
  158. package/dist/tools/site.d.ts.map +1 -1
  159. package/dist/tools/site.js.map +1 -1
  160. package/dist/tools/taxonomies.d.ts.map +1 -1
  161. package/dist/tools/taxonomies.js.map +1 -1
  162. package/dist/tools/users.d.ts.map +1 -1
  163. package/dist/tools/users.js.map +1 -1
  164. package/dist/utils/CircuitBreaker.d.ts +243 -0
  165. package/dist/utils/CircuitBreaker.d.ts.map +1 -0
  166. package/dist/utils/CircuitBreaker.js +456 -0
  167. package/dist/utils/CircuitBreaker.js.map +1 -0
  168. package/dist/utils/debug.d.ts.map +1 -1
  169. package/dist/utils/debug.js.map +1 -1
  170. package/dist/utils/error.js.map +1 -1
  171. package/dist/utils/index.d.ts +1 -0
  172. package/dist/utils/index.d.ts.map +1 -1
  173. package/dist/utils/index.js +2 -0
  174. package/dist/utils/index.js.map +1 -1
  175. package/dist/utils/logger.js.map +1 -1
  176. package/dist/utils/toolWrapper.d.ts.map +1 -1
  177. package/docs/DEPRECATIONS.md +157 -0
  178. package/package.json +2 -3
  179. package/src/cache/CacheInvalidation.ts +1 -1
  180. package/src/cache/CacheManager.ts +25 -8
  181. package/src/cache/HttpCacheWrapper.ts +1 -1
  182. package/src/cache/SEOCacheManager.ts +9 -3
  183. package/src/cache/index.ts +1 -1
  184. package/src/client/CachedWordPressClient.ts +6 -6
  185. package/src/client/MockWordPressClient.ts +3 -3
  186. package/src/client/SEOWordPressClient.ts +6 -6
  187. package/src/client/api.ts +129 -215
  188. package/src/client/auth.ts +3 -3
  189. package/src/client/managers/AuthManager.ts +1 -1
  190. package/src/client/managers/RequestManager.ts +6 -7
  191. package/src/client/managers/composed/MigrationAdapter.ts +4 -4
  192. package/src/client/managers/composed/index.ts +7 -7
  193. package/src/client/managers/implementations/ConfigurationProviderImpl.ts +1 -1
  194. package/src/client/managers/implementations/ErrorHandlerImpl.ts +1 -1
  195. package/src/client/managers/implementations/ParameterValidatorImpl.ts +1 -1
  196. package/src/client/operations/comments.ts +96 -0
  197. package/src/client/operations/index.ts +12 -0
  198. package/src/client/operations/media.ts +162 -0
  199. package/src/client/operations/pages.ts +71 -0
  200. package/src/client/operations/posts.ts +68 -0
  201. package/src/client/operations/site.ts +106 -0
  202. package/src/client/operations/taxonomies.ts +115 -0
  203. package/src/client/operations/users.ts +72 -0
  204. package/src/config/ServerConfiguration.ts +6 -6
  205. package/src/docs/DocumentationGenerator.ts +3 -3
  206. package/src/performance/MetricsCollector.ts +4 -4
  207. package/src/performance/PerformanceMonitor.ts +1 -1
  208. package/src/security/AISecurityScanner.ts +4 -3
  209. package/src/security/AutomatedRemediation.ts +1 -1
  210. package/src/security/InputValidator.ts +36 -19
  211. package/src/security/SecurityCIPipeline.ts +130 -953
  212. package/src/security/SecurityConfig.ts +1 -1
  213. package/src/security/SecurityConfigManager.ts +1 -1
  214. package/src/security/SecurityGateExecutor.ts +485 -0
  215. package/src/security/SecurityMonitoring.ts +1 -1
  216. package/src/security/SecurityReportGenerator.ts +272 -0
  217. package/src/security/SecurityReviewer.ts +1 -1
  218. package/src/security/SecurityTypes.ts +199 -0
  219. package/src/security/index.ts +6 -1
  220. package/src/server/ConnectionTester.ts +4 -4
  221. package/src/server/ToolRegistry.ts +6 -6
  222. package/src/tools/BaseToolManager.ts +2 -2
  223. package/src/tools/auth.ts +3 -3
  224. package/src/tools/cache.ts +3 -3
  225. package/src/tools/comments.ts +3 -3
  226. package/src/tools/media.ts +3 -3
  227. package/src/tools/pages.ts +3 -3
  228. package/src/tools/performance/PerformanceHelpers.ts +330 -0
  229. package/src/tools/performance/PerformanceTools.ts +854 -0
  230. package/src/tools/performance/index.ts +8 -0
  231. package/src/tools/performance.ts +12 -1073
  232. package/src/tools/posts.ts +1 -1
  233. package/src/tools/seo/analyzers/ContentAnalyzer.ts +21 -7
  234. package/src/tools/seo/auditors/SiteAuditor.ts +18 -7
  235. package/src/tools/seo/generators/MetaGenerator.ts +33 -12
  236. package/src/tools/seo/generators/SchemaGenerator.ts +3 -3
  237. package/src/tools/seo/optimizers/InternalLinkingSuggester.ts +4 -4
  238. package/src/tools/site.ts +3 -3
  239. package/src/tools/taxonomies.ts +3 -3
  240. package/src/tools/users.ts +4 -4
  241. package/src/utils/CircuitBreaker.ts +572 -0
  242. package/src/utils/debug.ts +3 -3
  243. package/src/utils/error.ts +1 -1
  244. package/src/utils/index.ts +3 -0
  245. package/src/utils/logger.ts +1 -1
  246. package/src/utils/toolWrapper.ts +2 -2
  247. package/docs/BRANCH_PROTECTION.md +0 -0
@@ -0,0 +1,687 @@
1
+ /**
2
+ * Performance Monitoring MCP Tools for WordPress Server
3
+ * Provides comprehensive performance insights and management
4
+ */
5
+ import { PerformanceMonitor } from "../../performance/PerformanceMonitor.js";
6
+ import { MetricsCollector } from "../../performance/MetricsCollector.js";
7
+ import { PerformanceAnalytics, } from "../../performance/PerformanceAnalytics.js";
8
+ import { toolWrapper } from "../../utils/toolWrapper.js";
9
+ import { ConfigHelpers } from "../../config/Config.js";
10
+ import { LoggerFactory } from "../../utils/logger.js";
11
+ // Import helper functions
12
+ import { calculateHealthStatus, calculatePerformanceScore, calculateCacheEfficiency, formatUptime, parseTimeframe, processHistoricalDataForChart, calculateAverage, formatBenchmarkStatus, getBenchmarkImprovementDescription, calculateOverallRanking, formatAlertMessage, formatAnomalyDescription, calculateAlertStatus, formatPriority, formatEffort, calculateEstimatedImpact, convertToCSV, createSummaryReport, } from "./PerformanceHelpers.js";
13
+ /**
14
+ * Performance Tools Class
15
+ * Provides MCP tools for WordPress performance monitoring
16
+ */
17
+ export default class PerformanceTools {
18
+ monitor;
19
+ collector;
20
+ analytics;
21
+ logger;
22
+ historicalDataInterval;
23
+ constructor(clients) {
24
+ // Initialize logger first
25
+ this.logger = LoggerFactory.performance();
26
+ // Initialize performance monitoring system
27
+ this.monitor = new PerformanceMonitor({
28
+ enableRealTimeMonitoring: true,
29
+ enableHistoricalData: true,
30
+ enableAlerts: true,
31
+ });
32
+ this.collector = new MetricsCollector(this.monitor, {
33
+ enableRealTime: true,
34
+ enableToolTracking: true,
35
+ enableCacheIntegration: true,
36
+ });
37
+ this.analytics = new PerformanceAnalytics(this.collector, {
38
+ enablePredictiveAnalysis: true,
39
+ enableAnomalyDetection: true,
40
+ enableTrendAnalysis: true,
41
+ });
42
+ // Register clients if provided
43
+ if (clients) {
44
+ for (const [siteId, client] of clients) {
45
+ this.collector.registerClient(siteId, client);
46
+ // Register cache manager if client has one
47
+ const possibleCacheMgr = client?.cacheManager;
48
+ if (possibleCacheMgr) {
49
+ this.collector.registerCacheManager(siteId, possibleCacheMgr);
50
+ }
51
+ }
52
+ }
53
+ // Only start historical data collection in production environments
54
+ if (ConfigHelpers.isProd() || ConfigHelpers.isDev()) {
55
+ this.startHistoricalDataCollection();
56
+ }
57
+ }
58
+ /**
59
+ * Get all performance monitoring tools
60
+ */
61
+ getTools() {
62
+ return [
63
+ {
64
+ name: "wp_performance_stats",
65
+ description: "Get real-time performance statistics and metrics",
66
+ parameters: [
67
+ {
68
+ name: "site",
69
+ type: "string",
70
+ description: "Specific site ID for multi-site setups (optional for single site)",
71
+ required: false,
72
+ },
73
+ {
74
+ name: "category",
75
+ type: "string",
76
+ description: "Category of metrics to return (overview, requests, cache, system, tools, all)",
77
+ required: false,
78
+ },
79
+ {
80
+ name: "format",
81
+ type: "string",
82
+ description: "Detail level of the response (summary, detailed, raw)",
83
+ required: false,
84
+ },
85
+ ],
86
+ handler: this.getPerformanceStats.bind(this),
87
+ },
88
+ {
89
+ name: "wp_performance_history",
90
+ description: "Get historical performance data and trends",
91
+ parameters: [
92
+ {
93
+ name: "site",
94
+ type: "string",
95
+ description: "Specific site ID for multi-site setups (optional for single site)",
96
+ required: false,
97
+ },
98
+ {
99
+ name: "timeframe",
100
+ type: "string",
101
+ description: "Time period for historical data (1h, 6h, 12h, 24h, 7d)",
102
+ required: false,
103
+ },
104
+ {
105
+ name: "metrics",
106
+ type: "array",
107
+ description: "Specific metrics to include (responseTime, cacheHitRate, errorRate, memoryUsage, requestVolume)",
108
+ required: false,
109
+ },
110
+ {
111
+ name: "includeTrends",
112
+ type: "boolean",
113
+ description: "Include trend analysis (default: true)",
114
+ required: false,
115
+ },
116
+ ],
117
+ handler: this.getPerformanceHistory.bind(this),
118
+ },
119
+ {
120
+ name: "wp_performance_benchmark",
121
+ description: "Compare current performance against industry benchmarks",
122
+ parameters: [
123
+ {
124
+ name: "site",
125
+ type: "string",
126
+ description: "Specific site ID for multi-site setups (optional for single site)",
127
+ required: false,
128
+ },
129
+ {
130
+ name: "category",
131
+ type: "string",
132
+ description: "Benchmark category (response_time, cache_performance, error_rate, system_resources, all)",
133
+ required: false,
134
+ },
135
+ {
136
+ name: "includeRecommendations",
137
+ type: "boolean",
138
+ description: "Include improvement recommendations (default: true)",
139
+ required: false,
140
+ },
141
+ ],
142
+ handler: this.getBenchmarkComparison.bind(this),
143
+ },
144
+ {
145
+ name: "wp_performance_alerts",
146
+ description: "Get performance alerts and anomaly detection results",
147
+ parameters: [
148
+ {
149
+ name: "site",
150
+ type: "string",
151
+ description: "Specific site ID for multi-site setups (optional for single site)",
152
+ required: false,
153
+ },
154
+ {
155
+ name: "severity",
156
+ type: "string",
157
+ description: "Filter alerts by severity level (info, warning, error, critical)",
158
+ required: false,
159
+ },
160
+ {
161
+ name: "category",
162
+ type: "string",
163
+ description: "Filter alerts by category (performance, cache, system, wordpress)",
164
+ required: false,
165
+ },
166
+ {
167
+ name: "limit",
168
+ type: "number",
169
+ description: "Maximum number of alerts to return (default: 20)",
170
+ required: false,
171
+ },
172
+ {
173
+ name: "includeAnomalies",
174
+ type: "boolean",
175
+ description: "Include detected anomalies (default: true)",
176
+ required: false,
177
+ },
178
+ ],
179
+ handler: this.getPerformanceAlerts.bind(this),
180
+ },
181
+ {
182
+ name: "wp_performance_optimize",
183
+ description: "Get optimization recommendations and insights",
184
+ parameters: [
185
+ {
186
+ name: "site",
187
+ type: "string",
188
+ description: "Specific site ID for multi-site setups (optional for single site)",
189
+ required: false,
190
+ },
191
+ {
192
+ name: "focus",
193
+ type: "string",
194
+ description: "Optimization focus area (speed, reliability, efficiency, scaling)",
195
+ required: false,
196
+ },
197
+ {
198
+ name: "priority",
199
+ type: "string",
200
+ description: "Implementation timeline (quick_wins, medium_term, long_term, all)",
201
+ required: false,
202
+ },
203
+ {
204
+ name: "includeROI",
205
+ type: "boolean",
206
+ description: "Include ROI estimates (default: true)",
207
+ required: false,
208
+ },
209
+ {
210
+ name: "includePredictions",
211
+ type: "boolean",
212
+ description: "Include performance predictions (default: true)",
213
+ required: false,
214
+ },
215
+ ],
216
+ handler: this.getOptimizationRecommendations.bind(this),
217
+ },
218
+ {
219
+ name: "wp_performance_export",
220
+ description: "Export comprehensive performance report",
221
+ parameters: [
222
+ {
223
+ name: "site",
224
+ type: "string",
225
+ description: "Specific site ID for multi-site setups (optional for single site)",
226
+ required: false,
227
+ },
228
+ {
229
+ name: "format",
230
+ type: "string",
231
+ description: "Export format (json, csv, summary)",
232
+ required: false,
233
+ },
234
+ {
235
+ name: "includeHistorical",
236
+ type: "boolean",
237
+ description: "Include historical data (default: true)",
238
+ required: false,
239
+ },
240
+ {
241
+ name: "includeAnalytics",
242
+ type: "boolean",
243
+ description: "Include analytics and insights (default: true)",
244
+ required: false,
245
+ },
246
+ {
247
+ name: "timeRange",
248
+ type: "string",
249
+ description: "Time range for data export (1h, 6h, 24h, 7d, 30d)",
250
+ required: false,
251
+ },
252
+ ],
253
+ handler: this.exportPerformanceReport.bind(this),
254
+ },
255
+ ];
256
+ }
257
+ /**
258
+ * Get real-time performance statistics
259
+ */
260
+ async getPerformanceStats(_client, params) {
261
+ return toolWrapper(async () => {
262
+ const { site, category = "overview", format = "summary", } = params;
263
+ // Get current metrics
264
+ const metrics = this.collector.collectCurrentMetrics();
265
+ // Get site-specific metrics if requested
266
+ let siteMetrics = null;
267
+ if (site) {
268
+ siteMetrics = this.collector.getSiteMetrics(site);
269
+ }
270
+ // Filter by category
271
+ const result = {};
272
+ if (category === "overview" || category === "all") {
273
+ result.overview = {
274
+ overallHealth: calculateHealthStatus(metrics),
275
+ performanceScore: calculatePerformanceScore(metrics),
276
+ totalRequests: metrics.requests.total,
277
+ averageResponseTime: `${metrics.requests.averageResponseTime.toFixed(0)}ms`,
278
+ cacheHitRate: `${(metrics.cache.hitRate * 100).toFixed(1)}%`,
279
+ errorRate: `${((metrics.requests.failed / Math.max(metrics.requests.total, 1)) * 100).toFixed(2)}%`,
280
+ uptime: formatUptime(metrics.system.uptime),
281
+ };
282
+ }
283
+ if (category === "requests" || category === "all") {
284
+ result.requests = {
285
+ ...metrics.requests,
286
+ requestsPerSecond: metrics.requests.requestsPerSecond.toFixed(2),
287
+ p50ResponseTime: `${metrics.requests.p50ResponseTime}ms`,
288
+ p95ResponseTime: `${metrics.requests.p95ResponseTime}ms`,
289
+ p99ResponseTime: `${metrics.requests.p99ResponseTime}ms`,
290
+ };
291
+ }
292
+ if (category === "cache" || category === "all") {
293
+ result.cache = {
294
+ ...metrics.cache,
295
+ hitRate: `${(metrics.cache.hitRate * 100).toFixed(1)}%`,
296
+ memoryUsage: `${metrics.cache.memoryUsageMB.toFixed(1)}MB`,
297
+ efficiency: calculateCacheEfficiency(metrics.cache),
298
+ };
299
+ }
300
+ if (category === "system" || category === "all") {
301
+ result.system = {
302
+ ...metrics.system,
303
+ memoryUsage: `${metrics.system.memoryUsage}%`,
304
+ cpuUsage: `${metrics.system.cpuUsage}%`,
305
+ uptime: formatUptime(metrics.system.uptime),
306
+ };
307
+ }
308
+ if (category === "tools" || category === "all") {
309
+ result.tools = {
310
+ mostUsedTool: metrics.tools.mostUsedTool,
311
+ totalToolCalls: Object.values(metrics.tools.toolUsageCount).reduce((sum, count) => sum + (typeof count === "number" ? count : 0), 0),
312
+ topTools: Object.entries(metrics.tools.toolUsageCount)
313
+ .sort(([, a], [, b]) => b - a)
314
+ .slice(0, 5)
315
+ .map(([tool, count]) => ({ tool, count })),
316
+ toolPerformance: format === "detailed" ? metrics.tools.toolPerformance : undefined,
317
+ };
318
+ }
319
+ // Add site-specific data if requested
320
+ if (siteMetrics && siteMetrics.isActive) {
321
+ result.siteSpecific = {
322
+ siteId: site,
323
+ cache: siteMetrics.cache,
324
+ client: siteMetrics.client,
325
+ };
326
+ }
327
+ // Add metadata
328
+ result.metadata = {
329
+ timestamp: new Date().toISOString(),
330
+ category,
331
+ format,
332
+ site: site || "all",
333
+ monitoringEnabled: true,
334
+ };
335
+ return {
336
+ success: true,
337
+ data: result,
338
+ };
339
+ });
340
+ }
341
+ /**
342
+ * Get historical performance data and trends
343
+ */
344
+ async getPerformanceHistory(_client, params) {
345
+ return toolWrapper(async () => {
346
+ const { site, timeframe = "24h", metrics: requestedMetrics, includeTrends = true, } = params;
347
+ // Convert timeframe to milliseconds
348
+ const timeframMs = parseTimeframe(timeframe);
349
+ const startTime = Date.now() - timeframMs;
350
+ // Get historical data
351
+ const historicalData = this.monitor.getHistoricalData(startTime);
352
+ // Analyze trends if requested
353
+ let trends = null;
354
+ if (includeTrends) {
355
+ // Add current data for trend analysis
356
+ this.analytics.addDataPoint(this.collector.collectCurrentMetrics());
357
+ trends = this.analytics.analyzeTrends();
358
+ // Filter trends by requested metrics
359
+ if (requestedMetrics && Array.isArray(requestedMetrics)) {
360
+ trends = trends.filter((trend) => requestedMetrics.includes(trend.metric));
361
+ }
362
+ }
363
+ // Process historical data for charting
364
+ const chartData = processHistoricalDataForChart(historicalData, requestedMetrics);
365
+ return {
366
+ success: true,
367
+ data: {
368
+ timeframe,
369
+ dataPoints: historicalData.length,
370
+ historicalData: chartData,
371
+ trends: trends || [],
372
+ summary: {
373
+ averageResponseTime: calculateAverage(historicalData.map((d) => d.requests.averageResponseTime)),
374
+ averageCacheHitRate: calculateAverage(historicalData.map((d) => d.cache.hitRate)),
375
+ averageErrorRate: calculateAverage(historicalData.map((d) => (d.requests.total > 0 ? d.requests.failed / d.requests.total : 0))),
376
+ totalRequests: historicalData.reduce((sum, d) => sum + d.requests.total, 0),
377
+ },
378
+ metadata: {
379
+ timestamp: new Date().toISOString(),
380
+ site: site || "all",
381
+ requestedMetrics: requestedMetrics || ["all"],
382
+ },
383
+ },
384
+ };
385
+ });
386
+ }
387
+ /**
388
+ * Get benchmark comparison
389
+ */
390
+ async getBenchmarkComparison(_client, params) {
391
+ return toolWrapper(async () => {
392
+ const { site, category = "all", includeRecommendations = true, } = params;
393
+ // Get benchmark comparisons
394
+ const benchmarks = this.analytics.benchmarkPerformance();
395
+ // Filter by category if specified
396
+ let filteredBenchmarks = benchmarks;
397
+ if (category !== "all") {
398
+ const categoryMap = {
399
+ response_time: "Response Time",
400
+ cache_performance: "Cache Hit Rate",
401
+ error_rate: "Error Rate",
402
+ system_resources: "Memory Usage",
403
+ };
404
+ const targetCategory = categoryMap[category];
405
+ if (targetCategory) {
406
+ filteredBenchmarks = benchmarks.filter((b) => b.category === targetCategory);
407
+ }
408
+ }
409
+ // Get recommendations if requested
410
+ let recommendations = null;
411
+ if (includeRecommendations) {
412
+ const insights = this.analytics.generateInsights();
413
+ recommendations = insights
414
+ .filter((insight) => insight.category === "optimization")
415
+ .map((insight) => ({
416
+ title: insight.title,
417
+ description: insight.description,
418
+ priority: insight.priority,
419
+ estimatedImprovement: insight.estimatedImprovement,
420
+ implementationEffort: insight.implementationEffort,
421
+ }));
422
+ }
423
+ return {
424
+ success: true,
425
+ data: {
426
+ benchmarks: filteredBenchmarks.map((benchmark) => ({
427
+ ...benchmark,
428
+ status: formatBenchmarkStatus(benchmark.status),
429
+ improvement: benchmark.improvement > 0
430
+ ? {
431
+ needed: benchmark.improvement,
432
+ description: getBenchmarkImprovementDescription(benchmark),
433
+ }
434
+ : null,
435
+ })),
436
+ overallRanking: calculateOverallRanking(benchmarks),
437
+ recommendations: recommendations || [],
438
+ metadata: {
439
+ timestamp: new Date().toISOString(),
440
+ category,
441
+ site: site || "all",
442
+ benchmarkVersion: "2024-industry-standards",
443
+ },
444
+ },
445
+ };
446
+ });
447
+ }
448
+ /**
449
+ * Get performance alerts and anomalies
450
+ */
451
+ async getPerformanceAlerts(_client, params) {
452
+ return toolWrapper(async () => {
453
+ const { site, severity, category, limit = 20, includeAnomalies = true, } = params;
454
+ // Get alerts from monitor
455
+ let alerts = this.monitor.getAlerts(severity);
456
+ // Filter by category if specified
457
+ if (category) {
458
+ alerts = alerts.filter((alert) => alert.category === category);
459
+ }
460
+ // Limit results
461
+ alerts = alerts.slice(-limit);
462
+ // Get anomalies if requested
463
+ let anomalies = [];
464
+ if (includeAnomalies) {
465
+ anomalies = this.analytics.getAnomalies(severity);
466
+ }
467
+ // Calculate alert summary
468
+ const alertSummary = {
469
+ total: alerts.length,
470
+ critical: alerts.filter((a) => a.severity === "critical").length,
471
+ error: alerts.filter((a) => a.severity === "error").length,
472
+ warning: alerts.filter((a) => a.severity === "warning").length,
473
+ info: alerts.filter((a) => a.severity === "info").length,
474
+ };
475
+ const anomalySummary = {
476
+ total: anomalies.length,
477
+ critical: anomalies.filter((a) => a.severity === "critical").length,
478
+ major: anomalies.filter((a) => a.severity === "major").length,
479
+ moderate: anomalies.filter((a) => a.severity === "moderate").length,
480
+ minor: anomalies.filter((a) => a.severity === "minor").length,
481
+ };
482
+ return {
483
+ success: true,
484
+ data: {
485
+ alerts: alerts.map((alert) => ({
486
+ ...alert,
487
+ timestamp: new Date(alert.timestamp).toISOString(),
488
+ formattedMessage: formatAlertMessage(alert),
489
+ })),
490
+ anomalies: anomalies.map((anomaly) => ({
491
+ ...anomaly,
492
+ timestamp: new Date(anomaly.timestamp).toISOString(),
493
+ formattedDescription: formatAnomalyDescription(anomaly),
494
+ })),
495
+ summary: {
496
+ alerts: alertSummary,
497
+ anomalies: anomalySummary,
498
+ overallStatus: calculateAlertStatus(alertSummary, anomalySummary),
499
+ },
500
+ metadata: {
501
+ timestamp: new Date().toISOString(),
502
+ filters: { severity, category, site: site || "all" },
503
+ limit,
504
+ },
505
+ },
506
+ };
507
+ });
508
+ }
509
+ /**
510
+ * Get optimization recommendations
511
+ */
512
+ async getOptimizationRecommendations(_client, params) {
513
+ return toolWrapper(async () => {
514
+ const { site, focus = "speed", priority = "all", includeROI = true, includePredictions = true, } = params;
515
+ // Generate optimization plan
516
+ const optimizationPlan = this.analytics.generateOptimizationPlan();
517
+ // Filter by priority
518
+ let recommendations = [];
519
+ if (priority === "quick_wins" || priority === "all") {
520
+ recommendations.push(...optimizationPlan.quickWins.map((r) => ({
521
+ ...r,
522
+ timeline: "quick_wins",
523
+ })));
524
+ }
525
+ if (priority === "medium_term" || priority === "all") {
526
+ recommendations.push(...optimizationPlan.mediumTerm.map((r) => ({
527
+ ...r,
528
+ timeline: "medium_term",
529
+ })));
530
+ }
531
+ if (priority === "long_term" || priority === "all") {
532
+ recommendations.push(...optimizationPlan.longTerm.map((r) => ({
533
+ ...r,
534
+ timeline: "long_term",
535
+ })));
536
+ }
537
+ // Filter by focus area
538
+ if (focus !== "speed") {
539
+ const focusMap = {
540
+ reliability: ["reliability"],
541
+ efficiency: ["cost", "performance"],
542
+ scaling: ["performance", "reliability"],
543
+ };
544
+ const targetImpacts = focusMap[focus] || [];
545
+ recommendations = recommendations.filter((r) => targetImpacts.includes(r.impact));
546
+ }
547
+ // Get predictions if requested
548
+ let predictions = null;
549
+ if (includePredictions) {
550
+ predictions = this.analytics.predictPerformance(60); // 1 hour prediction
551
+ }
552
+ return {
553
+ success: true,
554
+ data: {
555
+ recommendations: recommendations.map((rec) => ({
556
+ ...rec,
557
+ formattedPriority: formatPriority(rec.priority),
558
+ formattedEffort: formatEffort(rec.implementationEffort),
559
+ })),
560
+ roi: includeROI ? optimizationPlan.estimatedROI : null,
561
+ predictions: predictions || null,
562
+ summary: {
563
+ totalRecommendations: recommendations.length,
564
+ quickWins: optimizationPlan.quickWins.length,
565
+ mediumTerm: optimizationPlan.mediumTerm.length,
566
+ longTerm: optimizationPlan.longTerm.length,
567
+ estimatedImpact: calculateEstimatedImpact(recommendations),
568
+ },
569
+ metadata: {
570
+ timestamp: new Date().toISOString(),
571
+ focus,
572
+ priority,
573
+ site: site || "all",
574
+ },
575
+ },
576
+ };
577
+ });
578
+ }
579
+ /**
580
+ * Export comprehensive performance report
581
+ */
582
+ async exportPerformanceReport(_client, params) {
583
+ return toolWrapper(async () => {
584
+ const { site, format = "json", includeHistorical = true, includeAnalytics = true, timeRange = "24h", } = params;
585
+ // Generate comprehensive analytics report
586
+ const report = this.analytics.exportAnalyticsReport();
587
+ // Add additional data based on parameters
588
+ const exportData = {
589
+ metadata: {
590
+ generatedAt: new Date().toISOString(),
591
+ site: site || "all",
592
+ timeRange,
593
+ format,
594
+ version: "1.0.0",
595
+ },
596
+ summary: report.summary,
597
+ currentMetrics: this.collector.collectCurrentMetrics(),
598
+ };
599
+ if (includeHistorical) {
600
+ const timeframMs = parseTimeframe(timeRange);
601
+ const startTime = Date.now() - timeframMs;
602
+ exportData.historicalData = this.monitor.getHistoricalData(startTime);
603
+ }
604
+ if (includeAnalytics) {
605
+ exportData.analytics = {
606
+ trends: report.trends,
607
+ benchmarks: report.benchmarks,
608
+ insights: report.insights,
609
+ anomalies: report.anomalies,
610
+ predictions: report.predictions,
611
+ optimizationPlan: report.optimizationPlan,
612
+ };
613
+ }
614
+ // Add aggregated statistics
615
+ exportData.aggregatedStats = {
616
+ cache: this.collector.getAggregatedCacheStats(),
617
+ client: this.collector.getAggregatedClientStats(),
618
+ };
619
+ // Add site comparison if multi-site
620
+ if (!site) {
621
+ exportData.siteComparison = this.collector.compareSitePerformance();
622
+ }
623
+ // Format output based on requested format
624
+ let formattedOutput;
625
+ if (format === "csv") {
626
+ formattedOutput = convertToCSV(exportData);
627
+ }
628
+ else if (format === "summary") {
629
+ formattedOutput = createSummaryReport(exportData);
630
+ }
631
+ else {
632
+ formattedOutput = exportData;
633
+ }
634
+ return {
635
+ success: true,
636
+ data: formattedOutput,
637
+ metadata: {
638
+ timestamp: new Date().toISOString(),
639
+ format,
640
+ dataSize: JSON.stringify(exportData).length,
641
+ site: site || "all",
642
+ },
643
+ };
644
+ });
645
+ }
646
+ /**
647
+ * Start historical data collection
648
+ */
649
+ startHistoricalDataCollection() {
650
+ // Skip in test environments to prevent performance issues
651
+ if (ConfigHelpers.isTest() || ConfigHelpers.isCI()) {
652
+ this.logger.debug("Skipping historical data collection in test/CI environment");
653
+ return;
654
+ }
655
+ // Adjust collection frequency based on environment
656
+ const interval = ConfigHelpers.isDev() ? 60000 : 30000; // 1 minute in dev, 30 seconds in prod
657
+ this.logger.info("Starting historical data collection", {
658
+ interval: `${interval / 1000}s`,
659
+ environment: ConfigHelpers.get().get().app.nodeEnv,
660
+ });
661
+ this.historicalDataInterval = setInterval(() => {
662
+ try {
663
+ const currentMetrics = this.collector.collectCurrentMetrics();
664
+ this.analytics.addDataPoint(currentMetrics);
665
+ this.logger.debug("Historical metrics collected", {
666
+ timestamp: new Date().toISOString(),
667
+ });
668
+ }
669
+ catch (_error) {
670
+ this.logger.error("Failed to collect historical metrics", {
671
+ _error: _error instanceof Error ? _error.message : String(_error),
672
+ });
673
+ }
674
+ }, interval);
675
+ }
676
+ /**
677
+ * Stop historical data collection and cleanup resources
678
+ */
679
+ destroy() {
680
+ if (this.historicalDataInterval) {
681
+ clearInterval(this.historicalDataInterval);
682
+ this.historicalDataInterval = undefined;
683
+ this.logger.info("Historical data collection stopped");
684
+ }
685
+ }
686
+ }
687
+ //# sourceMappingURL=PerformanceTools.js.map