Upload files to "/"
This commit is contained in:
parent
8dff43e7e0
commit
cbbab67507
203
futriix GOSSIP инструкция.txt
Normal file
203
futriix GOSSIP инструкция.txt
Normal file
@ -0,0 +1,203 @@
|
||||
1. Пример Lua скрипта для управления кластером (lua-scripts/cluster.lua)
|
||||
|
||||
-- cluster.lua - Пример управления GOSSIP кластером
|
||||
|
||||
-- Функция для добавления узла в кластер
|
||||
function add_node(address, port)
|
||||
local result = futriix.gossip_add_node(address, port)
|
||||
if result then
|
||||
print("Node " .. address .. ":" .. port .. " added successfully")
|
||||
else
|
||||
print("Failed to add node: " .. tostring(result))
|
||||
end
|
||||
end
|
||||
|
||||
-- Функция для удаления узла из кластера
|
||||
function remove_node(node_id)
|
||||
local result = futriix.gossip_remove_node(node_id)
|
||||
if result then
|
||||
print("Node " .. node_id .. " removed successfully")
|
||||
else
|
||||
print("Failed to remove node: " .. tostring(result))
|
||||
end
|
||||
end
|
||||
|
||||
-- Функция для просмотра списка узлов
|
||||
function list_nodes()
|
||||
local nodes = futriix.gossip_list_nodes()
|
||||
if nodes then
|
||||
print("Cluster nodes (" .. #nodes .. "):")
|
||||
for i, node in ipairs(nodes) do
|
||||
local status = "Alive"
|
||||
if node.status == "Suspect" then
|
||||
status = "Suspect"
|
||||
elseif node.status == "Dead" then
|
||||
status = "Dead"
|
||||
end
|
||||
print(string.format(" %d. %s (%s:%d) - %s", i, node.id, node.address, node.port, status))
|
||||
end
|
||||
else
|
||||
print("Failed to get nodes list")
|
||||
end
|
||||
end
|
||||
|
||||
-- Функция для переконфигурации кластера
|
||||
function reconfigure_cluster(nodes_table)
|
||||
local result = futriix.gossip_reconfigure(nodes_table)
|
||||
if result then
|
||||
print("Cluster reconfigured successfully")
|
||||
else
|
||||
print("Failed to reconfigure cluster: " .. tostring(result))
|
||||
end
|
||||
end
|
||||
|
||||
-- Регистрируем глобальные функции
|
||||
futriix = futriix or {}
|
||||
futriix.add_node = add_node
|
||||
futriix.remove_node = remove_node
|
||||
futriix.list_nodes = list_nodes
|
||||
futriix.reconfigure_cluster = reconfigure_cluster
|
||||
|
||||
print("GOSSIP cluster management functions loaded:")
|
||||
print(" futriix.add_node(address, port)")
|
||||
print(" futriix.remove_node(node_id)")
|
||||
print(" futriix.list_nodes()")
|
||||
print(" futriix.reconfigure_cluster(nodes_table)")
|
||||
|
||||
|
||||
2. Примеры использования в Lua интерпретаторе
|
||||
|
||||
|
||||
-- Загрузка скрипта управления кластером
|
||||
dofile("lua-scripts/cluster.lua")
|
||||
|
||||
-- Просмотр текущих узлов кластера
|
||||
futriix.list_nodes()
|
||||
|
||||
-- Добавление новых узлов в кластер
|
||||
futriix.add_node("192.168.1.100", 7946)
|
||||
futriix.add_node("192.168.1.101", 7946)
|
||||
futriix.add_node("192.168.1.102", 7946)
|
||||
|
||||
-- Просмотр обновленного списка узлов
|
||||
futriix.list_nodes()
|
||||
|
||||
-- Удаление узла из кластера
|
||||
futriix.remove_node("192.168.1.102:7946")
|
||||
|
||||
-- Переконфигурация всего кластера
|
||||
local new_nodes = {
|
||||
{"10.0.0.1", 7946},
|
||||
{"10.0.0.2", 7946},
|
||||
{"10.0.0.3", 7946}
|
||||
}
|
||||
futriix.reconfigure_cluster(new_nodes)
|
||||
|
||||
3. Пример HTTP API для управления кластером
|
||||
|
||||
Добавьте в src/server.rs следующие маршруты:
|
||||
|
||||
async fn start_http_server(&self) -> Result<(), Box<dyn std::error::Error>> {
|
||||
use warp::Filter;
|
||||
|
||||
let db = self.db.clone();
|
||||
|
||||
// Маршрут для добавления узла
|
||||
let add_node = warp::path!("gossip" / "nodes")
|
||||
.and(warp::post())
|
||||
.and(warp::body::json())
|
||||
.and_then(move |node: HashMap<String, String>| {
|
||||
let db = db.clone();
|
||||
async move {
|
||||
let address = node.get("address").unwrap_or(&"".to_string()).clone();
|
||||
let port: u16 = node.get("port").unwrap_or(&"7946".to_string()).parse().unwrap_or(7946);
|
||||
|
||||
let db_lock = db.lock().await;
|
||||
match db_lock.gossip_add_node(&address, port) {
|
||||
Ok(_) => Ok(warp::reply::json(&serde_json::json!({"status": "success"}))),
|
||||
Err(e) => Ok(warp::reply::json(&serde_json::json!({"status": "error", "message": e})))
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Маршрут для удаления узла
|
||||
let remove_node = warp::path!("gossip" / "nodes" / String)
|
||||
.and(warp::delete())
|
||||
.and_then(move |node_id: String| {
|
||||
let db = db.clone();
|
||||
async move {
|
||||
let db_lock = db.lock().await;
|
||||
match db_lock.gossip_remove_node(&node_id) {
|
||||
Ok(_) => Ok(warp::reply::json(&serde_json::json!({"status": "success"}))),
|
||||
Err(e) => Ok(warp::reply::json(&serde_json::json!({"status": "error", "message": e})))
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Маршрут для просмотра узлов
|
||||
let list_nodes = warp::path!("gossip" / "nodes")
|
||||
.and(warp::get())
|
||||
.and_then(move || {
|
||||
let db = db.clone();
|
||||
async move {
|
||||
let db_lock = db.lock().await;
|
||||
match db_lock.gossip_list_nodes() {
|
||||
Ok(nodes) => Ok(warp::reply::json(&serde_json::json!({"status": "success", "nodes": nodes}))),
|
||||
Err(e) => Ok(warp::reply::json(&serde_json::json!({"status": "error", "message": e})))
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let routes = add_node.or(remove_node).or(list_nodes);
|
||||
|
||||
println!("{} on port {}", Colour::White.paint("HTTP server starting"), self.config.server.port);
|
||||
warp::serve(routes).run(([127, 0, 0, 1], self.config.server.port)).await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
4. Примеры HTTP запросов
|
||||
|
||||
# Добавление узла
|
||||
curl -X POST http://localhost:8080/gossip/nodes \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"address": "192.168.1.100", "port": 7946}'
|
||||
|
||||
# Просмотр всех узлов
|
||||
curl http://localhost:8080/gossip/nodes
|
||||
|
||||
# Удаление узла
|
||||
curl -X DELETE http://localhost:8080/gossip/nodes/192.168.1.100:7946
|
||||
|
||||
5. Пример автоматической конфигурации кластера (lua-scripts/auto-cluster.lua)
|
||||
|
||||
-- auto-cluster.lua - Автоматическая настройка кластера при запуске
|
||||
|
||||
-- Функция для автоматического обнаружения узлов
|
||||
function auto_discover_nodes()
|
||||
print("Starting automatic cluster discovery...")
|
||||
|
||||
-- Предопределенные узлы для подключения
|
||||
local initial_nodes = {
|
||||
{"192.168.1.100", 7946},
|
||||
{"192.168.1.101", 7946},
|
||||
{"192.168.1.102", 7946}
|
||||
}
|
||||
|
||||
for _, node in ipairs(initial_nodes) do
|
||||
local address, port = node[1], node[2]
|
||||
print("Adding node: " .. address .. ":" .. port)
|
||||
local success = futriix.gossip_add_node(address, port)
|
||||
if success then
|
||||
print("✓ Node added successfully")
|
||||
else
|
||||
print("✗ Failed to add node: " .. tostring(success))
|
||||
end
|
||||
end
|
||||
|
||||
print("Cluster auto-discovery completed")
|
||||
end
|
||||
|
||||
-- Запускаем автоматическое обнаружение при загрузке
|
||||
auto_discover_nodes()
|
||||
|
Loading…
x
Reference in New Issue
Block a user