mirror of https://github.com/sysown/proxysql
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.
184 lines
4.4 KiB
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 */
|