lightning-cli: support --filter parameter.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Added: cli: new `--filter` parameter to reduce JSON output.
This commit is contained in:
Rusty Russell 2022-11-09 14:10:57 +10:30
parent c31fb99d2d
commit ae3550cb00
3 changed files with 22 additions and 2 deletions

View File

@ -620,7 +620,7 @@ int main(int argc, char *argv[])
enum input input = DEFAULT_INPUT;
enum log_level notification_level = LOG_INFORM;
bool last_was_progress = false;
char *command = NULL;
char *command = NULL, *filter = NULL;
err_set_progname(argv[0]);
jsmn_init(&parser);
@ -650,6 +650,9 @@ int main(int argc, char *argv[])
opt_register_arg("-N|--notifications", opt_set_level,
opt_show_level, &notification_level,
"Set notification level, or none");
opt_register_arg("-l|--filter", opt_set_charp,
opt_show_charp, &filter,
"Set JSON reply filter");
opt_register_version();
@ -713,8 +716,11 @@ int main(int argc, char *argv[])
enable_notifications(fd);
cmd = tal_fmt(ctx,
"{ \"jsonrpc\" : \"2.0\", \"method\" : \"%s\", \"id\" : \"%s\", \"params\" :",
"{ \"jsonrpc\" : \"2.0\", \"method\" : \"%s\", \"id\" : \"%s\",",
json_escape(ctx, method)->s, idstr);
if (filter)
tal_append_fmt(&cmd, "\"filter\": %s,", filter);
tal_append_fmt(&cmd, " \"params\" :");
if (input == DEFAULT_INPUT) {
/* Hacky autodetect; only matters if more than single arg */

View File

@ -71,6 +71,10 @@ print out notifications of *LEVEL* or above (one of `io`, `debug`,
`info` (the default), `unusual` or `broken`: they are prefixed with `#
`.
* **--filter**/**-l**=*JSON*
This hands lightningd *JSON* as a filter, which controls what will be output, e.g. `'--filter={"help":[{"command":true}]}'`. See lightningd-rpc(7) for more details on how to specify filters.
* **--help**/**-h**
Pretty-print summary of options to standard output and exit. The format can

View File

@ -927,6 +927,16 @@ def test_cli(node_factory):
j, _ = json.JSONDecoder().raw_decode(out)
assert 'help [command]' in j['help'][0]['verbose']
# Test filtering
out = subprocess.check_output(['cli/lightning-cli',
'--network={}'.format(TEST_NETWORK),
'--lightning-dir={}'
.format(l1.daemon.lightning_dir),
'-J', '--filter={"help":[{"command":true}]}',
'help', 'help']).decode('utf-8')
j, _ = json.JSONDecoder().raw_decode(out)
assert j == {'help': [{'command': 'help [command]'}]}
# Test missing parameters.
try:
# This will error due to missing parameters.