"""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-specific monitoring 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(), [])