Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Aug 2025 13:28:06 -0400
From:      Phil Shafer <phil@juniper.net>
To:        Damin Rido <daminrido139@gmail.com>
Cc:        Alan Somers <asomers@freebsd.org>, <src-committers@freebsd.org>, <dev-commits-src-all@freebsd.org>, <dev-commits-src-main@freebsd.org>, "Damin Rido" <rido@freebsd.org>
Subject:   Re: git: 7b35b4d19630 - main - sockstat: add libxo support
Message-ID:  <B1E6CF20-5471-451F-83BC-E590DDC9D09C@juniper.net>
In-Reply-To: <CAODom%2BaViZ3L4ES05NUeFaXwns3=-gfy6GZB-dtGgPuVC1K2sQ@mail.gmail.com>
References:  <202507302027.56UKRhb5011315@gitrepo.freebsd.org> <8F928557-328D-46E9-BB53-BDE216693BFC@juniper.net> <CAOtMX2jZYtY-X8Xs1aT_R2SrkR3QZXCSCUO-y_JWhKS_-j0kcQ@mail.gmail.com> <CAODom%2BaViZ3L4ES05NUeFaXwns3=-gfy6GZB-dtGgPuVC1K2sQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2 Aug 2025, at 1:59, Damin Rido wrote:
> I deliberately omitted field names in some xo_emit calls when the outpu=
t style was XO_STYLE_TEXT, since I assumed field names wouldn't matter fo=
r human-readable formats. I also couldn=E2=80=99t trigger any warnings wi=
th --libxo:W. However, to stay consistent with xolint expectations and en=
sure correctness across all styles, I=E2=80=99ll add proper field names i=
n my next commit.

Even with text, this is an error, since the library can't know you've mad=
e this test, and it doesn't work with HTML.  You should use a name consis=
tent with other places the field is emitted.

> I initially assumed that only TEXT is intended for human-readable outpu=
t, and that XML, JSON, and HTML are all machine-readable formats. That=E2=
=80=99s why I treated TEXT separately in my formatting logic. Also, I use=
 space-padding specifically for XO_STYLE_TEXT to produce a neat, structur=
ed, table-like output, which I assumed wouldn=E2=80=99t be necessary for =
HTML or other formats. Could you please clarify why HTML should be handle=
d similarly to TEXT in this case?

Using HTML means you get text output, but it is "wrapped" in HTML tags th=
at express the purpose (and more) of the fields, allowing CSS to render d=
ata in browsers that's consistent with TTY output, but HTML-friendly (e.g=
=2E hover, sort, etc).  Take a look at xohtml(1) for an example/demonstra=
tion.  The underlaying HTML looks like:

 % df --libxo:H /
<div class=3D"line"><div class=3D"title">Filesystem        </div><div cla=
ss=3D"text"> </div><div class=3D"title"> 1K-blocks</div><div class=3D"tex=
t"> </div><div class=3D"title">   Used</div><div class=3D"text"> </div><d=
iv class=3D"title">     Avail</div><div class=3D"text"> </div><div class=3D=
"title">Capacity</div><div class=3D"text">  </div><div class=3D"title">Mo=
unted on</div></div><div class=3D"line"><div class=3D"data" data-tag=3D"n=
ame">zroot/ROOT/default</div><div class=3D"text"> </div><div class=3D"dat=
a" data-tag=3D"total-blocks">1581781064</div><div class=3D"text"> </div><=
div class=3D"data" data-tag=3D"used-blocks">7599348</div><div class=3D"te=
xt"> </div><div class=3D"data" data-tag=3D"available-blocks">1574181716</=
div><div class=3D"text"> </div><div class=3D"data" data-tag=3D"used-perce=
nt">    0</div><div class=3D"units">%</div><div class=3D"text">  </div><d=
iv class=3D"text">  </div><div class=3D"data" data-tag=3D"mounted-on">/</=
div></div>

Or (pretty-fied);

% df --libxo:HP /
<div class=3D"line">
  <div class=3D"title">Filesystem        </div>
  <div class=3D"text"> </div>
  <div class=3D"title"> 1K-blocks</div>
  <div class=3D"text"> </div>
  <div class=3D"title">   Used</div>
  <div class=3D"text"> </div>
  <div class=3D"title">     Avail</div>
  <div class=3D"text"> </div>
  <div class=3D"title">Capacity</div>
  <div class=3D"text">  </div>
  <div class=3D"title">Mounted on</div>
</div>
<div class=3D"line">
  <div class=3D"data" data-tag=3D"name">zroot/ROOT/default</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"total-blocks">1581781064</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"used-blocks">7599348</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"available-blocks">1574181716</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"used-percent">    0</div>
  <div class=3D"units">%</div>
  <div class=3D"text">  </div>
  <div class=3D"text">  </div>
  <div class=3D"data" data-tag=3D"mounted-on">/</div>
</div>

Adding "data" and "path" data-* attributes to the HTML suitable for hover=
 and link creation:

<div class=3D"line">
  <div class=3D"data" data-tag=3D"name" data-xpath=3D"/storage-system-inf=
ormation/filesystem/name">zroot/ROOT/default</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"total-blocks" data-xpath=3D"/storage-sy=
stem-information/filesystem[name =3D 'zroot/ROOT/default']/total-blocks">=
1581780992</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"used-blocks" data-xpath=3D"/storage-sys=
tem-information/filesystem[name =3D 'zroot/ROOT/default']/used-blocks">75=
99348</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"available-blocks" data-xpath=3D"/storag=
e-system-information/filesystem[name =3D 'zroot/ROOT/default']/available-=
blocks">1574181644</div>
  <div class=3D"text"> </div>
  <div class=3D"data" data-tag=3D"used-percent" data-xpath=3D"/storage-sy=
stem-information/filesystem[name =3D 'zroot/ROOT/default']/used-percent">=
    0</div>
  <div class=3D"units">%</div>
  <div class=3D"text">  </div>
  <div class=3D"text">  </div>
  <div class=3D"data" data-tag=3D"mounted-on" data-xpath=3D"/storage-syst=
em-information/filesystem[name =3D 'zroot/ROOT/default']/mounted-on">/</d=
iv>
</div>

So, yes, please handle HTML while you're doing this work.  It will maximi=
ze the utility of your xo changes.

Thanks,
 Phil



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B1E6CF20-5471-451F-83BC-E590DDC9D09C>