189 lines
6.1 KiB
TypeScript
189 lines
6.1 KiB
TypeScript
import {
|
|
MCPToolLogEntry,
|
|
MCPToolLogFilters,
|
|
MCPToolLogStats,
|
|
MCPToolLogFilterData,
|
|
MCPHistogramResponse,
|
|
MCPCostHistogramResponse,
|
|
MCPTopToolsResponse,
|
|
Pagination,
|
|
} from "@/lib/types/logs";
|
|
import { baseApi } from "./baseApi";
|
|
|
|
// Helper function to build MCP histogram filter params
|
|
function buildMCPFilterParams(filters: MCPToolLogFilters): Record<string, string | number> {
|
|
const params: Record<string, string | number> = {};
|
|
if (filters.tool_names && filters.tool_names.length > 0) {
|
|
params.tool_names = filters.tool_names.join(",");
|
|
}
|
|
if (filters.server_labels && filters.server_labels.length > 0) {
|
|
params.server_labels = filters.server_labels.join(",");
|
|
}
|
|
if (filters.status && filters.status.length > 0) {
|
|
params.status = filters.status.join(",");
|
|
}
|
|
if (filters.virtual_key_ids && filters.virtual_key_ids.length > 0) {
|
|
params.virtual_key_ids = filters.virtual_key_ids.join(",");
|
|
}
|
|
if (filters.llm_request_ids && filters.llm_request_ids.length > 0) {
|
|
params.llm_request_ids = filters.llm_request_ids.join(",");
|
|
}
|
|
if (filters.start_time) params.start_time = filters.start_time;
|
|
if (filters.end_time) params.end_time = filters.end_time;
|
|
if (filters.min_latency !== undefined) params.min_latency = filters.min_latency;
|
|
if (filters.max_latency !== undefined) params.max_latency = filters.max_latency;
|
|
if (filters.content_search) params.content_search = filters.content_search;
|
|
return params;
|
|
}
|
|
|
|
export const mcpLogsApi = baseApi.injectEndpoints({
|
|
endpoints: (builder) => ({
|
|
// Get MCP tool logs with filters and pagination
|
|
getMCPLogs: builder.query<
|
|
{
|
|
logs: MCPToolLogEntry[];
|
|
pagination: Pagination;
|
|
stats: MCPToolLogStats;
|
|
has_logs: boolean;
|
|
},
|
|
{
|
|
filters: MCPToolLogFilters;
|
|
pagination: Pagination;
|
|
}
|
|
>({
|
|
query: ({ filters, pagination }) => {
|
|
const params: Record<string, string | number> = {
|
|
limit: pagination.limit,
|
|
offset: pagination.offset,
|
|
sort_by: pagination.sort_by,
|
|
order: pagination.order,
|
|
};
|
|
|
|
// Add filters to params if they exist
|
|
if (filters.tool_names && filters.tool_names.length > 0) {
|
|
params.tool_names = filters.tool_names.join(",");
|
|
}
|
|
if (filters.server_labels && filters.server_labels.length > 0) {
|
|
params.server_labels = filters.server_labels.join(",");
|
|
}
|
|
if (filters.status && filters.status.length > 0) {
|
|
params.status = filters.status.join(",");
|
|
}
|
|
if (filters.virtual_key_ids && filters.virtual_key_ids.length > 0) {
|
|
params.virtual_key_ids = filters.virtual_key_ids.join(",");
|
|
}
|
|
if (filters.llm_request_ids && filters.llm_request_ids.length > 0) {
|
|
params.llm_request_ids = filters.llm_request_ids.join(",");
|
|
}
|
|
if (filters.start_time) params.start_time = filters.start_time;
|
|
if (filters.end_time) params.end_time = filters.end_time;
|
|
if (filters.min_latency) params.min_latency = filters.min_latency;
|
|
if (filters.max_latency) params.max_latency = filters.max_latency;
|
|
if (filters.content_search) params.content_search = filters.content_search;
|
|
|
|
return {
|
|
url: "/mcp-logs",
|
|
params,
|
|
};
|
|
},
|
|
providesTags: ["MCPLogs"],
|
|
}),
|
|
|
|
// Get MCP tool logs statistics with filters
|
|
getMCPLogsStats: builder.query<
|
|
MCPToolLogStats,
|
|
{
|
|
filters: MCPToolLogFilters;
|
|
}
|
|
>({
|
|
query: ({ filters }) => {
|
|
const params: Record<string, string | number> = {};
|
|
|
|
// Add filters to params if they exist
|
|
if (filters.tool_names && filters.tool_names.length > 0) {
|
|
params.tool_names = filters.tool_names.join(",");
|
|
}
|
|
if (filters.server_labels && filters.server_labels.length > 0) {
|
|
params.server_labels = filters.server_labels.join(",");
|
|
}
|
|
if (filters.status && filters.status.length > 0) {
|
|
params.status = filters.status.join(",");
|
|
}
|
|
if (filters.virtual_key_ids && filters.virtual_key_ids.length > 0) {
|
|
params.virtual_key_ids = filters.virtual_key_ids.join(",");
|
|
}
|
|
if (filters.llm_request_ids && filters.llm_request_ids.length > 0) {
|
|
params.llm_request_ids = filters.llm_request_ids.join(",");
|
|
}
|
|
if (filters.start_time) params.start_time = filters.start_time;
|
|
if (filters.end_time) params.end_time = filters.end_time;
|
|
if (filters.min_latency) params.min_latency = filters.min_latency;
|
|
if (filters.max_latency) params.max_latency = filters.max_latency;
|
|
if (filters.content_search) params.content_search = filters.content_search;
|
|
|
|
return {
|
|
url: "/mcp-logs/stats",
|
|
params,
|
|
};
|
|
},
|
|
providesTags: ["MCPLogs"],
|
|
}),
|
|
|
|
// Get available filter data (tool names, server labels)
|
|
getMCPAvailableFilterData: builder.query<MCPToolLogFilterData, void>({
|
|
query: () => "/mcp-logs/filterdata",
|
|
providesTags: ["MCPLogs"],
|
|
}),
|
|
|
|
// Get MCP tool call volume histogram
|
|
getMCPHistogram: builder.query<MCPHistogramResponse, { filters: MCPToolLogFilters }>({
|
|
query: ({ filters }) => ({
|
|
url: "/mcp-logs/histogram",
|
|
params: buildMCPFilterParams(filters),
|
|
}),
|
|
providesTags: ["MCPLogs"],
|
|
}),
|
|
|
|
// Get MCP cost histogram
|
|
getMCPCostHistogram: builder.query<MCPCostHistogramResponse, { filters: MCPToolLogFilters }>({
|
|
query: ({ filters }) => ({
|
|
url: "/mcp-logs/histogram/cost",
|
|
params: buildMCPFilterParams(filters),
|
|
}),
|
|
providesTags: ["MCPLogs"],
|
|
}),
|
|
|
|
// Get top MCP tools by call count
|
|
getMCPTopTools: builder.query<MCPTopToolsResponse, { filters: MCPToolLogFilters }>({
|
|
query: ({ filters }) => ({
|
|
url: "/mcp-logs/histogram/top-tools",
|
|
params: buildMCPFilterParams(filters),
|
|
}),
|
|
providesTags: ["MCPLogs"],
|
|
}),
|
|
|
|
// Delete MCP tool logs by their IDs
|
|
deleteMCPLogs: builder.mutation<void, { ids: string[] }>({
|
|
query: ({ ids }) => ({
|
|
url: "/mcp-logs",
|
|
method: "DELETE",
|
|
body: { ids },
|
|
}),
|
|
invalidatesTags: ["MCPLogs"],
|
|
}),
|
|
}),
|
|
});
|
|
|
|
export const {
|
|
useGetMCPLogsQuery,
|
|
useGetMCPLogsStatsQuery,
|
|
useGetMCPAvailableFilterDataQuery,
|
|
useGetMCPAvailableFilterDataQuery: useGetMCPLogsFilterDataQuery,
|
|
useLazyGetMCPLogsQuery,
|
|
useLazyGetMCPLogsStatsQuery,
|
|
useLazyGetMCPAvailableFilterDataQuery,
|
|
useLazyGetMCPHistogramQuery,
|
|
useLazyGetMCPCostHistogramQuery,
|
|
useLazyGetMCPTopToolsQuery,
|
|
useDeleteMCPLogsMutation,
|
|
} = mcpLogsApi; |