On 7/9/24 09:14, jm...@redhat.com wrote: > From: Jakob Meng <c...@jakobmeng.de> > > For monitoring systems such as Prometheus it would be beneficial if > OVS would expose statistics in a machine-readable format. > > This patch introduces support for different output formats to > ovs-appctl. It gains a global option '-f,--format' which changes it to > print a JSON document instead of plain-text for humans. For example, a > later patch implements support for > 'ovs-appctl --format json dpif/show'. By default, the output format > is plain-text as before. > > A new 'set-options' command has been added to lib/unixctl.c which > allows to change the output format of the commands executed afterwards > on the same socket connection. It is supposed to be run by ovs-appctl > transparently for the user when a specific output format has been > requested. > For example, when a user calls 'ovs-appctl --format json dpif/show', > then ovs-appctl will call 'set-options' to set the output format as > requested by the user and afterwards it will call the actual command > 'dpif/show'. > This ovs-appctl behaviour has been implemented in a backward compatible > way. One can use an updated client (ovs-appctl) with an old server > (ovs-vswitchd) and vice versa. Of course, JSON output only works when > both sides have been updated. > > Two access functions unixctl_command_{get,set}_output_format() and a > unixctl_command_reply_json function have been added to lib/unixctl.h: > unixctl_command_get_output_format() is supposed to be used in commands > like 'dpif/show' to query the requested output format. When JSON output > has been selected, the unixctl_command_reply_json() function can be > used to return JSON objects to the client (ovs-appctl) instead of > plain-text with the unixctl_command_reply{,_error}() functions. > > When JSON has been requested but a command has not implemented JSON > output the plain-text output will be wrapped in a provisional JSON > document with the following structure: > > {"reply":"$PLAIN_TEXT_HERE","reply-format":"plain"} > > Thus commands which have been executed successfully will not fail when > they try to render the output at a later stage. > > A test for the 'version' command has been implemented which shows how > the provisional JSON document looks like in practice. For a cleaner > JSON document, the trailing newline has been moved from the program > version string to function ovs_print_version(). This way, the > plain-text output of the 'version' command has not changed. > > Output formatting has been moved from unixctl_client_transact() in > lib/unixctl.c to utilities/ovs-appctl.c. The former merely returns the > JSON objects returned from the server and the latter is now responsible > for printing it properly. > > In popular tools like kubectl the option for output control is usually > called '-o|--output' instead of '-f,--format'. But ovs-appctl already > has an short option '-o' which prints the available ovs-appctl options > ('--option'). The now chosen name also better aligns with ovsdb-client > where '-f,--format' controls output formatting. > > Reported-at: https://bugzilla.redhat.com/1824861 > Signed-off-by: Jakob Meng <c...@jakobmeng.de> > --- > Documentation/ref/ovs-appctl.8.rst | 12 ++ > NEWS | 3 + > lib/unixctl.c | 180 ++++++++++++++++++++++------- > lib/unixctl.h | 17 ++- > lib/util.c | 6 +- > python/ovs/unixctl/server.py | 3 - > tests/appctl.py | 5 + > tests/ovs-vswitchd.at | 12 ++ > utilities/ovs-appctl.c | 135 +++++++++++++++++++--- > 9 files changed, 305 insertions(+), 68 deletions(-)
Recheck-request: github-robot _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev