// cell probe - Query a running probe server // // Usage: // cell probe List all targets and probes // cell probe Query a probe // cell probe k=v ... Query with arguments // cell probe --port=8080 game state Use a different port var http = use('http') var json = use('json') var port = 9000 var base = null function print_targets(targets) { var keys = array(targets) var j = 0 var p = 0 var probes = null while (j < length(keys)) { probes = targets[keys[j]] log.console(keys[j]) p = 0 while (p < length(probes)) { log.console(" " + probes[p]) p = p + 1 } j = j + 1 } } function run() { var target = null var name = null var probe_args = {} var i = 0 var eq = null var k = null var v = null var n = null for (i = 0; i < length(args); i++) { if (args[i] == '--help' || args[i] == '-h') { log.console("Usage: cell probe [target] [name] [key=value ...]") log.console("") log.console(" cell probe List all targets and probes") log.console(" cell probe game state Query game/state") log.console(" cell probe game entity id=1 Query with arguments") log.console("") log.console("Options:") log.console(" --port=N Connect to port N (default 9000)") return } else if (starts_with(args[i], '--port=')) { port = number(text(args[i], 7)) } else if (target == null) { target = args[i] } else if (name == null) { name = args[i] } else { eq = search(args[i], "=") if (eq != null) { k = text(args[i], 0, eq) v = text(args[i], eq + 1) n = number(v) if (n != null) { v = n } else if (v == "true") { v = true } else if (v == "false") { v = false } else if (v == "null") { v = null } probe_args[k] = v } } } base = "http://127.0.0.1:" + text(port) var resp = null var body = null var data = null if (target == null) { resp = http.request("GET", base + "/discover", null, null) } else { body = {target: target, name: name} if (length(array(probe_args)) > 0) body.args = probe_args resp = http.request("POST", base + "/probe", {"content-type": "application/json"}, json.encode(body, false)) } if (resp == null) { log.error("could not connect to probe server on port " + text(port)) return } var _parse = function() { data = json.decode(resp.body) } disruption { data = null } _parse() if (data == null) { log.error("invalid response from server") return } if (!data.ok) { log.error(data.error) return } if (target == null) { print_targets(data.targets) } else { log.console(json.encode(data.result, 2)) } } run() $stop()