Skip to content

Commit b29f363

Browse files
🐛 fix: Fix /v1/analytics/metrics caching
1 parent 99ab840 commit b29f363

1 file changed

Lines changed: 46 additions & 2 deletions

File tree

api/v1/analytics.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,53 @@ async def get_metrics(request: Request) -> DetailedMetricsResponse:
119119

120120
# Cache miss - fetch from service
121121
metrics = await get_detailed_metrics()
122-
cache_analytics(cache_key, metrics)
123122

124-
return DetailedMetricsResponse(**metrics)
123+
# Process top breaches (convert Entity objects to dicts)
124+
top_breaches = []
125+
for breach in metrics["top_breaches"]:
126+
top_breaches.append(
127+
{
128+
"breachid": breach.key.id_or_name,
129+
"logo": breach.get("logo"),
130+
"description": breach.get("xposure_desc"),
131+
"count": breach.get("xposed_records"),
132+
}
133+
)
134+
135+
# Process recent breaches (convert Entity objects to dicts)
136+
recent_breaches = []
137+
for breach in metrics["recent_breaches"]:
138+
timestamp = breach.get("timestamp")
139+
if hasattr(timestamp, "strftime"):
140+
formatted_timestamp = timestamp.strftime("%a, %d %b %Y %H:%M:%S GMT")
141+
else:
142+
formatted_timestamp = datetime.datetime.utcnow().strftime(
143+
"%a, %d %b %Y %H:%M:%S GMT"
144+
)
145+
recent_breaches.append(
146+
{
147+
"breachid": breach.key.id_or_name,
148+
"timestamp": formatted_timestamp,
149+
"logo": breach.get("logo"),
150+
"description": breach.get("xposure_desc"),
151+
"count": breach.get("xposed_records"),
152+
}
153+
)
154+
155+
# Transform to response format before caching
156+
response_data = {
157+
"Breaches_Count": metrics["breaches_count"],
158+
"Breaches_Records": metrics["breaches_total_records"],
159+
"Pastes_Count": str(metrics["pastes_count"]),
160+
"Pastes_Records": metrics["pastes_total_records"],
161+
"Yearly_Breaches_Count": metrics["yearly_count"],
162+
"Industry_Breaches_Count": metrics["industry_breaches_count"],
163+
"Top_Breaches": top_breaches,
164+
"Recent_Breaches": recent_breaches,
165+
}
166+
cache_analytics(cache_key, response_data)
167+
168+
return DetailedMetricsResponse(**response_data)
125169
except Exception as e:
126170
await send_exception_email(
127171
api_route="GET /v1/analytics/metrics",

0 commit comments

Comments
 (0)