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.
Files changed (251) hide show
  1. package/README.md +210 -182
  2. package/dist/cache/CacheInvalidation.d.ts +3 -3
  3. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  4. package/dist/cache/CacheInvalidation.js +119 -119
  5. package/dist/cache/CacheInvalidation.js.map +1 -1
  6. package/dist/cache/CacheManager.d.ts +5 -0
  7. package/dist/cache/CacheManager.d.ts.map +1 -1
  8. package/dist/cache/CacheManager.js +26 -16
  9. package/dist/cache/CacheManager.js.map +1 -1
  10. package/dist/cache/HttpCacheWrapper.d.ts +1 -1
  11. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  12. package/dist/cache/HttpCacheWrapper.js +29 -29
  13. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  14. package/dist/cache/__tests__/CacheInvalidation.test.js +96 -94
  15. package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -1
  16. package/dist/cache/__tests__/CacheManager.test.js +113 -113
  17. package/dist/cache/__tests__/CacheManager.test.js.map +1 -1
  18. package/dist/cache/__tests__/CachedWordPressClient.test.js +102 -99
  19. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -1
  20. package/dist/cache/__tests__/HttpCacheWrapper.test.js +98 -95
  21. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
  22. package/dist/cache/index.d.ts +7 -7
  23. package/dist/cache/index.d.ts.map +1 -1
  24. package/dist/cache/index.js +4 -4
  25. package/dist/cache/index.js.map +1 -1
  26. package/dist/client/CachedWordPressClient.d.ts +4 -4
  27. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  28. package/dist/client/CachedWordPressClient.js +55 -51
  29. package/dist/client/CachedWordPressClient.js.map +1 -1
  30. package/dist/client/api.d.ts +10 -10
  31. package/dist/client/api.js +158 -158
  32. package/dist/client/api.js.map +1 -1
  33. package/dist/client/auth.d.ts +2 -2
  34. package/dist/client/auth.js +72 -72
  35. package/dist/client/managers/AuthenticationManager.d.ts +2 -2
  36. package/dist/client/managers/AuthenticationManager.js +46 -46
  37. package/dist/client/managers/BaseManager.d.ts +1 -1
  38. package/dist/client/managers/BaseManager.js +9 -9
  39. package/dist/client/managers/RequestManager.d.ts +5 -3
  40. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  41. package/dist/client/managers/RequestManager.js +39 -19
  42. package/dist/client/managers/RequestManager.js.map +1 -1
  43. package/dist/client/managers/index.d.ts +3 -3
  44. package/dist/client/managers/index.js +3 -3
  45. package/dist/config/ConfigurationSchema.d.ts +2 -2
  46. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  47. package/dist/config/ConfigurationSchema.js +40 -40
  48. package/dist/config/ConfigurationSchema.js.map +1 -1
  49. package/dist/config/ServerConfiguration.d.ts +2 -2
  50. package/dist/config/ServerConfiguration.js +35 -35
  51. package/dist/config/ServerConfiguration.js.map +1 -1
  52. package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
  53. package/dist/docs/DocumentationGenerator.js +296 -255
  54. package/dist/docs/DocumentationGenerator.js.map +1 -1
  55. package/dist/docs/MarkdownFormatter.d.ts +1 -1
  56. package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
  57. package/dist/docs/MarkdownFormatter.js +60 -51
  58. package/dist/docs/MarkdownFormatter.js.map +1 -1
  59. package/dist/docs/index.d.ts +3 -3
  60. package/dist/docs/index.d.ts.map +1 -1
  61. package/dist/docs/index.js +2 -2
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +16 -16
  64. package/dist/index.js.map +1 -1
  65. package/dist/mcp-wordpress-1.3.0.tgz +0 -0
  66. package/dist/performance/MetricsCollector.d.ts +3 -3
  67. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  68. package/dist/performance/MetricsCollector.js +33 -27
  69. package/dist/performance/MetricsCollector.js.map +1 -1
  70. package/dist/performance/PerformanceAnalytics.d.ts +12 -12
  71. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
  72. package/dist/performance/PerformanceAnalytics.js +200 -154
  73. package/dist/performance/PerformanceAnalytics.js.map +1 -1
  74. package/dist/performance/PerformanceMonitor.d.ts +5 -5
  75. package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
  76. package/dist/performance/PerformanceMonitor.js +53 -52
  77. package/dist/performance/PerformanceMonitor.js.map +1 -1
  78. package/dist/performance/index.d.ts +6 -6
  79. package/dist/performance/index.d.ts.map +1 -1
  80. package/dist/performance/index.js +3 -3
  81. package/dist/security/InputValidator.d.ts +1 -1
  82. package/dist/security/InputValidator.d.ts.map +1 -1
  83. package/dist/security/InputValidator.js +111 -88
  84. package/dist/security/InputValidator.js.map +1 -1
  85. package/dist/security/SecurityConfig.d.ts +5 -5
  86. package/dist/security/SecurityConfig.js +92 -92
  87. package/dist/security/SecurityConfig.js.map +1 -1
  88. package/dist/server/ConnectionTester.d.ts +1 -1
  89. package/dist/server/ConnectionTester.d.ts.map +1 -1
  90. package/dist/server/ConnectionTester.js +4 -4
  91. package/dist/server/ConnectionTester.js.map +1 -1
  92. package/dist/server/ToolRegistry.d.ts +2 -2
  93. package/dist/server/ToolRegistry.d.ts.map +1 -1
  94. package/dist/server/ToolRegistry.js +35 -32
  95. package/dist/server/ToolRegistry.js.map +1 -1
  96. package/dist/server.d.ts +2 -2
  97. package/dist/server.js +2 -2
  98. package/dist/tools/BaseToolManager.js +5 -5
  99. package/dist/tools/auth.d.ts +2 -2
  100. package/dist/tools/auth.d.ts.map +1 -1
  101. package/dist/tools/auth.js +32 -31
  102. package/dist/tools/auth.js.map +1 -1
  103. package/dist/tools/cache.d.ts +1 -1
  104. package/dist/tools/cache.d.ts.map +1 -1
  105. package/dist/tools/cache.js +71 -71
  106. package/dist/tools/cache.js.map +1 -1
  107. package/dist/tools/comments.d.ts +2 -2
  108. package/dist/tools/comments.d.ts.map +1 -1
  109. package/dist/tools/comments.js +79 -79
  110. package/dist/tools/comments.js.map +1 -1
  111. package/dist/tools/index.d.ts +10 -10
  112. package/dist/tools/index.js +10 -10
  113. package/dist/tools/media.d.ts +2 -2
  114. package/dist/tools/media.js +80 -80
  115. package/dist/tools/pages.d.ts +2 -2
  116. package/dist/tools/pages.d.ts.map +1 -1
  117. package/dist/tools/pages.js +75 -75
  118. package/dist/tools/pages.js.map +1 -1
  119. package/dist/tools/performance.d.ts +1 -1
  120. package/dist/tools/performance.d.ts.map +1 -1
  121. package/dist/tools/performance.js +311 -287
  122. package/dist/tools/performance.js.map +1 -1
  123. package/dist/tools/posts.d.ts +2 -2
  124. package/dist/tools/posts.d.ts.map +1 -1
  125. package/dist/tools/posts.js +94 -94
  126. package/dist/tools/posts.js.map +1 -1
  127. package/dist/tools/site.d.ts +2 -2
  128. package/dist/tools/site.d.ts.map +1 -1
  129. package/dist/tools/site.js +60 -60
  130. package/dist/tools/site.js.map +1 -1
  131. package/dist/tools/taxonomies.d.ts +2 -2
  132. package/dist/tools/taxonomies.js +89 -89
  133. package/dist/tools/users.d.ts +2 -2
  134. package/dist/tools/users.js +68 -68
  135. package/dist/tools/users.js.map +1 -1
  136. package/dist/types/client.d.ts +13 -13
  137. package/dist/types/client.d.ts.map +1 -1
  138. package/dist/types/client.js +12 -12
  139. package/dist/types/client.js.map +1 -1
  140. package/dist/types/index.d.ts +19 -19
  141. package/dist/types/index.d.ts.map +1 -1
  142. package/dist/types/index.js +3 -3
  143. package/dist/types/mcp.d.ts +7 -7
  144. package/dist/types/wordpress.d.ts +21 -21
  145. package/dist/types/wordpress.d.ts.map +1 -1
  146. package/dist/utils/debug.d.ts +2 -2
  147. package/dist/utils/debug.js +28 -28
  148. package/dist/utils/error.d.ts.map +1 -1
  149. package/dist/utils/error.js +13 -13
  150. package/dist/utils/error.js.map +1 -1
  151. package/dist/utils/toolWrapper.d.ts.map +1 -1
  152. package/dist/utils/toolWrapper.js +5 -5
  153. package/dist/utils/toolWrapper.js.map +1 -1
  154. package/dist/utils/validation.d.ts.map +1 -1
  155. package/dist/utils/validation.js +41 -31
  156. package/dist/utils/validation.js.map +1 -1
  157. package/docs/CACHING.md +36 -2
  158. package/docs/DOCKER.md +24 -18
  159. package/docs/PERFORMANCE_MONITORING.md +49 -1
  160. package/docs/SECURITY_TESTING.md +30 -1
  161. package/docs/api/README.md +9 -1
  162. package/docs/api/summary.json +1 -1
  163. package/docs/contract-testing.md +24 -3
  164. package/docs/developer/GITHUB_ACTIONS_SETUP.md +8 -2
  165. package/docs/developer/MAINTENANCE.md +29 -3
  166. package/docs/developer/MIGRATION_GUIDE.md +13 -1
  167. package/docs/developer/NPM_AUTH_SETUP.md +13 -2
  168. package/docs/developer/REFACTORING.md +31 -1
  169. package/docs/releases/COMMUNITY_ANNOUNCEMENT_v1.1.2.md +18 -7
  170. package/docs/releases/RELEASE_NOTES_v1.1.2.md +31 -5
  171. package/docs/user-guides/DOCKER_SETUP.md +264 -0
  172. package/docs/user-guides/DTX_SETUP.md +327 -0
  173. package/docs/user-guides/NPM_SETUP.md +109 -0
  174. package/docs/user-guides/NPX_SETUP.md +281 -0
  175. package/docs/wordpress-rest-api-authentication-troubleshooting.md +13 -2
  176. package/package.json +27 -8
  177. package/src/cache/CacheInvalidation.ts +140 -132
  178. package/src/cache/CacheManager.ts +40 -29
  179. package/src/cache/HttpCacheWrapper.ts +105 -68
  180. package/src/cache/__tests__/CacheInvalidation.test.ts +123 -118
  181. package/src/cache/__tests__/CacheManager.test.ts +156 -152
  182. package/src/cache/__tests__/CachedWordPressClient.test.ts +131 -116
  183. package/src/cache/__tests__/HttpCacheWrapper.test.ts +118 -115
  184. package/src/cache/index.ts +13 -13
  185. package/src/client/CachedWordPressClient.ts +90 -80
  186. package/src/client/api.ts +205 -205
  187. package/src/client/auth.ts +80 -80
  188. package/src/client/managers/AuthenticationManager.ts +61 -61
  189. package/src/client/managers/BaseManager.ts +11 -11
  190. package/src/client/managers/RequestManager.ts +79 -47
  191. package/src/client/managers/index.ts +3 -3
  192. package/src/config/ConfigurationSchema.ts +44 -44
  193. package/src/config/ServerConfiguration.ts +39 -39
  194. package/src/docs/DocumentationGenerator.ts +402 -295
  195. package/src/docs/MarkdownFormatter.ts +94 -69
  196. package/src/docs/index.ts +4 -4
  197. package/src/index.ts +24 -21
  198. package/src/performance/MetricsCollector.ts +90 -58
  199. package/src/performance/PerformanceAnalytics.ts +386 -262
  200. package/src/performance/PerformanceMonitor.ts +152 -118
  201. package/src/performance/index.ts +9 -9
  202. package/src/security/InputValidator.ts +148 -91
  203. package/src/security/SecurityConfig.ts +94 -94
  204. package/src/server/ConnectionTester.ts +21 -15
  205. package/src/server/ToolRegistry.ts +64 -51
  206. package/src/server.ts +2 -2
  207. package/src/tools/BaseToolManager.ts +6 -6
  208. package/src/tools/auth.ts +42 -37
  209. package/src/tools/cache.ts +85 -81
  210. package/src/tools/comments.ts +93 -91
  211. package/src/tools/index.ts +10 -10
  212. package/src/tools/media.ts +89 -89
  213. package/src/tools/pages.ts +89 -87
  214. package/src/tools/performance.ts +443 -352
  215. package/src/tools/posts.ts +109 -107
  216. package/src/tools/site.ts +86 -77
  217. package/src/tools/taxonomies.ts +102 -102
  218. package/src/tools/users.ts +77 -77
  219. package/src/types/client.ts +157 -60
  220. package/src/types/index.ts +49 -27
  221. package/src/types/mcp.ts +15 -15
  222. package/src/types/wordpress.ts +57 -29
  223. package/src/utils/debug.ts +37 -37
  224. package/src/utils/error.ts +47 -25
  225. package/src/utils/toolWrapper.ts +12 -8
  226. package/src/utils/validation.ts +116 -65
  227. package/dist/client/WordPressClient.d.ts +0 -81
  228. package/dist/client/WordPressClient.d.ts.map +0 -1
  229. package/dist/client/WordPressClient.js +0 -354
  230. package/dist/client/WordPressClient.js.map +0 -1
  231. package/dist/performance/AnomalyDetector.d.ts +0 -63
  232. package/dist/performance/AnomalyDetector.d.ts.map +0 -1
  233. package/dist/performance/AnomalyDetector.js +0 -222
  234. package/dist/performance/AnomalyDetector.js.map +0 -1
  235. package/dist/performance/BenchmarkAnalyzer.d.ts +0 -67
  236. package/dist/performance/BenchmarkAnalyzer.d.ts.map +0 -1
  237. package/dist/performance/BenchmarkAnalyzer.js +0 -301
  238. package/dist/performance/BenchmarkAnalyzer.js.map +0 -1
  239. package/dist/performance/TrendAnalyzer.d.ts +0 -69
  240. package/dist/performance/TrendAnalyzer.d.ts.map +0 -1
  241. package/dist/performance/TrendAnalyzer.js +0 -203
  242. package/dist/performance/TrendAnalyzer.js.map +0 -1
  243. package/dist/tools/BaseToolClass.d.ts +0 -76
  244. package/dist/tools/BaseToolClass.d.ts.map +0 -1
  245. package/dist/tools/BaseToolClass.js +0 -104
  246. package/dist/tools/BaseToolClass.js.map +0 -1
  247. package/dist/tools/base.d.ts +0 -37
  248. package/dist/tools/base.d.ts.map +0 -1
  249. package/dist/tools/base.js +0 -60
  250. package/dist/tools/base.js.map +0 -1
  251. package/docs/user-guides/CLAUDE_DESKTOP_SETUP.md +0 -187
@@ -2,10 +2,10 @@
2
2
  * Performance Monitoring MCP Tools for WordPress Server
3
3
  * Provides comprehensive performance insights and management
4
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';
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
9
  /**
10
10
  * Performance Tools Class
11
11
  */
@@ -18,17 +18,17 @@ export default class PerformanceTools {
18
18
  this.monitor = new PerformanceMonitor({
19
19
  enableRealTimeMonitoring: true,
20
20
  enableHistoricalData: true,
21
- enableAlerts: true
21
+ enableAlerts: true,
22
22
  });
23
23
  this.collector = new MetricsCollector(this.monitor, {
24
24
  enableRealTime: true,
25
25
  enableToolTracking: true,
26
- enableCacheIntegration: true
26
+ enableCacheIntegration: true,
27
27
  });
28
28
  this.analytics = new PerformanceAnalytics(this.collector, {
29
29
  enablePredictiveAnalysis: true,
30
30
  enableAnomalyDetection: true,
31
- enableTrendAnalysis: true
31
+ enableTrendAnalysis: true,
32
32
  });
33
33
  // Register clients if provided
34
34
  if (clients) {
@@ -49,197 +49,197 @@ export default class PerformanceTools {
49
49
  getTools() {
50
50
  return [
51
51
  {
52
- name: 'wp_performance_stats',
53
- description: 'Get real-time performance statistics and metrics',
52
+ name: "wp_performance_stats",
53
+ description: "Get real-time performance statistics and metrics",
54
54
  parameters: [
55
55
  {
56
- name: 'site',
57
- type: 'string',
58
- description: 'Specific site ID for multi-site setups (optional for single site)',
59
- required: false
56
+ name: "site",
57
+ type: "string",
58
+ description: "Specific site ID for multi-site setups (optional for single site)",
59
+ required: false,
60
60
  },
61
61
  {
62
- name: 'category',
63
- type: 'string',
64
- description: 'Category of metrics to return (overview, requests, cache, system, tools, all)',
65
- required: false
62
+ name: "category",
63
+ type: "string",
64
+ description: "Category of metrics to return (overview, requests, cache, system, tools, all)",
65
+ required: false,
66
66
  },
67
67
  {
68
- name: 'format',
69
- type: 'string',
70
- description: 'Detail level of the response (summary, detailed, raw)',
71
- required: false
72
- }
68
+ name: "format",
69
+ type: "string",
70
+ description: "Detail level of the response (summary, detailed, raw)",
71
+ required: false,
72
+ },
73
73
  ],
74
- handler: this.getPerformanceStats.bind(this)
74
+ handler: this.getPerformanceStats.bind(this),
75
75
  },
76
76
  {
77
- name: 'wp_performance_history',
78
- description: 'Get historical performance data and trends',
77
+ name: "wp_performance_history",
78
+ description: "Get historical performance data and trends",
79
79
  parameters: [
80
80
  {
81
- name: 'site',
82
- type: 'string',
83
- description: 'Specific site ID for multi-site setups (optional for single site)',
84
- required: false
81
+ name: "site",
82
+ type: "string",
83
+ description: "Specific site ID for multi-site setups (optional for single site)",
84
+ required: false,
85
85
  },
86
86
  {
87
- name: 'timeframe',
88
- type: 'string',
89
- description: 'Time period for historical data (1h, 6h, 12h, 24h, 7d)',
90
- required: false
87
+ name: "timeframe",
88
+ type: "string",
89
+ description: "Time period for historical data (1h, 6h, 12h, 24h, 7d)",
90
+ required: false,
91
91
  },
92
92
  {
93
- name: 'metrics',
94
- type: 'array',
95
- description: 'Specific metrics to include (responseTime, cacheHitRate, errorRate, memoryUsage, requestVolume)',
96
- required: false
93
+ name: "metrics",
94
+ type: "array",
95
+ description: "Specific metrics to include (responseTime, cacheHitRate, errorRate, memoryUsage, requestVolume)",
96
+ required: false,
97
97
  },
98
98
  {
99
- name: 'includeTrends',
100
- type: 'boolean',
101
- description: 'Include trend analysis (default: true)',
102
- required: false
103
- }
99
+ name: "includeTrends",
100
+ type: "boolean",
101
+ description: "Include trend analysis (default: true)",
102
+ required: false,
103
+ },
104
104
  ],
105
- handler: this.getPerformanceHistory.bind(this)
105
+ handler: this.getPerformanceHistory.bind(this),
106
106
  },
107
107
  {
108
- name: 'wp_performance_benchmark',
109
- description: 'Compare current performance against industry benchmarks',
108
+ name: "wp_performance_benchmark",
109
+ description: "Compare current performance against industry benchmarks",
110
110
  parameters: [
111
111
  {
112
- name: 'site',
113
- type: 'string',
114
- description: 'Specific site ID for multi-site setups (optional for single site)',
115
- required: false
112
+ name: "site",
113
+ type: "string",
114
+ description: "Specific site ID for multi-site setups (optional for single site)",
115
+ required: false,
116
116
  },
117
117
  {
118
- name: 'category',
119
- type: 'string',
120
- description: 'Benchmark category (response_time, cache_performance, error_rate, system_resources, all)',
121
- required: false
118
+ name: "category",
119
+ type: "string",
120
+ description: "Benchmark category (response_time, cache_performance, error_rate, system_resources, all)",
121
+ required: false,
122
122
  },
123
123
  {
124
- name: 'includeRecommendations',
125
- type: 'boolean',
126
- description: 'Include improvement recommendations (default: true)',
127
- required: false
128
- }
124
+ name: "includeRecommendations",
125
+ type: "boolean",
126
+ description: "Include improvement recommendations (default: true)",
127
+ required: false,
128
+ },
129
129
  ],
130
- handler: this.getBenchmarkComparison.bind(this)
130
+ handler: this.getBenchmarkComparison.bind(this),
131
131
  },
132
132
  {
133
- name: 'wp_performance_alerts',
134
- description: 'Get performance alerts and anomaly detection results',
133
+ name: "wp_performance_alerts",
134
+ description: "Get performance alerts and anomaly detection results",
135
135
  parameters: [
136
136
  {
137
- name: 'site',
138
- type: 'string',
139
- description: 'Specific site ID for multi-site setups (optional for single site)',
140
- required: false
137
+ name: "site",
138
+ type: "string",
139
+ description: "Specific site ID for multi-site setups (optional for single site)",
140
+ required: false,
141
141
  },
142
142
  {
143
- name: 'severity',
144
- type: 'string',
145
- description: 'Filter alerts by severity level (info, warning, error, critical)',
146
- required: false
143
+ name: "severity",
144
+ type: "string",
145
+ description: "Filter alerts by severity level (info, warning, error, critical)",
146
+ required: false,
147
147
  },
148
148
  {
149
- name: 'category',
150
- type: 'string',
151
- description: 'Filter alerts by category (performance, cache, system, wordpress)',
152
- required: false
149
+ name: "category",
150
+ type: "string",
151
+ description: "Filter alerts by category (performance, cache, system, wordpress)",
152
+ required: false,
153
153
  },
154
154
  {
155
- name: 'limit',
156
- type: 'number',
157
- description: 'Maximum number of alerts to return (default: 20)',
158
- required: false
155
+ name: "limit",
156
+ type: "number",
157
+ description: "Maximum number of alerts to return (default: 20)",
158
+ required: false,
159
159
  },
160
160
  {
161
- name: 'includeAnomalies',
162
- type: 'boolean',
163
- description: 'Include detected anomalies (default: true)',
164
- required: false
165
- }
161
+ name: "includeAnomalies",
162
+ type: "boolean",
163
+ description: "Include detected anomalies (default: true)",
164
+ required: false,
165
+ },
166
166
  ],
167
- handler: this.getPerformanceAlerts.bind(this)
167
+ handler: this.getPerformanceAlerts.bind(this),
168
168
  },
169
169
  {
170
- name: 'wp_performance_optimize',
171
- description: 'Get optimization recommendations and insights',
170
+ name: "wp_performance_optimize",
171
+ description: "Get optimization recommendations and insights",
172
172
  parameters: [
173
173
  {
174
- name: 'site',
175
- type: 'string',
176
- description: 'Specific site ID for multi-site setups (optional for single site)',
177
- required: false
174
+ name: "site",
175
+ type: "string",
176
+ description: "Specific site ID for multi-site setups (optional for single site)",
177
+ required: false,
178
178
  },
179
179
  {
180
- name: 'focus',
181
- type: 'string',
182
- description: 'Optimization focus area (speed, reliability, efficiency, scaling)',
183
- required: false
180
+ name: "focus",
181
+ type: "string",
182
+ description: "Optimization focus area (speed, reliability, efficiency, scaling)",
183
+ required: false,
184
184
  },
185
185
  {
186
- name: 'priority',
187
- type: 'string',
188
- description: 'Implementation timeline (quick_wins, medium_term, long_term, all)',
189
- required: false
186
+ name: "priority",
187
+ type: "string",
188
+ description: "Implementation timeline (quick_wins, medium_term, long_term, all)",
189
+ required: false,
190
190
  },
191
191
  {
192
- name: 'includeROI',
193
- type: 'boolean',
194
- description: 'Include ROI estimates (default: true)',
195
- required: false
192
+ name: "includeROI",
193
+ type: "boolean",
194
+ description: "Include ROI estimates (default: true)",
195
+ required: false,
196
196
  },
197
197
  {
198
- name: 'includePredictions',
199
- type: 'boolean',
200
- description: 'Include performance predictions (default: true)',
201
- required: false
202
- }
198
+ name: "includePredictions",
199
+ type: "boolean",
200
+ description: "Include performance predictions (default: true)",
201
+ required: false,
202
+ },
203
203
  ],
204
- handler: this.getOptimizationRecommendations.bind(this)
204
+ handler: this.getOptimizationRecommendations.bind(this),
205
205
  },
206
206
  {
207
- name: 'wp_performance_export',
208
- description: 'Export comprehensive performance report',
207
+ name: "wp_performance_export",
208
+ description: "Export comprehensive performance report",
209
209
  parameters: [
210
210
  {
211
- name: 'site',
212
- type: 'string',
213
- description: 'Specific site ID for multi-site setups (optional for single site)',
214
- required: false
211
+ name: "site",
212
+ type: "string",
213
+ description: "Specific site ID for multi-site setups (optional for single site)",
214
+ required: false,
215
215
  },
216
216
  {
217
- name: 'format',
218
- type: 'string',
219
- description: 'Export format (json, csv, summary)',
220
- required: false
217
+ name: "format",
218
+ type: "string",
219
+ description: "Export format (json, csv, summary)",
220
+ required: false,
221
221
  },
222
222
  {
223
- name: 'includeHistorical',
224
- type: 'boolean',
225
- description: 'Include historical data (default: true)',
226
- required: false
223
+ name: "includeHistorical",
224
+ type: "boolean",
225
+ description: "Include historical data (default: true)",
226
+ required: false,
227
227
  },
228
228
  {
229
- name: 'includeAnalytics',
230
- type: 'boolean',
231
- description: 'Include analytics and insights (default: true)',
232
- required: false
229
+ name: "includeAnalytics",
230
+ type: "boolean",
231
+ description: "Include analytics and insights (default: true)",
232
+ required: false,
233
233
  },
234
234
  {
235
- name: 'timeRange',
236
- type: 'string',
237
- description: 'Time range for data export (1h, 6h, 24h, 7d, 30d)',
238
- required: false
239
- }
235
+ name: "timeRange",
236
+ type: "string",
237
+ description: "Time range for data export (1h, 6h, 24h, 7d, 30d)",
238
+ required: false,
239
+ },
240
240
  ],
241
- handler: this.exportPerformanceReport.bind(this)
242
- }
241
+ handler: this.exportPerformanceReport.bind(this),
242
+ },
243
243
  ];
244
244
  }
245
245
  /**
@@ -247,7 +247,7 @@ export default class PerformanceTools {
247
247
  */
248
248
  async getPerformanceStats(params) {
249
249
  return toolWrapper(async () => {
250
- const { site, category = 'overview', format = 'summary' } = params;
250
+ const { site, category = "overview", format = "summary" } = params;
251
251
  // Get current metrics
252
252
  const metrics = this.collector.collectCurrentMetrics();
253
253
  // Get site-specific metrics if requested
@@ -257,7 +257,7 @@ export default class PerformanceTools {
257
257
  }
258
258
  // Filter by category
259
259
  const result = {};
260
- if (category === 'overview' || category === 'all') {
260
+ if (category === "overview" || category === "all") {
261
261
  result.overview = {
262
262
  overallHealth: this.calculateHealthStatus(metrics),
263
263
  performanceScore: this.calculatePerformanceScore(metrics),
@@ -265,35 +265,35 @@ export default class PerformanceTools {
265
265
  averageResponseTime: `${metrics.requests.averageResponseTime.toFixed(0)}ms`,
266
266
  cacheHitRate: `${(metrics.cache.hitRate * 100).toFixed(1)}%`,
267
267
  errorRate: `${((metrics.requests.failed / Math.max(metrics.requests.total, 1)) * 100).toFixed(2)}%`,
268
- uptime: this.formatUptime(metrics.system.uptime)
268
+ uptime: this.formatUptime(metrics.system.uptime),
269
269
  };
270
270
  }
271
- if (category === 'requests' || category === 'all') {
271
+ if (category === "requests" || category === "all") {
272
272
  result.requests = {
273
273
  ...metrics.requests,
274
274
  requestsPerSecond: metrics.requests.requestsPerSecond.toFixed(2),
275
275
  p50ResponseTime: `${metrics.requests.p50ResponseTime}ms`,
276
276
  p95ResponseTime: `${metrics.requests.p95ResponseTime}ms`,
277
- p99ResponseTime: `${metrics.requests.p99ResponseTime}ms`
277
+ p99ResponseTime: `${metrics.requests.p99ResponseTime}ms`,
278
278
  };
279
279
  }
280
- if (category === 'cache' || category === 'all') {
280
+ if (category === "cache" || category === "all") {
281
281
  result.cache = {
282
282
  ...metrics.cache,
283
283
  hitRate: `${(metrics.cache.hitRate * 100).toFixed(1)}%`,
284
284
  memoryUsage: `${metrics.cache.memoryUsageMB.toFixed(1)}MB`,
285
- efficiency: this.calculateCacheEfficiency(metrics.cache)
285
+ efficiency: this.calculateCacheEfficiency(metrics.cache),
286
286
  };
287
287
  }
288
- if (category === 'system' || category === 'all') {
288
+ if (category === "system" || category === "all") {
289
289
  result.system = {
290
290
  ...metrics.system,
291
291
  memoryUsage: `${metrics.system.memoryUsage}%`,
292
292
  cpuUsage: `${metrics.system.cpuUsage}%`,
293
- uptime: this.formatUptime(metrics.system.uptime)
293
+ uptime: this.formatUptime(metrics.system.uptime),
294
294
  };
295
295
  }
296
- if (category === 'tools' || category === 'all') {
296
+ if (category === "tools" || category === "all") {
297
297
  result.tools = {
298
298
  mostUsedTool: metrics.tools.mostUsedTool,
299
299
  totalToolCalls: Object.values(metrics.tools.toolUsageCount).reduce((sum, count) => sum + count, 0),
@@ -301,7 +301,7 @@ export default class PerformanceTools {
301
301
  .sort(([, a], [, b]) => b - a)
302
302
  .slice(0, 5)
303
303
  .map(([tool, count]) => ({ tool, count })),
304
- toolPerformance: format === 'detailed' ? metrics.tools.toolPerformance : undefined
304
+ toolPerformance: format === "detailed" ? metrics.tools.toolPerformance : undefined,
305
305
  };
306
306
  }
307
307
  // Add site-specific data if requested
@@ -309,7 +309,7 @@ export default class PerformanceTools {
309
309
  result.siteSpecific = {
310
310
  siteId: site,
311
311
  cache: siteMetrics.cache,
312
- client: siteMetrics.client
312
+ client: siteMetrics.client,
313
313
  };
314
314
  }
315
315
  // Add metadata
@@ -317,12 +317,12 @@ export default class PerformanceTools {
317
317
  timestamp: new Date().toISOString(),
318
318
  category,
319
319
  format,
320
- site: site || 'all',
321
- monitoringEnabled: true
320
+ site: site || "all",
321
+ monitoringEnabled: true,
322
322
  };
323
323
  return {
324
324
  success: true,
325
- data: result
325
+ data: result,
326
326
  };
327
327
  });
328
328
  }
@@ -331,7 +331,7 @@ export default class PerformanceTools {
331
331
  */
332
332
  async getPerformanceHistory(params) {
333
333
  return toolWrapper(async () => {
334
- const { site, timeframe = '24h', metrics: requestedMetrics, includeTrends = true } = params;
334
+ const { site, timeframe = "24h", metrics: requestedMetrics, includeTrends = true, } = params;
335
335
  // Convert timeframe to milliseconds
336
336
  const timeframMs = this.parseTimeframe(timeframe);
337
337
  const startTime = Date.now() - timeframMs;
@@ -345,7 +345,7 @@ export default class PerformanceTools {
345
345
  trends = this.analytics.analyzeTrends();
346
346
  // Filter trends by requested metrics
347
347
  if (requestedMetrics && Array.isArray(requestedMetrics)) {
348
- trends = trends.filter(trend => requestedMetrics.includes(trend.metric));
348
+ trends = trends.filter((trend) => requestedMetrics.includes(trend.metric));
349
349
  }
350
350
  }
351
351
  // Process historical data for charting
@@ -358,17 +358,17 @@ export default class PerformanceTools {
358
358
  historicalData: chartData,
359
359
  trends: trends || [],
360
360
  summary: {
361
- averageResponseTime: this.calculateAverage(historicalData.map(d => d.requests.averageResponseTime)),
362
- averageCacheHitRate: this.calculateAverage(historicalData.map(d => d.cache.hitRate)),
363
- averageErrorRate: this.calculateAverage(historicalData.map(d => d.requests.total > 0 ? d.requests.failed / d.requests.total : 0)),
364
- totalRequests: historicalData.reduce((sum, d) => sum + d.requests.total, 0)
361
+ averageResponseTime: this.calculateAverage(historicalData.map((d) => d.requests.averageResponseTime)),
362
+ averageCacheHitRate: this.calculateAverage(historicalData.map((d) => d.cache.hitRate)),
363
+ averageErrorRate: this.calculateAverage(historicalData.map((d) => d.requests.total > 0 ? d.requests.failed / d.requests.total : 0)),
364
+ totalRequests: historicalData.reduce((sum, d) => sum + d.requests.total, 0),
365
365
  },
366
366
  metadata: {
367
367
  timestamp: new Date().toISOString(),
368
- site: site || 'all',
369
- requestedMetrics: requestedMetrics || ['all']
370
- }
371
- }
368
+ site: site || "all",
369
+ requestedMetrics: requestedMetrics || ["all"],
370
+ },
371
+ },
372
372
  };
373
373
  });
374
374
  }
@@ -377,21 +377,21 @@ export default class PerformanceTools {
377
377
  */
378
378
  async getBenchmarkComparison(params) {
379
379
  return toolWrapper(async () => {
380
- const { site, category = 'all', includeRecommendations = true } = params;
380
+ const { site, category = "all", includeRecommendations = true } = params;
381
381
  // Get benchmark comparisons
382
382
  const benchmarks = this.analytics.benchmarkPerformance();
383
383
  // Filter by category if specified
384
384
  let filteredBenchmarks = benchmarks;
385
- if (category !== 'all') {
385
+ if (category !== "all") {
386
386
  const categoryMap = {
387
- 'response_time': 'Response Time',
388
- 'cache_performance': 'Cache Hit Rate',
389
- 'error_rate': 'Error Rate',
390
- 'system_resources': 'Memory Usage'
387
+ response_time: "Response Time",
388
+ cache_performance: "Cache Hit Rate",
389
+ error_rate: "Error Rate",
390
+ system_resources: "Memory Usage",
391
391
  };
392
392
  const targetCategory = categoryMap[category];
393
393
  if (targetCategory) {
394
- filteredBenchmarks = benchmarks.filter(b => b.category === targetCategory);
394
+ filteredBenchmarks = benchmarks.filter((b) => b.category === targetCategory);
395
395
  }
396
396
  }
397
397
  // Get recommendations if requested
@@ -399,35 +399,37 @@ export default class PerformanceTools {
399
399
  if (includeRecommendations) {
400
400
  const insights = this.analytics.generateInsights();
401
401
  recommendations = insights
402
- .filter(insight => insight.category === 'optimization')
403
- .map(insight => ({
402
+ .filter((insight) => insight.category === "optimization")
403
+ .map((insight) => ({
404
404
  title: insight.title,
405
405
  description: insight.description,
406
406
  priority: insight.priority,
407
407
  estimatedImprovement: insight.estimatedImprovement,
408
- implementationEffort: insight.implementationEffort
408
+ implementationEffort: insight.implementationEffort,
409
409
  }));
410
410
  }
411
411
  return {
412
412
  success: true,
413
413
  data: {
414
- benchmarks: filteredBenchmarks.map(benchmark => ({
414
+ benchmarks: filteredBenchmarks.map((benchmark) => ({
415
415
  ...benchmark,
416
416
  status: this.formatBenchmarkStatus(benchmark.status),
417
- improvement: benchmark.improvement > 0 ? {
418
- needed: benchmark.improvement,
419
- description: this.getBenchmarkImprovementDescription(benchmark)
420
- } : null
417
+ improvement: benchmark.improvement > 0
418
+ ? {
419
+ needed: benchmark.improvement,
420
+ description: this.getBenchmarkImprovementDescription(benchmark),
421
+ }
422
+ : null,
421
423
  })),
422
424
  overallRanking: this.calculateOverallRanking(benchmarks),
423
425
  recommendations: recommendations || [],
424
426
  metadata: {
425
427
  timestamp: new Date().toISOString(),
426
428
  category,
427
- site: site || 'all',
428
- benchmarkVersion: '2024-industry-standards'
429
- }
430
- }
429
+ site: site || "all",
430
+ benchmarkVersion: "2024-industry-standards",
431
+ },
432
+ },
431
433
  };
432
434
  });
433
435
  }
@@ -436,12 +438,12 @@ export default class PerformanceTools {
436
438
  */
437
439
  async getPerformanceAlerts(params) {
438
440
  return toolWrapper(async () => {
439
- const { site, severity, category, limit = 20, includeAnomalies = true } = params;
441
+ const { site, severity, category, limit = 20, includeAnomalies = true, } = params;
440
442
  // Get alerts from monitor
441
443
  let alerts = this.monitor.getAlerts(severity);
442
444
  // Filter by category if specified
443
445
  if (category) {
444
- alerts = alerts.filter(alert => alert.category === category);
446
+ alerts = alerts.filter((alert) => alert.category === category);
445
447
  }
446
448
  // Limit results
447
449
  alerts = alerts.slice(-limit);
@@ -453,42 +455,42 @@ export default class PerformanceTools {
453
455
  // Calculate alert summary
454
456
  const alertSummary = {
455
457
  total: alerts.length,
456
- critical: alerts.filter(a => a.severity === 'critical').length,
457
- error: alerts.filter(a => a.severity === 'error').length,
458
- warning: alerts.filter(a => a.severity === 'warning').length,
459
- info: alerts.filter(a => a.severity === 'info').length
458
+ critical: alerts.filter((a) => a.severity === "critical").length,
459
+ error: alerts.filter((a) => a.severity === "error").length,
460
+ warning: alerts.filter((a) => a.severity === "warning").length,
461
+ info: alerts.filter((a) => a.severity === "info").length,
460
462
  };
461
463
  const anomalySummary = {
462
464
  total: anomalies.length,
463
- critical: anomalies.filter(a => a.severity === 'critical').length,
464
- major: anomalies.filter(a => a.severity === 'major').length,
465
- moderate: anomalies.filter(a => a.severity === 'moderate').length,
466
- minor: anomalies.filter(a => a.severity === 'minor').length
465
+ critical: anomalies.filter((a) => a.severity === "critical").length,
466
+ major: anomalies.filter((a) => a.severity === "major").length,
467
+ moderate: anomalies.filter((a) => a.severity === "moderate").length,
468
+ minor: anomalies.filter((a) => a.severity === "minor").length,
467
469
  };
468
470
  return {
469
471
  success: true,
470
472
  data: {
471
- alerts: alerts.map(alert => ({
473
+ alerts: alerts.map((alert) => ({
472
474
  ...alert,
473
475
  timestamp: new Date(alert.timestamp).toISOString(),
474
- formattedMessage: this.formatAlertMessage(alert)
476
+ formattedMessage: this.formatAlertMessage(alert),
475
477
  })),
476
- anomalies: anomalies.map(anomaly => ({
478
+ anomalies: anomalies.map((anomaly) => ({
477
479
  ...anomaly,
478
480
  timestamp: new Date(anomaly.timestamp).toISOString(),
479
- formattedDescription: this.formatAnomalyDescription(anomaly)
481
+ formattedDescription: this.formatAnomalyDescription(anomaly),
480
482
  })),
481
483
  summary: {
482
484
  alerts: alertSummary,
483
485
  anomalies: anomalySummary,
484
- overallStatus: this.calculateAlertStatus(alertSummary, anomalySummary)
486
+ overallStatus: this.calculateAlertStatus(alertSummary, anomalySummary),
485
487
  },
486
488
  metadata: {
487
489
  timestamp: new Date().toISOString(),
488
- filters: { severity, category, site: site || 'all' },
489
- limit
490
- }
491
- }
490
+ filters: { severity, category, site: site || "all" },
491
+ limit,
492
+ },
493
+ },
492
494
  };
493
495
  });
494
496
  }
@@ -497,29 +499,38 @@ export default class PerformanceTools {
497
499
  */
498
500
  async getOptimizationRecommendations(params) {
499
501
  return toolWrapper(async () => {
500
- const { site, focus = 'speed', priority = 'all', includeROI = true, includePredictions = true } = params;
502
+ const { site, focus = "speed", priority = "all", includeROI = true, includePredictions = true, } = params;
501
503
  // Generate optimization plan
502
504
  const optimizationPlan = this.analytics.generateOptimizationPlan();
503
505
  // Filter by priority
504
506
  let recommendations = [];
505
- if (priority === 'quick_wins' || priority === 'all') {
506
- recommendations.push(...optimizationPlan.quickWins.map(r => ({ ...r, timeline: 'quick_wins' })));
507
+ if (priority === "quick_wins" || priority === "all") {
508
+ recommendations.push(...optimizationPlan.quickWins.map((r) => ({
509
+ ...r,
510
+ timeline: "quick_wins",
511
+ })));
507
512
  }
508
- if (priority === 'medium_term' || priority === 'all') {
509
- recommendations.push(...optimizationPlan.mediumTerm.map(r => ({ ...r, timeline: 'medium_term' })));
513
+ if (priority === "medium_term" || priority === "all") {
514
+ recommendations.push(...optimizationPlan.mediumTerm.map((r) => ({
515
+ ...r,
516
+ timeline: "medium_term",
517
+ })));
510
518
  }
511
- if (priority === 'long_term' || priority === 'all') {
512
- recommendations.push(...optimizationPlan.longTerm.map(r => ({ ...r, timeline: 'long_term' })));
519
+ if (priority === "long_term" || priority === "all") {
520
+ recommendations.push(...optimizationPlan.longTerm.map((r) => ({
521
+ ...r,
522
+ timeline: "long_term",
523
+ })));
513
524
  }
514
525
  // Filter by focus area
515
- if (focus !== 'speed') {
526
+ if (focus !== "speed") {
516
527
  const focusMap = {
517
- reliability: ['reliability'],
518
- efficiency: ['cost', 'performance'],
519
- scaling: ['performance', 'reliability']
528
+ reliability: ["reliability"],
529
+ efficiency: ["cost", "performance"],
530
+ scaling: ["performance", "reliability"],
520
531
  };
521
532
  const targetImpacts = focusMap[focus] || [];
522
- recommendations = recommendations.filter(r => targetImpacts.includes(r.impact));
533
+ recommendations = recommendations.filter((r) => targetImpacts.includes(r.impact));
523
534
  }
524
535
  // Get predictions if requested
525
536
  let predictions = null;
@@ -529,10 +540,10 @@ export default class PerformanceTools {
529
540
  return {
530
541
  success: true,
531
542
  data: {
532
- recommendations: recommendations.map(rec => ({
543
+ recommendations: recommendations.map((rec) => ({
533
544
  ...rec,
534
545
  formattedPriority: this.formatPriority(rec.priority),
535
- formattedEffort: this.formatEffort(rec.implementationEffort)
546
+ formattedEffort: this.formatEffort(rec.implementationEffort),
536
547
  })),
537
548
  roi: includeROI ? optimizationPlan.estimatedROI : null,
538
549
  predictions: predictions || null,
@@ -541,15 +552,15 @@ export default class PerformanceTools {
541
552
  quickWins: optimizationPlan.quickWins.length,
542
553
  mediumTerm: optimizationPlan.mediumTerm.length,
543
554
  longTerm: optimizationPlan.longTerm.length,
544
- estimatedImpact: this.calculateEstimatedImpact(recommendations)
555
+ estimatedImpact: this.calculateEstimatedImpact(recommendations),
545
556
  },
546
557
  metadata: {
547
558
  timestamp: new Date().toISOString(),
548
559
  focus,
549
560
  priority,
550
- site: site || 'all'
551
- }
552
- }
561
+ site: site || "all",
562
+ },
563
+ },
553
564
  };
554
565
  });
555
566
  }
@@ -558,20 +569,20 @@ export default class PerformanceTools {
558
569
  */
559
570
  async exportPerformanceReport(params) {
560
571
  return toolWrapper(async () => {
561
- const { site, format = 'json', includeHistorical = true, includeAnalytics = true, timeRange = '24h' } = params;
572
+ const { site, format = "json", includeHistorical = true, includeAnalytics = true, timeRange = "24h", } = params;
562
573
  // Generate comprehensive analytics report
563
574
  const report = this.analytics.exportAnalyticsReport();
564
575
  // Add additional data based on parameters
565
576
  const exportData = {
566
577
  metadata: {
567
578
  generatedAt: new Date().toISOString(),
568
- site: site || 'all',
579
+ site: site || "all",
569
580
  timeRange,
570
581
  format,
571
- version: '1.0.0'
582
+ version: "1.0.0",
572
583
  },
573
584
  summary: report.summary,
574
- currentMetrics: this.collector.collectCurrentMetrics()
585
+ currentMetrics: this.collector.collectCurrentMetrics(),
575
586
  };
576
587
  if (includeHistorical) {
577
588
  const timeframMs = this.parseTimeframe(timeRange);
@@ -585,13 +596,13 @@ export default class PerformanceTools {
585
596
  insights: report.insights,
586
597
  anomalies: report.anomalies,
587
598
  predictions: report.predictions,
588
- optimizationPlan: report.optimizationPlan
599
+ optimizationPlan: report.optimizationPlan,
589
600
  };
590
601
  }
591
602
  // Add aggregated statistics
592
603
  exportData.aggregatedStats = {
593
604
  cache: this.collector.getAggregatedCacheStats(),
594
- client: this.collector.getAggregatedClientStats()
605
+ client: this.collector.getAggregatedClientStats(),
595
606
  };
596
607
  // Add site comparison if multi-site
597
608
  if (!site) {
@@ -599,10 +610,10 @@ export default class PerformanceTools {
599
610
  }
600
611
  // Format output based on requested format
601
612
  let formattedOutput;
602
- if (format === 'csv') {
613
+ if (format === "csv") {
603
614
  formattedOutput = this.convertToCSV(exportData);
604
615
  }
605
- else if (format === 'summary') {
616
+ else if (format === "summary") {
606
617
  formattedOutput = this.createSummaryReport(exportData);
607
618
  }
608
619
  else {
@@ -615,8 +626,8 @@ export default class PerformanceTools {
615
626
  timestamp: new Date().toISOString(),
616
627
  format,
617
628
  dataSize: JSON.stringify(exportData).length,
618
- site: site || 'all'
619
- }
629
+ site: site || "all",
630
+ },
620
631
  };
621
632
  });
622
633
  }
@@ -639,14 +650,14 @@ export default class PerformanceTools {
639
650
  if (metrics.system.memoryUsage > 85)
640
651
  score -= 15;
641
652
  if (score >= 90)
642
- return 'Excellent';
653
+ return "Excellent";
643
654
  if (score >= 75)
644
- return 'Good';
655
+ return "Good";
645
656
  if (score >= 60)
646
- return 'Fair';
657
+ return "Fair";
647
658
  if (score >= 40)
648
- return 'Poor';
649
- return 'Critical';
659
+ return "Poor";
660
+ return "Critical";
650
661
  }
651
662
  calculatePerformanceScore(metrics) {
652
663
  let score = 100;
@@ -680,16 +691,16 @@ export default class PerformanceTools {
680
691
  return Math.max(0, Math.min(100, score));
681
692
  }
682
693
  calculateCacheEfficiency(cacheMetrics) {
683
- const efficiency = (cacheMetrics.hitRate * 100) +
694
+ const efficiency = cacheMetrics.hitRate * 100 +
684
695
  (cacheMetrics.totalSize > 0 ? 10 : 0) -
685
696
  (cacheMetrics.evictions > 100 ? 10 : 0);
686
697
  if (efficiency >= 95)
687
- return 'Excellent';
698
+ return "Excellent";
688
699
  if (efficiency >= 85)
689
- return 'Good';
700
+ return "Good";
690
701
  if (efficiency >= 70)
691
- return 'Fair';
692
- return 'Poor';
702
+ return "Fair";
703
+ return "Poor";
693
704
  }
694
705
  formatUptime(uptimeMs) {
695
706
  const seconds = Math.floor(uptimeMs / 1000);
@@ -706,38 +717,51 @@ export default class PerformanceTools {
706
717
  }
707
718
  parseTimeframe(timeframe) {
708
719
  const map = {
709
- '1h': 60 * 60 * 1000,
710
- '6h': 6 * 60 * 60 * 1000,
711
- '12h': 12 * 60 * 60 * 1000,
712
- '24h': 24 * 60 * 60 * 1000,
713
- '7d': 7 * 24 * 60 * 60 * 1000,
714
- '30d': 30 * 24 * 60 * 60 * 1000
720
+ "1h": 60 * 60 * 1000,
721
+ "6h": 6 * 60 * 60 * 1000,
722
+ "12h": 12 * 60 * 60 * 1000,
723
+ "24h": 24 * 60 * 60 * 1000,
724
+ "7d": 7 * 24 * 60 * 60 * 1000,
725
+ "30d": 30 * 24 * 60 * 60 * 1000,
715
726
  };
716
- return map[timeframe] || map['24h'];
727
+ return map[timeframe] || map["24h"];
717
728
  }
718
729
  processHistoricalDataForChart(data, requestedMetrics) {
719
730
  if (!data.length)
720
731
  return {};
721
- const allMetrics = ['responseTime', 'cacheHitRate', 'errorRate', 'memoryUsage', 'requestVolume'];
732
+ const allMetrics = [
733
+ "responseTime",
734
+ "cacheHitRate",
735
+ "errorRate",
736
+ "memoryUsage",
737
+ "requestVolume",
738
+ ];
722
739
  const metricsToProcess = requestedMetrics || allMetrics;
723
740
  const result = {};
724
741
  for (const metric of metricsToProcess) {
725
742
  result[metric] = data.map((point, index) => ({
726
743
  timestamp: point.system.uptime,
727
744
  value: this.extractMetricValue(point, metric),
728
- index
745
+ index,
729
746
  }));
730
747
  }
731
748
  return result;
732
749
  }
733
750
  extractMetricValue(dataPoint, metric) {
734
751
  switch (metric) {
735
- case 'responseTime': return dataPoint.requests.averageResponseTime;
736
- case 'cacheHitRate': return dataPoint.cache.hitRate * 100;
737
- case 'errorRate': return (dataPoint.requests.failed / Math.max(dataPoint.requests.total, 1)) * 100;
738
- case 'memoryUsage': return dataPoint.system.memoryUsage;
739
- case 'requestVolume': return dataPoint.requests.requestsPerSecond;
740
- default: return 0;
752
+ case "responseTime":
753
+ return dataPoint.requests.averageResponseTime;
754
+ case "cacheHitRate":
755
+ return dataPoint.cache.hitRate * 100;
756
+ case "errorRate":
757
+ return ((dataPoint.requests.failed / Math.max(dataPoint.requests.total, 1)) *
758
+ 100);
759
+ case "memoryUsage":
760
+ return dataPoint.system.memoryUsage;
761
+ case "requestVolume":
762
+ return dataPoint.requests.requestsPerSecond;
763
+ default:
764
+ return 0;
741
765
  }
742
766
  }
743
767
  calculateAverage(values) {
@@ -747,97 +771,97 @@ export default class PerformanceTools {
747
771
  }
748
772
  formatBenchmarkStatus(status) {
749
773
  const statusMap = {
750
- 'excellent': '🟢 Excellent',
751
- 'good': '🟡 Good',
752
- 'average': '🟠 Average',
753
- 'below_average': '🔴 Below Average',
754
- 'poor': '⚫ Poor'
774
+ excellent: "🟢 Excellent",
775
+ good: "🟡 Good",
776
+ average: "🟠 Average",
777
+ below_average: "🔴 Below Average",
778
+ poor: "⚫ Poor",
755
779
  };
756
780
  return statusMap[status] || status;
757
781
  }
758
782
  getBenchmarkImprovementDescription(benchmark) {
759
783
  const improvements = {
760
- 'Response Time': `Reduce by ${benchmark.improvement.toFixed(0)}ms`,
761
- 'Cache Hit Rate': `Increase by ${benchmark.improvement.toFixed(1)}%`,
762
- 'Error Rate': `Reduce by ${benchmark.improvement.toFixed(2)}%`,
763
- 'Memory Usage': `Reduce by ${benchmark.improvement.toFixed(0)}%`
784
+ "Response Time": `Reduce by ${benchmark.improvement.toFixed(0)}ms`,
785
+ "Cache Hit Rate": `Increase by ${benchmark.improvement.toFixed(1)}%`,
786
+ "Error Rate": `Reduce by ${benchmark.improvement.toFixed(2)}%`,
787
+ "Memory Usage": `Reduce by ${benchmark.improvement.toFixed(0)}%`,
764
788
  };
765
- return improvements[benchmark.category] || `Improve by ${benchmark.improvement}`;
789
+ return (improvements[benchmark.category] || `Improve by ${benchmark.improvement}`);
766
790
  }
767
791
  calculateOverallRanking(benchmarks) {
768
- const statuses = benchmarks.map(b => b.status);
769
- const excellentCount = statuses.filter(s => s === 'excellent').length;
770
- const goodCount = statuses.filter(s => s === 'good').length;
792
+ const statuses = benchmarks.map((b) => b.status);
793
+ const excellentCount = statuses.filter((s) => s === "excellent").length;
794
+ const goodCount = statuses.filter((s) => s === "good").length;
771
795
  const percentile = ((excellentCount + goodCount * 0.8) / statuses.length) * 100;
772
- let status = 'Needs Improvement';
796
+ let status = "Needs Improvement";
773
797
  if (percentile >= 90)
774
- status = 'Top Performer';
798
+ status = "Top Performer";
775
799
  else if (percentile >= 75)
776
- status = 'Above Average';
800
+ status = "Above Average";
777
801
  else if (percentile >= 50)
778
- status = 'Average';
802
+ status = "Average";
779
803
  return { percentile: Math.round(percentile), status };
780
804
  }
781
805
  formatAlertMessage(alert) {
782
806
  return `${alert.severity.toUpperCase()}: ${alert.message} (${alert.metric}: ${alert.actualValue} vs threshold: ${alert.threshold})`;
783
807
  }
784
808
  formatAnomalyDescription(anomaly) {
785
- const direction = anomaly.actualValue > anomaly.expectedValue ? 'higher' : 'lower';
809
+ const direction = anomaly.actualValue > anomaly.expectedValue ? "higher" : "lower";
786
810
  return `${anomaly.metric} is ${Math.abs(anomaly.deviation).toFixed(1)}% ${direction} than expected (${anomaly.expectedValue.toFixed(2)} vs ${anomaly.actualValue.toFixed(2)})`;
787
811
  }
788
812
  calculateAlertStatus(alertSummary, anomalySummary) {
789
813
  const critical = alertSummary.critical + anomalySummary.critical;
790
814
  const high = alertSummary.error + anomalySummary.major;
791
815
  if (critical > 0)
792
- return 'Critical Issues Detected';
816
+ return "Critical Issues Detected";
793
817
  if (high > 2)
794
- return 'High Priority Issues';
818
+ return "High Priority Issues";
795
819
  if (alertSummary.warning + anomalySummary.moderate > 5)
796
- return 'Performance Warnings';
797
- return 'System Healthy';
820
+ return "Performance Warnings";
821
+ return "System Healthy";
798
822
  }
799
823
  formatPriority(priority) {
800
824
  const map = {
801
- 'critical': '🔴 Critical',
802
- 'high': '🟠 High',
803
- 'medium': '🟡 Medium',
804
- 'low': '🟢 Low'
825
+ critical: "🔴 Critical",
826
+ high: "🟠 High",
827
+ medium: "🟡 Medium",
828
+ low: "🟢 Low",
805
829
  };
806
830
  return map[priority] || priority;
807
831
  }
808
832
  formatEffort(effort) {
809
833
  const map = {
810
- 'low': '⚡ Low Effort',
811
- 'medium': '⚖️ Medium Effort',
812
- 'high': '🏋️ High Effort'
834
+ low: "⚡ Low Effort",
835
+ medium: "⚖️ Medium Effort",
836
+ high: "🏋️ High Effort",
813
837
  };
814
838
  return map[effort] || effort;
815
839
  }
816
840
  calculateEstimatedImpact(recommendations) {
817
- const highImpact = recommendations.filter(r => ['critical', 'high'].includes(r.priority)).length;
841
+ const highImpact = recommendations.filter((r) => ["critical", "high"].includes(r.priority)).length;
818
842
  const totalImpact = recommendations.length;
819
843
  if (highImpact >= 3)
820
- return 'Significant Performance Gains Expected';
844
+ return "Significant Performance Gains Expected";
821
845
  if (totalImpact >= 5)
822
- return 'Moderate Performance Improvements';
846
+ return "Moderate Performance Improvements";
823
847
  if (totalImpact > 0)
824
- return 'Minor Performance Optimizations';
825
- return 'System Already Optimized';
848
+ return "Minor Performance Optimizations";
849
+ return "System Already Optimized";
826
850
  }
827
851
  convertToCSV(data) {
828
852
  // Simplified CSV conversion for current metrics
829
853
  const metrics = data.currentMetrics;
830
854
  const csv = [
831
- 'Metric,Value,Unit',
855
+ "Metric,Value,Unit",
832
856
  `Total Requests,${metrics.requests.total},count`,
833
857
  `Average Response Time,${metrics.requests.averageResponseTime.toFixed(0)},ms`,
834
858
  `Success Rate,${((metrics.requests.successful / Math.max(metrics.requests.total, 1)) * 100).toFixed(1)},%`,
835
859
  `Cache Hit Rate,${(metrics.cache.hitRate * 100).toFixed(1)},%`,
836
860
  `Cache Size,${metrics.cache.totalSize},entries`,
837
861
  `Memory Usage,${metrics.system.memoryUsage},percent`,
838
- `Uptime,${metrics.system.uptime},ms`
862
+ `Uptime,${metrics.system.uptime},ms`,
839
863
  ];
840
- return csv.join('\n');
864
+ return csv.join("\n");
841
865
  }
842
866
  createSummaryReport(data) {
843
867
  const metrics = data.currentMetrics;
@@ -848,10 +872,10 @@ export default class PerformanceTools {
848
872
  averageResponseTime: `${metrics.requests.averageResponseTime.toFixed(0)}ms`,
849
873
  cacheEfficiency: `${(metrics.cache.hitRate * 100).toFixed(1)}%`,
850
874
  systemLoad: `${metrics.system.memoryUsage}%`,
851
- errorRate: `${((metrics.requests.failed / Math.max(metrics.requests.total, 1)) * 100).toFixed(2)}%`
875
+ errorRate: `${((metrics.requests.failed / Math.max(metrics.requests.total, 1)) * 100).toFixed(2)}%`,
852
876
  },
853
877
  recommendations: data.analytics?.insights?.slice(0, 3) || [],
854
- nextSteps: 'Review detailed metrics and implement high-priority optimizations'
878
+ nextSteps: "Review detailed metrics and implement high-priority optimizations",
855
879
  };
856
880
  }
857
881
  startHistoricalDataCollection() {