|
|
"""Monitoring and observability integration.""" |
|
|
|
|
|
from __future__ import annotations |
|
|
|
|
|
from typing import Any, Dict, List, Optional |
|
|
|
|
|
|
|
|
class MonitoringIntegration: |
|
|
"""Integrates with monitoring and observability tools.""" |
|
|
|
|
|
def get_monitoring_setup( |
|
|
self, |
|
|
framework: str, |
|
|
platform: str |
|
|
) -> Dict[str, Any]: |
|
|
"""Get monitoring setup recommendations.""" |
|
|
|
|
|
monitoring_tools = { |
|
|
"next.js": { |
|
|
"recommended": ["Vercel Analytics", "Sentry", "LogRocket"], |
|
|
"built_in": "Vercel Analytics (if on Vercel)" |
|
|
}, |
|
|
"django": { |
|
|
"recommended": ["Sentry", "New Relic", "Datadog"], |
|
|
"built_in": "Django Debug Toolbar (dev only)" |
|
|
}, |
|
|
"fastapi": { |
|
|
"recommended": ["Prometheus", "Grafana", "Sentry"], |
|
|
"built_in": "FastAPI metrics endpoint" |
|
|
}, |
|
|
"react": { |
|
|
"recommended": ["Sentry", "LogRocket", "Mixpanel"], |
|
|
"built_in": "React DevTools (dev only)" |
|
|
}, |
|
|
} |
|
|
|
|
|
framework_tools = monitoring_tools.get(framework.lower(), { |
|
|
"recommended": ["Sentry", "New Relic", "Datadog"], |
|
|
"built_in": "Application logs" |
|
|
}) |
|
|
|
|
|
|
|
|
platform_monitoring = { |
|
|
"vercel": "Vercel Analytics and Speed Insights included", |
|
|
"netlify": "Netlify Analytics available", |
|
|
"aws": "CloudWatch monitoring included", |
|
|
"gcp": "Cloud Monitoring and Logging included", |
|
|
"azure": "Azure Monitor included", |
|
|
} |
|
|
|
|
|
return { |
|
|
"framework": framework, |
|
|
"platform": platform, |
|
|
"recommended_tools": framework_tools["recommended"], |
|
|
"built_in_monitoring": framework_tools.get("built_in", ""), |
|
|
"platform_monitoring": platform_monitoring.get(platform.lower(), "Use third-party tools"), |
|
|
"setup_steps": self._get_setup_steps(framework, platform), |
|
|
"key_metrics": self._get_key_metrics(framework) |
|
|
} |
|
|
|
|
|
def _get_setup_steps(self, framework: str, platform: str) -> List[str]: |
|
|
"""Get setup steps for monitoring.""" |
|
|
steps = [ |
|
|
f"1. Set up error tracking (Sentry recommended for {framework})", |
|
|
f"2. Configure application performance monitoring", |
|
|
"3. Set up log aggregation", |
|
|
"4. Configure alerting for critical errors", |
|
|
"5. Set up uptime monitoring", |
|
|
] |
|
|
|
|
|
if platform.lower() in ["aws", "gcp", "azure"]: |
|
|
steps.append(f"6. Enable {platform} native monitoring") |
|
|
|
|
|
return steps |
|
|
|
|
|
def _get_key_metrics(self, framework: str) -> List[str]: |
|
|
"""Get key metrics to monitor.""" |
|
|
base_metrics = [ |
|
|
"Response time (p50, p95, p99)", |
|
|
"Error rate", |
|
|
"Request rate", |
|
|
"CPU and memory usage" |
|
|
] |
|
|
|
|
|
framework_metrics = { |
|
|
"next.js": ["Page load time", "Time to First Byte (TTFB)", "Core Web Vitals"], |
|
|
"django": ["Database query time", "Request processing time"], |
|
|
"fastapi": ["API response time", "Concurrent requests"], |
|
|
} |
|
|
|
|
|
return base_metrics + framework_metrics.get(framework.lower(), []) |
|
|
|
|
|
|