⚡ add tool for getting property tree from fgfs
by using --httpd in fgfs
This commit is contained in:
parent
2ea9e03522
commit
433743f790
|
@ -51,6 +51,7 @@ var socket=func(){
|
|||
AF_BAN: 21,
|
||||
AF_MAX: 22,
|
||||
|
||||
SOCKET_ERROR: -1,
|
||||
SOCK_STREAM: 1,
|
||||
SOCK_DGRAM: 2,
|
||||
SOCK_RAW: 3,
|
||||
|
|
19
std/json.nas
19
std/json.nas
|
@ -27,8 +27,10 @@ var _j_content = [
|
|||
"identifier"
|
||||
];
|
||||
|
||||
var parse = func() {
|
||||
var _parse_error = 0;
|
||||
|
||||
var parse = func() {
|
||||
_parse_error = 0;
|
||||
var text = "";
|
||||
var line = 1;
|
||||
var text_size = 0;
|
||||
|
@ -75,6 +77,7 @@ var parse = func() {
|
|||
init();
|
||||
if (!size(str)) {
|
||||
println("json::parse: empty string");
|
||||
_parse_error += 1;
|
||||
str = "[]";
|
||||
}
|
||||
text = str;
|
||||
|
@ -156,6 +159,7 @@ var parse = func() {
|
|||
var match = func(type) {
|
||||
if(token.type!=type) {
|
||||
println("json::parse: line ",line,": expect ",_j_content[type]," but get `",token.content,"`.");
|
||||
_parse_error += 1;
|
||||
}
|
||||
next();
|
||||
return;
|
||||
|
@ -224,6 +228,7 @@ var parse = func() {
|
|||
return func(source) {
|
||||
if(typeof(source)!="str") {
|
||||
println("json::parse: must use string but get", typeof(str));
|
||||
_parse_error += 1;
|
||||
return [];
|
||||
}
|
||||
|
||||
|
@ -297,3 +302,15 @@ var stringify = func(object) {
|
|||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
var get_error = func() {
|
||||
return _parse_error;
|
||||
}
|
||||
|
||||
var check_error = func() {
|
||||
if (_parse_error==0) {
|
||||
return;
|
||||
}
|
||||
println("json: encounter ", _parse_error, " error(s), stop.");
|
||||
exit(-1);
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
# used to get property tree from fgfs by httpd
|
||||
# use --httpd=5500 to start fgfs
|
||||
# and use this script to get property tree
|
||||
# 2023/11/06 ValKmjolnir
|
||||
|
||||
use module.libsock;
|
||||
use std.json;
|
||||
|
||||
var socket = libsock.socket;
|
||||
var sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP);
|
||||
|
||||
while((var err = socket.connect(sd, "127.0.0.1", 5500))==socket.SOCKET_ERROR) {
|
||||
println("[", os.time(), "] connect to 127.0.0.1:5500 failed: ", socket.errno());
|
||||
unix.sleep(1);
|
||||
}
|
||||
println("[", os.time(), "] connect to 127.0.0.1:5500 succeeded");
|
||||
|
||||
|
||||
var header = "GET /json/ HTTP/1.1\n\r\n";
|
||||
var res = socket.send(sd, header);
|
||||
var message = socket.recv(sd, 1024);
|
||||
|
||||
var total_source = message.str;
|
||||
var total_size = message.size;
|
||||
|
||||
while(message.size==1024) {
|
||||
message = socket.recv(sd, 1024);
|
||||
total_source ~= message.str;
|
||||
total_size += message.size;
|
||||
}
|
||||
|
||||
socket.closesocket(sd);
|
||||
|
||||
var A3E_position = find("{", total_source);
|
||||
var end_0_position = find("0\r\n\r\n", total_source);
|
||||
var props = substr(total_source, A3E_position, end_0_position-A3E_position);
|
||||
props = json.parse(props);
|
||||
json.check_error();
|
||||
|
||||
var dfs = func(tree, indent = "") {
|
||||
println(indent, "---------");
|
||||
println(indent, "path : \"", tree.path, "\"");
|
||||
println(indent, "name : \"", tree.name, "\"");
|
||||
println(indent, "index : \"", tree.index, "\"");
|
||||
println(indent, "type : \"", tree.type, "\"");
|
||||
println(indent, "nChildren : \"", tree.nChildren, "\"");
|
||||
println(indent, "---------");
|
||||
|
||||
if (contains(tree, "children")) {
|
||||
println(indent, "children :");
|
||||
foreach(var i; tree.children) {
|
||||
dfs(i, indent~" ");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dfs(props);
|
Loading…
Reference in New Issue