File size: 3,393 Bytes
a42b16d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""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(), [])