--controller local lxp = require("lxp") local lom = require("lxp.lom") local inspect = require "inspect" local easyhttp = require("easyhttp") local urlencode = require("urlencode") local _ENV=require "std.strict" (_G) local live_nodes = {} function node_start(child) local host = child.attr.host local nodetype = child.attr.nodetype local nodename = child.attr.nodename local args = child.attr.args --may be nil local msg = "https://"..host.."/persistmods/start?nodetype=".."\""..nodetype.."\"".."&nodename=".."\""..nodename.."\"" if (args ~= nil) then msg = msg .."&args=\""..args.."\"" end local response, code, headers = easyhttp.request(msg) print( msg) --send & handle resp live_nodes[nodename]=host end function node_execute(child) local nodename=child.attr.nodename local host=live_nodes[nodename] print ("https://"..host.."/persistmods/execute?nodename=".."\""..nodename.."\"") local response, code, headers = easyhttp.request("https://"..host.."/persistmods/execute?nodename=".."\""..nodename.."\"") end function node_get_logs(child) for a, b in pairs(live_nodes) do msg="https://"..b.."//persistmods/get_logs?nodename=".."\""..a.."\"" local response, code, headers = easyhttp.request(msg) print)msg) end local file = io.open("logfil.txt", "w") -- "w" means write (overwrite) file:write(response) file:close() end function node_check_test(child) local file = io.open("logfil.txt", "r") print(file:read("*a")) end function node_close(child) local nodename=child.attr.nodename local host=live_nodes[nodename] print ("https://"..host.."/persistsmods/stop?nodename=".."\""..nodename.."\"") local response, code, headers = easyhttp.request("https://"..host.."/persistsmods/stop?nodename=".."\""..nodename.."\"") end function exec_child(child) if (child.tag == "notetool-node-start") then node_start(child) elseif (child.tag == "notetool-node-execute") then node_execute(child) elseif (child.tag == "notetool-get-logs") then node_get_logs(child) elseif (child.tag == "nodetool-check-test") then node_check_test(child) elseif (child.tag == "nodetool-close-node") then node_close(child) end end --start local filename if (#arg<1) then filename="commands.xml" else filename=arg[1] end --load data from filename local xml_file = io.open(filename,"r") local xml_string = xml_file:read("*a") xml_file:close() local xml_string = xml_string:gsub("[\r\n]", "") local xml_tree = lom.parse(""..xml_string.."") --print (inspect(xml_tree)) --now we have the xml iń an object. work through it for i, child in ipairs(xml_tree) do if type(child) == "table" then --print("Child tag:", child.tag) exec_child(child) --for k, v in pairs(child.attr) do --print(" -", k, v) --end end end