Update app.py
Browse files
app.py
CHANGED
@@ -100,7 +100,7 @@ async def create_auto_user_entry(
|
|
100 |
|
101 |
@app.get("/analytics/")
|
102 |
async def get_user_analytics(period: str = Query(..., enum=["last_hour", "last_day", "last_7_day"])):
|
103 |
-
"""Endpoint to get user analytics."""
|
104 |
try:
|
105 |
clean_old_data() # Clean data before processing
|
106 |
|
@@ -117,18 +117,42 @@ async def get_user_analytics(period: str = Query(..., enum=["last_hour", "last_d
|
|
117 |
filtered_data = [entry for entry in user_data.values() if entry["timestamp"] >= cutoff]
|
118 |
unique_users = len(set(entry["ip_address"] for entry in filtered_data))
|
119 |
device_counts: Dict[str, int] = {}
|
|
|
|
|
|
|
120 |
for entry in filtered_data:
|
121 |
device_counts[entry["device_type"]] = device_counts.get(entry["device_type"], 0) + 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
|
123 |
return {
|
124 |
"total_unique_users": unique_users,
|
125 |
-
"device_type_info":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
}
|
127 |
except HTTPException as he:
|
128 |
raise he
|
129 |
except Exception as e:
|
130 |
raise HTTPException(status_code=500, detail=f"Error generating analytics: {e}")
|
131 |
|
|
|
132 |
@app.get("/export/", response_model=Dict[str, UserEntry])
|
133 |
async def export_user_data():
|
134 |
"""Endpoint to export all user data in JSON format."""
|
|
|
100 |
|
101 |
@app.get("/analytics/")
|
102 |
async def get_user_analytics(period: str = Query(..., enum=["last_hour", "last_day", "last_7_day"])):
|
103 |
+
"""Endpoint to get advanced user analytics."""
|
104 |
try:
|
105 |
clean_old_data() # Clean data before processing
|
106 |
|
|
|
117 |
filtered_data = [entry for entry in user_data.values() if entry["timestamp"] >= cutoff]
|
118 |
unique_users = len(set(entry["ip_address"] for entry in filtered_data))
|
119 |
device_counts: Dict[str, int] = {}
|
120 |
+
browser_counts: Dict[str, int] = {}
|
121 |
+
os_counts: Dict[str, int] = {}
|
122 |
+
|
123 |
for entry in filtered_data:
|
124 |
device_counts[entry["device_type"]] = device_counts.get(entry["device_type"], 0) + 1
|
125 |
+
browser_counts[entry["browser"]] = browser_counts.get(entry["browser"], 0) + 1
|
126 |
+
os_counts[entry["OS"]] = os_counts.get(entry["OS"], 0) + 1
|
127 |
+
|
128 |
+
# Calculate percentages
|
129 |
+
total_entries = len(filtered_data)
|
130 |
+
device_percentages = {device: (count / total_entries) * 100 for device, count in device_counts.items()}
|
131 |
+
browser_percentages = {browser: (count / total_entries) * 100 for browser, count in browser_counts.items()}
|
132 |
+
os_percentages = {os: (count / total_entries) * 100 for os, count in os_counts.items()}
|
133 |
|
134 |
return {
|
135 |
"total_unique_users": unique_users,
|
136 |
+
"device_type_info": {
|
137 |
+
"counts": device_counts,
|
138 |
+
"percentages": device_percentages
|
139 |
+
},
|
140 |
+
"browser_info": {
|
141 |
+
"counts": browser_counts,
|
142 |
+
"percentages": browser_percentages
|
143 |
+
},
|
144 |
+
"os_info": {
|
145 |
+
"counts": os_counts,
|
146 |
+
"percentages": os_percentages
|
147 |
+
},
|
148 |
+
"total_entries": total_entries
|
149 |
}
|
150 |
except HTTPException as he:
|
151 |
raise he
|
152 |
except Exception as e:
|
153 |
raise HTTPException(status_code=500, detail=f"Error generating analytics: {e}")
|
154 |
|
155 |
+
|
156 |
@app.get("/export/", response_model=Dict[str, UserEntry])
|
157 |
async def export_user_data():
|
158 |
"""Endpoint to export all user data in JSON format."""
|