Files
cell/probe.ce

125 lines
2.9 KiB
Plaintext

// cell probe - Query a running probe server
//
// Usage:
// cell probe List all targets and probes
// cell probe <target> <name> Query a probe
// cell probe <target> <name> 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()