#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 */