From: "Austin S. Hemmelgarn" <ahferroin7@gmail.com>
To: Nicholas D Steeves <nsteeves@gmail.com>
Cc: "Richard W.M. Jones" <rjones@redhat.com>,
Btrfs BTRFS <linux-btrfs@vger.kernel.org>,
ptoscano@redhat.com
Subject: Re: RFE: 'btrfs' tools machine readable output
Date: Tue, 31 May 2016 08:15:38 -0400 [thread overview]
Message-ID: <b2cfc1a7-12d9-64e7-4d65-a8cf40f9cd05@gmail.com> (raw)
In-Reply-To: <CAD=QJKjx3QstqTB8kFLO7uYFuCNf7S++TTBkMkmnAPfp9iw1Uw@mail.gmail.com>
On 2016-05-27 15:47, Nicholas D Steeves wrote:
> On 16 May 2016 at 08:39, Austin S. Hemmelgarn <ahferroin7@gmail.com> wrote:
>> On 2016-05-16 08:14, Richard W.M. Jones wrote:
>>>
>>> It would be really helpful if the btrfs tools had a machine-readable
>>> output.
>>> With machine-readable output, there'd be a flag which would
>>> change the output. eg:
>>> $ btrfs --json filesystem show
>>> {
>>> "devices": {
>>> "Label": "ROOT",
>>> "uuid": "af471cfc-421a-4d51-8811-ce969f76828a",
>>> /// etc
>>> }
>>> }
>> I would love to see something like this myself, as it would make integration
>> with monitoring tools so much easier. I'd vote for YAML as the output format
>> though, as it's easily human readable as well as machine parseable while
>> still being space efficient.
>> ---
>> - filesystems
>> - label: 'ROOT'
>> uuid: af471cfc-421a-4d51-8811-ce969f76828a
>> devices: 1
>> - devid: 1
>> size: 767.97 MB
>> used 92.00 MB
>> path: /dev/sda2
>> used: 5.29 MB
>> ...
>
> Rather than adding language-specific output/extensions to btrfs-progs,
> what does everyone think of an interface which allows arbitrary
> ordering similar to the date command, with arbitrary delimiter
> support?
>
> eg: date +%a\ %d\ \%B\ %H:%m
>
> with something like: %D (device), %L (label), %V (volume), %v
> (subvolume), %U (volume UUID), %u (subvol UUID), et al.
>
> 'avoids formatting the output to any particular convention, and the
> order of what is queried can be in any order...but I think the [unit
> to operate on] [named unit] bit would necessarily need to come first.
> We already have that in btrfs [sub/fi/dev] [name] :-)
>
> Or should it be a separate command... Something like "btrfs-machine
> [unit to operate on] [named unit] [action eg: print] [cryptic line
> with user's choice of delimiter and formatting]". And then there
> might also be the option to "btrfs-machine [unit to operate on] [named
> unit] return [scrub status, balance status, etc.]" which returns a
> single integer value along the lines of idle|in
> progress|success|failure. And at some point in the future
> btrfs-machine [unit to operate on] [named unit] progress [operation]
> which functions like "fsck -C [fd]".
>
> Now that, I imagine, would be something libvirt users would like,
> whether for web interface, GUI, or wrapper script for for a slick NAS
> web interfaces.
>
> For now, maybe start with a proof of concept with only the "print"
> action implemented? And eventually merge this into the main btrfs
> command something like this: "btrfs -m unit name action args" or
> "btrfs --machine unit name action args"
I'm not sure how practical this would be, the format language would have
to be pretty complex, and would need to be easily extensible at the same
time. We have a functionally infinite upper bound on what can be
reported by a number of commands (fi df for example is bounded only by
the number of supported profiles), and trying to sanely handle that gets
complicated.
Also, once we have _some_ kind of machine parseable output, it becomes
much easier to use other tools to pull out the exact info you want.
>
> On 16 May 2016 at 08:21, Martin Steigerwald <martin@lichtvoll.de> wrote:
>> How about a libbtrfs so that other tools can benefit from btrfs tools
>> functionality?
> Does much does /usr/lib/x86_64-linux-gnu/libbtrfs.so expose?
>
> What is the path of minimum duplication of work, and minimum long-term
> maintenance? If my assumptions are correct, this is a 2000-level
> programming course textbook challenge on writing a program using a
> library to query some values...and that might be something I could
> manage :-)
Based on the fact that our CLI interface is really the only API people
are using, I don't think there's almost anything exposed at a high-level
in libbtrfs.
next prev parent reply other threads:[~2016-05-31 12:15 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-16 12:14 RFE: 'btrfs' tools machine readable output Richard W.M. Jones
2016-05-16 12:21 ` Martin Steigerwald
2016-05-16 12:39 ` Richard W.M. Jones
2016-05-16 12:46 ` Pino Toscano
2016-05-16 12:39 ` Austin S. Hemmelgarn
2016-05-27 19:47 ` Nicholas D Steeves
2016-05-31 12:15 ` Austin S. Hemmelgarn [this message]
2016-05-17 9:33 ` David Sterba
2016-05-17 11:14 ` Austin S. Hemmelgarn
2016-05-17 12:23 ` David Sterba
2016-05-17 13:05 ` Austin S. Hemmelgarn
2016-05-17 13:32 ` Richard W.M. Jones
2016-05-17 15:04 ` David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b2cfc1a7-12d9-64e7-4d65-a8cf40f9cd05@gmail.com \
--to=ahferroin7@gmail.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=nsteeves@gmail.com \
--cc=ptoscano@redhat.com \
--cc=rjones@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).