module glustercli.peer_parser; import std.process; import std.json; import std..string; import arsd.dom; enum StateOnline = "Online"; enum StateOffline = "Offline"; struct Peer { string id; string address; string state; JSONValue toJson() { return JSONValue( [ "id": JSONValue(id), "address": JSONValue(address), "state": JSONValue(state) ] ); } } Peer[] parsePeersFromPoolList(string[] output) { Peer[] peers; auto document = new Document(output.join("")); auto elements = document.getElementsByTagName("peer"); foreach(ele; elements) { auto peer = Peer(); peer.state = StateOffline; peer.id = ele.querySelector("uuid").innerText; peer.address = ele.querySelector("hostname").innerText; if (ele.querySelector("connected").innerText == "1") peer.state = StateOnline; if (peer.address == "localhost") peer.address = environment.get("GLUSTER_HOST", "localhost"); peers ~= peer; } return peers; }