setu-trafficmonitor 2.0.0__py3-none-any.whl

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.
Files changed (42) hide show
  1. setu_trafficmonitor-2.0.0.dist-info/LICENSE +21 -0
  2. setu_trafficmonitor-2.0.0.dist-info/METADATA +401 -0
  3. setu_trafficmonitor-2.0.0.dist-info/RECORD +42 -0
  4. setu_trafficmonitor-2.0.0.dist-info/WHEEL +5 -0
  5. setu_trafficmonitor-2.0.0.dist-info/top_level.txt +1 -0
  6. trafficmonitor/__init__.py +11 -0
  7. trafficmonitor/admin.py +217 -0
  8. trafficmonitor/analytics/__init__.py +0 -0
  9. trafficmonitor/analytics/enhanced_queries.py +286 -0
  10. trafficmonitor/analytics/serializers.py +238 -0
  11. trafficmonitor/analytics/tests.py +757 -0
  12. trafficmonitor/analytics/urls.py +18 -0
  13. trafficmonitor/analytics/views.py +694 -0
  14. trafficmonitor/apps.py +7 -0
  15. trafficmonitor/circuit_breaker.py +63 -0
  16. trafficmonitor/conf.py +154 -0
  17. trafficmonitor/dashboard_security.py +111 -0
  18. trafficmonitor/db_utils.py +37 -0
  19. trafficmonitor/exceptions.py +93 -0
  20. trafficmonitor/health.py +66 -0
  21. trafficmonitor/load_test.py +423 -0
  22. trafficmonitor/load_test_api.py +307 -0
  23. trafficmonitor/management/__init__.py +1 -0
  24. trafficmonitor/management/commands/__init__.py +1 -0
  25. trafficmonitor/management/commands/cleanup_request_logs.py +77 -0
  26. trafficmonitor/middleware.py +383 -0
  27. trafficmonitor/migrations/0001_initial.py +93 -0
  28. trafficmonitor/migrations/__init__.py +0 -0
  29. trafficmonitor/models.py +206 -0
  30. trafficmonitor/monitoring.py +104 -0
  31. trafficmonitor/permissions.py +64 -0
  32. trafficmonitor/security.py +180 -0
  33. trafficmonitor/settings_production.py +105 -0
  34. trafficmonitor/static/analytics/css/dashboard.css +99 -0
  35. trafficmonitor/static/analytics/js/dashboard-production.js +339 -0
  36. trafficmonitor/static/analytics/js/dashboard-v2.js +697 -0
  37. trafficmonitor/static/analytics/js/dashboard.js +693 -0
  38. trafficmonitor/tasks.py +137 -0
  39. trafficmonitor/templates/analytics/dashboard.html +500 -0
  40. trafficmonitor/tests.py +246 -0
  41. trafficmonitor/views.py +3 -0
  42. trafficmonitor/websocket_consumers.py +128 -0
@@ -0,0 +1,238 @@
1
+ from rest_framework import serializers
2
+
3
+
4
+ class StatusCodeDataSerializer(serializers.Serializer):
5
+ """
6
+ Serializer for status code distribution data.
7
+ """
8
+ status_code = serializers.IntegerField()
9
+ count = serializers.IntegerField()
10
+
11
+
12
+ class MethodDataSerializer(serializers.Serializer):
13
+ """
14
+ Serializer for HTTP method distribution data.
15
+ """
16
+ method = serializers.CharField()
17
+ count = serializers.IntegerField()
18
+
19
+
20
+ class EndpointDataSerializer(serializers.Serializer):
21
+ """
22
+ Serializer for endpoint statistics.
23
+ """
24
+ path = serializers.CharField()
25
+ count = serializers.IntegerField()
26
+ avg_response_time = serializers.FloatField(allow_null=True)
27
+ min_response_time = serializers.FloatField(allow_null=True, required=False)
28
+ max_response_time = serializers.FloatField(allow_null=True, required=False)
29
+
30
+
31
+ class IPAddressDataSerializer(serializers.Serializer):
32
+ """
33
+ Serializer for IP address statistics.
34
+ """
35
+ ip_address = serializers.IPAddressField()
36
+ count = serializers.IntegerField()
37
+
38
+
39
+ class TimeSeriesDataSerializer(serializers.Serializer):
40
+ """
41
+ Serializer for time series data.
42
+ """
43
+ period = serializers.DateTimeField()
44
+ count = serializers.IntegerField()
45
+
46
+
47
+ class ErrorTrendDataSerializer(serializers.Serializer):
48
+ """
49
+ Serializer for error trend data.
50
+ """
51
+ period = serializers.DateTimeField()
52
+ client_errors = serializers.IntegerField()
53
+ server_errors = serializers.IntegerField()
54
+ total_errors = serializers.IntegerField()
55
+
56
+
57
+ class HourlyHeatmapDataSerializer(serializers.Serializer):
58
+ """
59
+ Serializer for hourly heatmap data.
60
+ """
61
+ hour = serializers.IntegerField(min_value=0, max_value=23)
62
+ count = serializers.IntegerField()
63
+
64
+
65
+ class StatusCodeSummarySerializer(serializers.Serializer):
66
+ """
67
+ Serializer for status code summary.
68
+ """
69
+ success = serializers.IntegerField()
70
+ redirect = serializers.IntegerField()
71
+ client_error = serializers.IntegerField()
72
+ server_error = serializers.IntegerField()
73
+ total = serializers.IntegerField()
74
+
75
+
76
+ class PerformanceSummarySerializer(serializers.Serializer):
77
+ """
78
+ Serializer for performance metrics summary.
79
+ """
80
+ avg_response_time = serializers.FloatField(allow_null=True)
81
+ max_response_time = serializers.FloatField(allow_null=True)
82
+ min_response_time = serializers.FloatField(allow_null=True)
83
+ avg_query_count = serializers.FloatField(allow_null=True)
84
+ max_query_count = serializers.IntegerField(allow_null=True)
85
+
86
+
87
+ class UserActivityDataSerializer(serializers.Serializer):
88
+ """
89
+ Serializer for authenticated user activity.
90
+ """
91
+ user__username = serializers.CharField()
92
+ user__email = serializers.EmailField()
93
+ count = serializers.IntegerField()
94
+
95
+
96
+ class UserActivitySerializer(serializers.Serializer):
97
+ """
98
+ Serializer for user activity summary.
99
+ """
100
+ authenticated = UserActivityDataSerializer(many=True)
101
+ anonymous_count = serializers.IntegerField()
102
+
103
+
104
+ class TotalsSerializer(serializers.Serializer):
105
+ """
106
+ Serializer for total request counts by period.
107
+ """
108
+ today = serializers.IntegerField()
109
+ last_7_days = serializers.IntegerField()
110
+ last_30_days = serializers.IntegerField()
111
+ selected_range = serializers.IntegerField()
112
+
113
+
114
+ class MetadataSerializer(serializers.Serializer):
115
+ """
116
+ Serializer for analytics metadata.
117
+ """
118
+ range_type = serializers.CharField()
119
+ start_date = serializers.DateTimeField()
120
+ end_date = serializers.DateTimeField()
121
+ filters = serializers.DictField()
122
+ generated_at = serializers.DateTimeField()
123
+
124
+
125
+ class ComprehensiveAnalyticsSerializer(serializers.Serializer):
126
+ """
127
+ Main serializer for comprehensive analytics response.
128
+ Combines all analytics data into a single response.
129
+ """
130
+ totals = TotalsSerializer()
131
+ status_summary = StatusCodeSummarySerializer()
132
+ status_codes = StatusCodeDataSerializer(many=True)
133
+ methods = MethodDataSerializer(many=True)
134
+ top_endpoints = EndpointDataSerializer(many=True)
135
+ slowest_endpoints = EndpointDataSerializer(many=True)
136
+ top_ips = IPAddressDataSerializer(many=True)
137
+ performance = PerformanceSummarySerializer()
138
+ users = UserActivitySerializer()
139
+ requests_over_time = TimeSeriesDataSerializer(many=True)
140
+ error_trend = ErrorTrendDataSerializer(many=True)
141
+ hourly_heatmap = HourlyHeatmapDataSerializer(many=True)
142
+ metadata = MetadataSerializer()
143
+
144
+
145
+ class ChartDataSerializer(serializers.Serializer):
146
+ """
147
+ Serializer for individual chart data responses.
148
+ """
149
+ chart_type = serializers.CharField()
150
+ data = serializers.JSONField()
151
+ metadata = serializers.DictField()
152
+
153
+
154
+ # Sample JSON response formats for documentation
155
+ SAMPLE_ANALYTICS_RESPONSE = {
156
+ "totals": {
157
+ "today": 1543,
158
+ "last_7_days": 12876,
159
+ "last_30_days": 54321,
160
+ "selected_range": 12876
161
+ },
162
+ "status_summary": {
163
+ "success": 10234,
164
+ "redirect": 543,
165
+ "client_error": 1876,
166
+ "server_error": 223,
167
+ "total": 12876
168
+ },
169
+ "status_codes": [
170
+ {"status_code": 200, "count": 8765},
171
+ {"status_code": 404, "count": 1234},
172
+ {"status_code": 500, "count": 123}
173
+ ],
174
+ "methods": [
175
+ {"method": "GET", "count": 8000},
176
+ {"method": "POST", "count": 3000},
177
+ {"method": "PUT", "count": 1000}
178
+ ],
179
+ "top_endpoints": [
180
+ {
181
+ "path": "/api/v1/monitoring/",
182
+ "count": 3456,
183
+ "avg_response_time": 145.5,
184
+ "min_response_time": 23.1,
185
+ "max_response_time": 2345.6
186
+ }
187
+ ],
188
+ "slowest_endpoints": [
189
+ {
190
+ "path": "/api/v1/reports/generate/",
191
+ "avg_response_time": 3456.7,
192
+ "count": 234,
193
+ "max_response_time": 8765.4
194
+ }
195
+ ],
196
+ "top_ips": [
197
+ {"ip_address": "192.168.1.100", "count": 567}
198
+ ],
199
+ "performance": {
200
+ "avg_response_time": 234.5,
201
+ "max_response_time": 5678.9,
202
+ "min_response_time": 12.3,
203
+ "avg_query_count": 15.6,
204
+ "max_query_count": 234
205
+ },
206
+ "users": {
207
+ "authenticated": [
208
+ {
209
+ "user__username": "john_doe",
210
+ "user__email": "john@example.com",
211
+ "count": 567
212
+ }
213
+ ],
214
+ "anonymous_count": 123
215
+ },
216
+ "requests_over_time": [
217
+ {"period": "2024-01-01T00:00:00Z", "count": 1234}
218
+ ],
219
+ "error_trend": [
220
+ {
221
+ "period": "2024-01-01T00:00:00Z",
222
+ "client_errors": 56,
223
+ "server_errors": 12,
224
+ "total_errors": 68
225
+ }
226
+ ],
227
+ "hourly_heatmap": [
228
+ {"hour": 0, "count": 123},
229
+ {"hour": 1, "count": 89}
230
+ ],
231
+ "metadata": {
232
+ "range_type": "last_7_days",
233
+ "start_date": "2024-01-01T00:00:00Z",
234
+ "end_date": "2024-01-08T00:00:00Z",
235
+ "filters": {},
236
+ "generated_at": "2024-01-08T12:00:00Z"
237
+ }
238
+ }