You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/lib/Cache_Tool_Handler.cpp

184 lines
4.4 KiB

#ifdef PROXYSQLGENAI
#include "proxysql.h"
#include "../deps/json/json.hpp"
using json = nlohmann::json;
#define PROXYJSON
#include "Cache_Tool_Handler.h"
#include "MCP_Thread.h"
#include "proxysql_debug.h"
Cache_Tool_Handler::Cache_Tool_Handler(MCP_Threads_Handler* handler)
: mcp_handler(handler)
{
pthread_mutex_init(&handler_lock, NULL);
proxy_debug(PROXY_DEBUG_GENERIC, 3, "Cache_Tool_Handler created\n");
}
Cache_Tool_Handler::~Cache_Tool_Handler() {
close();
pthread_mutex_destroy(&handler_lock);
proxy_debug(PROXY_DEBUG_GENERIC, 3, "Cache_Tool_Handler destroyed\n");
}
int Cache_Tool_Handler::init() {
proxy_info("Cache_Tool_Handler initialized\n");
return 0;
}
void Cache_Tool_Handler::close() {
proxy_debug(PROXY_DEBUG_GENERIC, 2, "Cache_Tool_Handler closed\n");
}
json Cache_Tool_Handler::get_tool_list() {
json tools = json::array();
// Stub tools for cache management
tools.push_back(create_tool_description(
"get_cache_stats",
"Get ProxySQL query cache statistics",
{
{"type", "object"},
{"properties", {}}
}
));
tools.push_back(create_tool_description(
"invalidate_cache",
"Invalidate specific cache entries",
{
{"type", "object"},
{"properties", {
{"pattern", {
{"type", "string"},
{"description", "Pattern matching queries to invalidate"}
}}
}},
{"required", {"pattern"}}
}
));
tools.push_back(create_tool_description(
"set_cache_ttl",
"Set time-to-live for cache entries",
{
{"type", "object"},
{"properties", {
{"ttl_ms", {
{"type", "integer"},
{"description", "TTL in milliseconds"}
}}
}},
{"required", {"ttl_ms"}}
}
));
tools.push_back(create_tool_description(
"clear_cache",
"Clear all entries from the query cache",
{
{"type", "object"},
{"properties", {}}
}
));
tools.push_back(create_tool_description(
"warm_cache",
"Warm up cache with specified queries",
{
{"type", "object"},
{"properties", {
{"queries", {
{"type", "array"},
{"description", "Array of SQL queries to execute"}
}}
}},
{"required", {"queries"}}
}
));
tools.push_back(create_tool_description(
"get_cache_entries",
"List currently cached queries",
{
{"type", "object"},
{"properties", {
{"limit", {
{"type", "integer"},
{"description", "Maximum number of entries to return"}
}}
}}
}
));
json result;
result["tools"] = tools;
return result;
}
json Cache_Tool_Handler::get_tool_description(const std::string& tool_name) {
json tools_list = get_tool_list();
for (const auto& tool : tools_list["tools"]) {
if (tool["name"] == tool_name) {
return tool;
}
}
return create_error_response("Tool not found: " + tool_name);
}
json Cache_Tool_Handler::execute_tool(const std::string& tool_name, const json& arguments) {
pthread_mutex_lock(&handler_lock);
json result;
// Stub implementation - returns placeholder responses
if (tool_name == "get_cache_stats") {
result = create_success_response(json{
{"message", "get_cache_stats functionality to be implemented"},
{"stats", {
{"entries", 0},
{"hit_rate", 0.0},
{"memory_usage", 0}
}}
});
} else if (tool_name == "invalidate_cache") {
std::string pattern = arguments.value("pattern", "");
result = create_success_response(json{
{"message", "invalidate_cache functionality to be implemented"},
{"pattern", pattern}
});
} else if (tool_name == "set_cache_ttl") {
int ttl_ms = arguments.value("ttl_ms", 0);
result = create_success_response(json{
{"message", "set_cache_ttl functionality to be implemented"},
{"ttl_ms", ttl_ms}
});
} else if (tool_name == "clear_cache") {
result = create_success_response(json{
{"message", "clear_cache functionality to be implemented"}
});
} else if (tool_name == "warm_cache") {
json queries = arguments.value("queries", json::array());
result = create_success_response(json{
{"message", "warm_cache functionality to be implemented"},
{"query_count", queries.size()}
});
} else if (tool_name == "get_cache_entries") {
int limit = arguments.value("limit", 100);
result = create_success_response(json{
{"message", "get_cache_entries functionality to be implemented"},
{"entries", json::array()},
{"limit", limit}
});
} else {
result = create_error_response("Unknown tool: " + tool_name);
}
pthread_mutex_unlock(&handler_lock);
return result;
}
#endif /* PROXYSQLGENAI */