cli: improve error logging for call command staging/stintel/dev
authorStijn Tintel <stijn@linux-ipv6.be>
Fri, 18 Feb 2022 11:18:24 +0000 (13:18 +0200)
committerStijn Tintel <stijn@linux-ipv6.be>
Mon, 28 Feb 2022 14:07:49 +0000 (16:07 +0200)
commit584f56a2331471459604ad054b3a7bcc366e0f07
tree8fa31bc5552b3ee91a07c54752d77dfa7589086a
parentb3cd5ab4c010ee637f9c6d07460471c6246b7a49
cli: improve error logging for call command

When the ubus "call" command fails, ubus prints "Command failed: ...".
This is fine when the call command is executed interactively by the
user. However, when the call command is executed non-interactively,
these log messages leave the user completely clueless:

  netifd: wan6 (10841): Command failed: Unknown error

  procd: /etc/rc.d/S80umdns: Failed to parse message data

These messages contain absolutely no info that explains where they come
from; it's not even clear they are coming from ubus. This makes tracking
down what's causing them virtually impossible.

Improve this situation by printing the full ubus call to stderr when
stderr is not a TTY.

Example of improved error message:
  netifd: wan (2836): Command failed: ubus call network.interface notify_proto { "action": 0, "link-up": false, "keep": false, "interface": "wan" } (Permission denied)

While one might argue not to include the JSON message in the log,
excluding it will still not help to reproduce the failed command.
As we only print the full command when stderr is not a TTY, seeing this
error means we're doing a bad ubus call somewhere, which is a bug and
should be fixed. Printing the full command makes more sense than
printing half the command and still requiring us to figure out the exact
command that failed.

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Acked-by: Petr Štetiar <ynezz@true.cz>
Acked-by: Jo-Philipp Wich <jo@mein.io>
cli.c