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.
- package/README.md +14 -29
- package/dist/cache/CacheInvalidation.js.map +1 -1
- package/dist/cache/CacheManager.d.ts +7 -0
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.js +21 -7
- package/dist/cache/CacheManager.js.map +1 -1
- package/dist/cache/HttpCacheWrapper.js.map +1 -1
- package/dist/cache/SEOCacheManager.d.ts.map +1 -1
- package/dist/cache/SEOCacheManager.js +6 -1
- package/dist/cache/SEOCacheManager.js.map +1 -1
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/client/CachedWordPressClient.d.ts.map +1 -1
- package/dist/client/CachedWordPressClient.js.map +1 -1
- package/dist/client/MockWordPressClient.d.ts.map +1 -1
- package/dist/client/MockWordPressClient.js.map +1 -1
- package/dist/client/SEOWordPressClient.d.ts.map +1 -1
- package/dist/client/SEOWordPressClient.js.map +1 -1
- package/dist/client/api.d.ts +11 -26
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +111 -203
- package/dist/client/api.js.map +1 -1
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js.map +1 -1
- package/dist/client/managers/AuthManager.d.ts.map +1 -1
- package/dist/client/managers/RequestManager.d.ts.map +1 -1
- package/dist/client/managers/RequestManager.js +6 -5
- package/dist/client/managers/RequestManager.js.map +1 -1
- package/dist/client/managers/composed/MigrationAdapter.d.ts +3 -3
- package/dist/client/managers/composed/MigrationAdapter.d.ts.map +1 -1
- package/dist/client/managers/composed/MigrationAdapter.js +2 -2
- package/dist/client/managers/composed/MigrationAdapter.js.map +1 -1
- package/dist/client/managers/composed/index.d.ts +7 -7
- package/dist/client/managers/composed/index.d.ts.map +1 -1
- package/dist/client/managers/composed/index.js +6 -6
- package/dist/client/managers/composed/index.js.map +1 -1
- package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts +1 -1
- package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts.map +1 -1
- package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts +1 -1
- package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts.map +1 -1
- package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts +1 -1
- package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts.map +1 -1
- package/dist/client/operations/comments.d.ts +58 -0
- package/dist/client/operations/comments.d.ts.map +1 -0
- package/dist/client/operations/comments.js +74 -0
- package/dist/client/operations/comments.js.map +1 -0
- package/dist/client/operations/index.d.ts +12 -0
- package/dist/client/operations/index.d.ts.map +1 -0
- package/dist/client/operations/index.js +12 -0
- package/dist/client/operations/index.js.map +1 -0
- package/dist/client/operations/media.d.ts +55 -0
- package/dist/client/operations/media.d.ts.map +1 -0
- package/dist/client/operations/media.js +132 -0
- package/dist/client/operations/media.js.map +1 -0
- package/dist/client/operations/pages.d.ts +50 -0
- package/dist/client/operations/pages.d.ts.map +1 -0
- package/dist/client/operations/pages.js +56 -0
- package/dist/client/operations/pages.js.map +1 -0
- package/dist/client/operations/posts.d.ts +50 -0
- package/dist/client/operations/posts.d.ts.map +1 -0
- package/dist/client/operations/posts.js +53 -0
- package/dist/client/operations/posts.js.map +1 -0
- package/dist/client/operations/site.d.ts +60 -0
- package/dist/client/operations/site.d.ts.map +1 -0
- package/dist/client/operations/site.js +83 -0
- package/dist/client/operations/site.js.map +1 -0
- package/dist/client/operations/taxonomies.d.ts +69 -0
- package/dist/client/operations/taxonomies.d.ts.map +1 -0
- package/dist/client/operations/taxonomies.js +87 -0
- package/dist/client/operations/taxonomies.js.map +1 -0
- package/dist/client/operations/users.d.ts +50 -0
- package/dist/client/operations/users.d.ts.map +1 -0
- package/dist/client/operations/users.js +57 -0
- package/dist/client/operations/users.js.map +1 -0
- package/dist/config/ServerConfiguration.d.ts.map +1 -1
- package/dist/config/ServerConfiguration.js.map +1 -1
- package/dist/docs/DocumentationGenerator.js.map +1 -1
- package/dist/performance/MetricsCollector.d.ts.map +1 -1
- package/dist/performance/MetricsCollector.js.map +1 -1
- package/dist/performance/PerformanceMonitor.js.map +1 -1
- package/dist/security/AISecurityScanner.d.ts.map +1 -1
- package/dist/security/AISecurityScanner.js +3 -2
- package/dist/security/AISecurityScanner.js.map +1 -1
- package/dist/security/AutomatedRemediation.js.map +1 -1
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +30 -18
- package/dist/security/InputValidator.js.map +1 -1
- package/dist/security/SecurityCIPipeline.d.ts +19 -196
- package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
- package/dist/security/SecurityCIPipeline.js +95 -639
- package/dist/security/SecurityCIPipeline.js.map +1 -1
- package/dist/security/SecurityConfig.js.map +1 -1
- package/dist/security/SecurityConfigManager.js.map +1 -1
- package/dist/security/SecurityGateExecutor.d.ts +67 -0
- package/dist/security/SecurityGateExecutor.d.ts.map +1 -0
- package/dist/security/SecurityGateExecutor.js +363 -0
- package/dist/security/SecurityGateExecutor.js.map +1 -0
- package/dist/security/SecurityMonitoring.js.map +1 -1
- package/dist/security/SecurityReportGenerator.d.ts +65 -0
- package/dist/security/SecurityReportGenerator.d.ts.map +1 -0
- package/dist/security/SecurityReportGenerator.js +210 -0
- package/dist/security/SecurityReportGenerator.js.map +1 -0
- package/dist/security/SecurityReviewer.js.map +1 -1
- package/dist/security/SecurityTypes.d.ts +188 -0
- package/dist/security/SecurityTypes.d.ts.map +1 -0
- package/dist/security/SecurityTypes.js +6 -0
- package/dist/security/SecurityTypes.js.map +1 -0
- package/dist/security/index.d.ts +5 -28
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +4 -0
- package/dist/security/index.js.map +1 -1
- package/dist/server/ConnectionTester.d.ts.map +1 -1
- package/dist/server/ConnectionTester.js.map +1 -1
- package/dist/server/ToolRegistry.d.ts.map +1 -1
- package/dist/server/ToolRegistry.js.map +1 -1
- package/dist/tools/BaseToolManager.d.ts.map +1 -1
- package/dist/tools/BaseToolManager.js.map +1 -1
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/cache.d.ts.map +1 -1
- package/dist/tools/cache.js.map +1 -1
- package/dist/tools/comments.d.ts.map +1 -1
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/media.d.ts.map +1 -1
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/performance/PerformanceHelpers.d.ts +116 -0
- package/dist/tools/performance/PerformanceHelpers.d.ts.map +1 -0
- package/dist/tools/performance/PerformanceHelpers.js +298 -0
- package/dist/tools/performance/PerformanceHelpers.js.map +1 -0
- package/dist/tools/performance/PerformanceTools.d.ts +54 -0
- package/dist/tools/performance/PerformanceTools.d.ts.map +1 -0
- package/dist/tools/performance/PerformanceTools.js +687 -0
- package/dist/tools/performance/PerformanceTools.js.map +1 -0
- package/dist/tools/performance/index.d.ts +8 -0
- package/dist/tools/performance/index.d.ts.map +1 -0
- package/dist/tools/performance/index.js +8 -0
- package/dist/tools/performance/index.js.map +1 -0
- package/dist/tools/performance.d.ts +12 -69
- package/dist/tools/performance.d.ts.map +1 -1
- package/dist/tools/performance.js +12 -920
- package/dist/tools/performance.js.map +1 -1
- package/dist/tools/posts.d.ts.map +1 -1
- package/dist/tools/seo/analyzers/ContentAnalyzer.d.ts.map +1 -1
- package/dist/tools/seo/analyzers/ContentAnalyzer.js +14 -3
- package/dist/tools/seo/analyzers/ContentAnalyzer.js.map +1 -1
- package/dist/tools/seo/auditors/SiteAuditor.d.ts.map +1 -1
- package/dist/tools/seo/auditors/SiteAuditor.js +12 -3
- package/dist/tools/seo/auditors/SiteAuditor.js.map +1 -1
- package/dist/tools/seo/generators/MetaGenerator.d.ts.map +1 -1
- package/dist/tools/seo/generators/MetaGenerator.js +25 -8
- package/dist/tools/seo/generators/MetaGenerator.js.map +1 -1
- package/dist/tools/seo/generators/SchemaGenerator.d.ts.map +1 -1
- package/dist/tools/seo/generators/SchemaGenerator.js.map +1 -1
- package/dist/tools/seo/optimizers/InternalLinkingSuggester.d.ts.map +1 -1
- package/dist/tools/seo/optimizers/InternalLinkingSuggester.js.map +1 -1
- package/dist/tools/site.d.ts.map +1 -1
- package/dist/tools/site.js.map +1 -1
- package/dist/tools/taxonomies.d.ts.map +1 -1
- package/dist/tools/taxonomies.js.map +1 -1
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js.map +1 -1
- package/dist/utils/CircuitBreaker.d.ts +243 -0
- package/dist/utils/CircuitBreaker.d.ts.map +1 -0
- package/dist/utils/CircuitBreaker.js +456 -0
- package/dist/utils/CircuitBreaker.js.map +1 -0
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/toolWrapper.d.ts.map +1 -1
- package/docs/DEPRECATIONS.md +157 -0
- package/package.json +2 -3
- package/src/cache/CacheInvalidation.ts +1 -1
- package/src/cache/CacheManager.ts +25 -8
- package/src/cache/HttpCacheWrapper.ts +1 -1
- package/src/cache/SEOCacheManager.ts +9 -3
- package/src/cache/index.ts +1 -1
- package/src/client/CachedWordPressClient.ts +6 -6
- package/src/client/MockWordPressClient.ts +3 -3
- package/src/client/SEOWordPressClient.ts +6 -6
- package/src/client/api.ts +129 -215
- package/src/client/auth.ts +3 -3
- package/src/client/managers/AuthManager.ts +1 -1
- package/src/client/managers/RequestManager.ts +6 -7
- package/src/client/managers/composed/MigrationAdapter.ts +4 -4
- package/src/client/managers/composed/index.ts +7 -7
- package/src/client/managers/implementations/ConfigurationProviderImpl.ts +1 -1
- package/src/client/managers/implementations/ErrorHandlerImpl.ts +1 -1
- package/src/client/managers/implementations/ParameterValidatorImpl.ts +1 -1
- package/src/client/operations/comments.ts +96 -0
- package/src/client/operations/index.ts +12 -0
- package/src/client/operations/media.ts +162 -0
- package/src/client/operations/pages.ts +71 -0
- package/src/client/operations/posts.ts +68 -0
- package/src/client/operations/site.ts +106 -0
- package/src/client/operations/taxonomies.ts +115 -0
- package/src/client/operations/users.ts +72 -0
- package/src/config/ServerConfiguration.ts +6 -6
- package/src/docs/DocumentationGenerator.ts +3 -3
- package/src/performance/MetricsCollector.ts +4 -4
- package/src/performance/PerformanceMonitor.ts +1 -1
- package/src/security/AISecurityScanner.ts +4 -3
- package/src/security/AutomatedRemediation.ts +1 -1
- package/src/security/InputValidator.ts +36 -19
- package/src/security/SecurityCIPipeline.ts +130 -953
- package/src/security/SecurityConfig.ts +1 -1
- package/src/security/SecurityConfigManager.ts +1 -1
- package/src/security/SecurityGateExecutor.ts +485 -0
- package/src/security/SecurityMonitoring.ts +1 -1
- package/src/security/SecurityReportGenerator.ts +272 -0
- package/src/security/SecurityReviewer.ts +1 -1
- package/src/security/SecurityTypes.ts +199 -0
- package/src/security/index.ts +6 -1
- package/src/server/ConnectionTester.ts +4 -4
- package/src/server/ToolRegistry.ts +6 -6
- package/src/tools/BaseToolManager.ts +2 -2
- package/src/tools/auth.ts +3 -3
- package/src/tools/cache.ts +3 -3
- package/src/tools/comments.ts +3 -3
- package/src/tools/media.ts +3 -3
- package/src/tools/pages.ts +3 -3
- package/src/tools/performance/PerformanceHelpers.ts +330 -0
- package/src/tools/performance/PerformanceTools.ts +854 -0
- package/src/tools/performance/index.ts +8 -0
- package/src/tools/performance.ts +12 -1073
- package/src/tools/posts.ts +1 -1
- package/src/tools/seo/analyzers/ContentAnalyzer.ts +21 -7
- package/src/tools/seo/auditors/SiteAuditor.ts +18 -7
- package/src/tools/seo/generators/MetaGenerator.ts +33 -12
- package/src/tools/seo/generators/SchemaGenerator.ts +3 -3
- package/src/tools/seo/optimizers/InternalLinkingSuggester.ts +4 -4
- package/src/tools/site.ts +3 -3
- package/src/tools/taxonomies.ts +3 -3
- package/src/tools/users.ts +4 -4
- package/src/utils/CircuitBreaker.ts +572 -0
- package/src/utils/debug.ts +3 -3
- package/src/utils/error.ts +1 -1
- package/src/utils/index.ts +3 -0
- package/src/utils/logger.ts +1 -1
- package/src/utils/toolWrapper.ts +2 -2
- 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
|