Initial commit: MCP Hub Community Edition v3.0.0
Community edition generated from private repo via sync pipeline. Includes 9 plugins (WordPress, WooCommerce, WP Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~587 tools. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
200
tests/legacy/test_health_monitor.py
Normal file
200
tests/legacy/test_health_monitor.py
Normal file
@@ -0,0 +1,200 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test script for Phase 7.2 Enhanced Health Monitoring
|
||||
|
||||
Tests:
|
||||
1. Health monitor initialization
|
||||
2. Metrics recording
|
||||
3. Health checks
|
||||
4. System metrics
|
||||
5. Alert thresholds
|
||||
6. Metrics export
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Fix Windows console encoding
|
||||
if sys.platform == "win32":
|
||||
sys.stdout.reconfigure(encoding="utf-8")
|
||||
sys.stderr.reconfigure(encoding="utf-8")
|
||||
|
||||
# Add project root to path
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from core import AuditLogger, ProjectManager, initialize_health_monitor
|
||||
|
||||
|
||||
async def test_health_monitor():
|
||||
"""Test health monitoring system."""
|
||||
print("=" * 60)
|
||||
print("Phase 7.2 - Enhanced Health Monitoring Tests")
|
||||
print("=" * 60)
|
||||
|
||||
# Initialize components
|
||||
print("\n1. Initializing components...")
|
||||
project_manager = ProjectManager()
|
||||
audit_logger = AuditLogger()
|
||||
|
||||
health_monitor = initialize_health_monitor(
|
||||
project_manager=project_manager,
|
||||
audit_logger=audit_logger,
|
||||
metrics_retention_hours=24,
|
||||
max_metrics_per_project=1000,
|
||||
)
|
||||
|
||||
print("✅ Health monitor initialized")
|
||||
print(" Retention: 24 hours")
|
||||
print(" Max metrics per project: 1000")
|
||||
|
||||
# Test 2: Record some sample metrics
|
||||
print("\n2. Recording sample metrics...")
|
||||
|
||||
# Simulate successful requests
|
||||
for i in range(5):
|
||||
health_monitor.record_request(
|
||||
project_id="wordpress_site1", response_time_ms=100.0 + (i * 10), success=True
|
||||
)
|
||||
print("✅ Recorded 5 successful requests for wordpress_site1")
|
||||
|
||||
# Simulate failed requests
|
||||
for i in range(2):
|
||||
health_monitor.record_request(
|
||||
project_id="wordpress_site1",
|
||||
response_time_ms=500.0,
|
||||
success=False,
|
||||
error_message="Connection timeout",
|
||||
)
|
||||
print("✅ Recorded 2 failed requests for wordpress_site1")
|
||||
|
||||
# Record for another project
|
||||
health_monitor.record_request(project_id="wordpress_site2", response_time_ms=80.0, success=True)
|
||||
print("✅ Recorded 1 successful request for wordpress_site2")
|
||||
|
||||
# Test 3: Get project metrics
|
||||
print("\n3. Getting project metrics...")
|
||||
metrics = health_monitor.get_project_metrics("wordpress_site1", hours=1)
|
||||
print("✅ Metrics for wordpress_site1:")
|
||||
print(f" Total requests: {metrics['total_requests']}")
|
||||
print(f" Successful: {metrics['successful_requests']}")
|
||||
print(f" Failed: {metrics['failed_requests']}")
|
||||
print(f" Error rate: {metrics['error_rate_percent']}%")
|
||||
print(f" Avg response time: {metrics['response_time']['average_ms']}ms")
|
||||
|
||||
# Test 4: Get system metrics
|
||||
print("\n4. Getting system metrics...")
|
||||
system_metrics = health_monitor.get_system_metrics()
|
||||
print("✅ System metrics:")
|
||||
print(f" Uptime: {system_metrics.uptime_seconds:.2f}s")
|
||||
print(f" Total requests: {system_metrics.total_requests}")
|
||||
print(f" Successful: {system_metrics.successful_requests}")
|
||||
print(f" Failed: {system_metrics.failed_requests}")
|
||||
print(f" Error rate: {system_metrics.error_rate_percent}%")
|
||||
print(f" Avg response time: {system_metrics.average_response_time_ms}ms")
|
||||
|
||||
# Test 5: Get uptime
|
||||
print("\n5. Getting uptime...")
|
||||
uptime = health_monitor.get_uptime()
|
||||
print(f"✅ Uptime: {uptime['uptime_formatted']}")
|
||||
|
||||
# Test 6: Test alert thresholds
|
||||
print("\n6. Testing alert thresholds...")
|
||||
|
||||
# Record a slow request to trigger alert
|
||||
health_monitor.record_request(
|
||||
project_id="wordpress_site3", response_time_ms=6000.0, success=True # > 5000ms threshold
|
||||
)
|
||||
print("✅ Recorded slow request (6000ms)")
|
||||
|
||||
# Record many failures to trigger error rate alert
|
||||
for i in range(10):
|
||||
health_monitor.record_request(
|
||||
project_id="wordpress_site3",
|
||||
response_time_ms=200.0,
|
||||
success=False,
|
||||
error_message="API error",
|
||||
)
|
||||
print("✅ Recorded 10 failures to trigger error rate alert")
|
||||
|
||||
# Test 7: Check if project exists in manager
|
||||
print("\n7. Checking project health (simulation)...")
|
||||
|
||||
# Since we don't have actual WordPress sites running,
|
||||
# we'll just show the metrics we collected
|
||||
site3_metrics = health_monitor.get_project_metrics("wordpress_site3", hours=1)
|
||||
print("✅ wordpress_site3 metrics:")
|
||||
print(f" Total requests: {site3_metrics['total_requests']}")
|
||||
print(f" Error rate: {site3_metrics['error_rate_percent']}%")
|
||||
print(f" Max response time: {site3_metrics['response_time']['max_ms']}ms")
|
||||
|
||||
# Check for alerts
|
||||
alert_data = {
|
||||
"response_time_ms": site3_metrics["response_time"]["max_ms"],
|
||||
"error_rate_percent": site3_metrics["error_rate_percent"],
|
||||
}
|
||||
|
||||
alerts = health_monitor._check_alerts("wordpress_site3", alert_data)
|
||||
if alerts:
|
||||
print("⚠️ Alerts triggered:")
|
||||
for alert in alerts:
|
||||
print(f" {alert}")
|
||||
else:
|
||||
print("✅ No alerts")
|
||||
|
||||
# Test 8: Export metrics
|
||||
print("\n8. Exporting metrics...")
|
||||
export_path = "logs/test_metrics_export.json"
|
||||
exported_file = health_monitor.export_metrics(output_path=export_path)
|
||||
print(f"✅ Metrics exported to: {exported_file}")
|
||||
|
||||
# Verify export file
|
||||
if os.path.exists(export_path):
|
||||
with open(export_path, encoding="utf-8") as f:
|
||||
export_data = json.load(f)
|
||||
print(" Export contains:")
|
||||
print(" - System metrics: ✅")
|
||||
print(" - Uptime info: ✅")
|
||||
print(f" - {len(export_data['projects'])} projects")
|
||||
|
||||
# Test 9: Custom alert threshold
|
||||
print("\n9. Testing custom alert thresholds...")
|
||||
health_monitor.add_alert_threshold(
|
||||
project_id="wordpress_site1",
|
||||
name="Custom Response Time",
|
||||
metric="response_time_ms",
|
||||
threshold=150.0,
|
||||
comparison="gt",
|
||||
severity="warning",
|
||||
)
|
||||
print("✅ Added custom alert threshold for wordpress_site1")
|
||||
|
||||
# Summary
|
||||
print("\n" + "=" * 60)
|
||||
print("TEST SUMMARY")
|
||||
print("=" * 60)
|
||||
print("✅ Health monitor initialization - PASS")
|
||||
print("✅ Metrics recording - PASS")
|
||||
print("✅ Project metrics retrieval - PASS")
|
||||
print("✅ System metrics retrieval - PASS")
|
||||
print("✅ Uptime tracking - PASS")
|
||||
print("✅ Alert threshold checking - PASS")
|
||||
print("✅ Metrics export - PASS")
|
||||
print("✅ Custom alert thresholds - PASS")
|
||||
print("\n🎉 All tests passed!")
|
||||
print("=" * 60)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
asyncio.run(test_health_monitor())
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
print(f"\n❌ Test failed with error: {e}")
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user