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.
162 lines
4.0 KiB
162 lines
4.0 KiB
#ifdef PROXYSQLGENAI
|
|
|
|
#include "proxysql.h"
|
|
|
|
#include "../deps/json/json.hpp"
|
|
using json = nlohmann::json;
|
|
#define PROXYJSON
|
|
|
|
#include "Admin_Tool_Handler.h"
|
|
#include "MCP_Thread.h"
|
|
#include "proxysql_debug.h"
|
|
|
|
Admin_Tool_Handler::Admin_Tool_Handler(MCP_Threads_Handler* handler)
|
|
: mcp_handler(handler)
|
|
{
|
|
pthread_mutex_init(&handler_lock, NULL);
|
|
proxy_debug(PROXY_DEBUG_GENERIC, 3, "Admin_Tool_Handler created\n");
|
|
}
|
|
|
|
Admin_Tool_Handler::~Admin_Tool_Handler() {
|
|
close();
|
|
pthread_mutex_destroy(&handler_lock);
|
|
proxy_debug(PROXY_DEBUG_GENERIC, 3, "Admin_Tool_Handler destroyed\n");
|
|
}
|
|
|
|
int Admin_Tool_Handler::init() {
|
|
proxy_info("Admin_Tool_Handler initialized\n");
|
|
return 0;
|
|
}
|
|
|
|
void Admin_Tool_Handler::close() {
|
|
proxy_debug(PROXY_DEBUG_GENERIC, 2, "Admin_Tool_Handler closed\n");
|
|
}
|
|
|
|
json Admin_Tool_Handler::get_tool_list() {
|
|
json tools = json::array();
|
|
|
|
// Stub tools for administrative operations
|
|
tools.push_back(create_tool_description(
|
|
"admin_list_users",
|
|
"List all MySQL users configured in ProxySQL",
|
|
{
|
|
{"type", "object"},
|
|
{"properties", {}}
|
|
}
|
|
));
|
|
|
|
tools.push_back(create_tool_description(
|
|
"admin_show_processes",
|
|
"Show running MySQL processes",
|
|
{
|
|
{"type", "object"},
|
|
{"properties", {}}
|
|
}
|
|
));
|
|
|
|
tools.push_back(create_tool_description(
|
|
"admin_kill_query",
|
|
"Kill a running query by process ID",
|
|
{
|
|
{"type", "object"},
|
|
{"properties", {
|
|
{"process_id", {
|
|
{"type", "integer"},
|
|
{"description", "Process ID to kill"}
|
|
}}
|
|
}},
|
|
{"required", {"process_id"}}
|
|
}
|
|
));
|
|
|
|
tools.push_back(create_tool_description(
|
|
"admin_flush_cache",
|
|
"Flush ProxySQL query cache",
|
|
{
|
|
{"type", "object"},
|
|
{"properties", {
|
|
{"cache_type", {
|
|
{"type", "string"},
|
|
{"enum", {"query_cache", "host_cache", "all"}},
|
|
{"description", "Type of cache to flush"}
|
|
}}
|
|
}},
|
|
{"required", {"cache_type"}}
|
|
}
|
|
));
|
|
|
|
tools.push_back(create_tool_description(
|
|
"admin_reload",
|
|
"Reload ProxySQL configuration (users, servers, etc.)",
|
|
{
|
|
{"type", "object"},
|
|
{"properties", {
|
|
{"target", {
|
|
{"type", "string"},
|
|
{"enum", {"users", "servers", "all"}},
|
|
{"description", "What to reload"}
|
|
}}
|
|
}},
|
|
{"required", {"target"}}
|
|
}
|
|
));
|
|
|
|
json result;
|
|
result["tools"] = tools;
|
|
return result;
|
|
}
|
|
|
|
json Admin_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 Admin_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 == "admin_list_users") {
|
|
result = create_success_response(json{
|
|
{"message", "admin_list_users functionality to be implemented"},
|
|
{"users", json::array()}
|
|
});
|
|
} else if (tool_name == "admin_show_processes") {
|
|
result = create_success_response(json{
|
|
{"message", "admin_show_processes functionality to be implemented"},
|
|
{"processes", json::array()}
|
|
});
|
|
} else if (tool_name == "admin_kill_query") {
|
|
int process_id = arguments.value("process_id", 0);
|
|
result = create_success_response(json{
|
|
{"message", "admin_kill_query functionality to be implemented"},
|
|
{"process_id", process_id}
|
|
});
|
|
} else if (tool_name == "admin_flush_cache") {
|
|
std::string cache_type = arguments.value("cache_type", "all");
|
|
result = create_success_response(json{
|
|
{"message", "admin_flush_cache functionality to be implemented"},
|
|
{"cache_type", cache_type}
|
|
});
|
|
} else if (tool_name == "admin_reload") {
|
|
std::string target = arguments.value("target", "all");
|
|
result = create_success_response(json{
|
|
{"message", "admin_reload functionality to be implemented"},
|
|
{"target", target}
|
|
});
|
|
} else {
|
|
result = create_error_response("Unknown tool: " + tool_name);
|
|
}
|
|
|
|
pthread_mutex_unlock(&handler_lock);
|
|
return result;
|
|
}
|
|
|
|
#endif /* PROXYSQLGENAI */
|