import { ResourceProvider } from "../types.js";
import { supabase } from "../runtime/context.js";
export const analyticsResources: ResourceProvider = {
list: async () => {
const resources = [
{
uri: "analytics://events/summary",
name: "Analytics Events Summary",
description: "Overview of all analytics events",
mimeType: "application/json",
},
{
uri: "analytics://api-logs/summary",
name: "API Logs Summary",
description: "Overview of all API calls and performance",
mimeType: "application/json",
},
];
return resources;
},
read: async (uri: string) => {
try {
if (uri === "analytics://events/summary") {
const { data, error } = await supabase
.from("analytics_events")
.select("event_type, timestamp")
.order("timestamp", { ascending: false })
.limit(100);
if (error) throw error;
const eventTypeCounts: Record<string, number> = {};
data.forEach((event) => {
eventTypeCounts[event.event_type] =
(eventTypeCounts[event.event_type] || 0) + 1;
});
const recentEvents = data.slice(0, 10);
return {
contents: [
{
uri,
mimeType: "application/json",
text: JSON.stringify(
{
total_events: data.length,
event_types: eventTypeCounts,
recent_events: recentEvents,
},
null,
2
),
},
],
};
}
if (uri === "analytics://api-logs/summary") {
const { data, error } = await supabase
.from("api_logs")
.select("api_name, success, response_time_ms, created_at")
.order("created_at", { ascending: false })
.limit(100);
if (error) throw error;
const apiStats: Record<
string,
{ total: number; successful: number; failed: number; avg_time: number }
> = {};
data.forEach((log) => {
if (!apiStats[log.api_name]) {
apiStats[log.api_name] = {
total: 0,
successful: 0,
failed: 0,
avg_time: 0,
};
}
apiStats[log.api_name].total++;
if (log.success) {
apiStats[log.api_name].successful++;
} else {
apiStats[log.api_name].failed++;
}
});
Object.keys(apiStats).forEach((api) => {
const apiLogs = data.filter((log) => log.api_name === api);
const totalTime = apiLogs.reduce(
(sum, log) => sum + (log.response_time_ms || 0),
0
);
apiStats[api].avg_time = Math.round(totalTime / apiLogs.length);
});
return {
contents: [
{
uri,
mimeType: "application/json",
text: JSON.stringify(
{
total_api_calls: data.length,
api_statistics: apiStats,
recent_calls: data.slice(0, 10),
},
null,
2
),
},
],
};
}
throw new Error("Unknown analytics resource");
} catch (error: any) {
return {
contents: [
{
uri,
mimeType: "text/plain",
text: `Error reading analytics resource: ${error.message}`,
},
],
};
}
},
};