Re: git: 7b35b4d19630 - main - sockstat: add libxo support

From: Phil Shafer <phil_at_juniper.net>
Date: Sun, 03 Aug 2025 17:28:06 UTC
On 2 Aug 2025, at 1:59, Damin Rido wrote:
> I deliberately omitted field names in some xo_emit calls when the output style was XO_STYLE_TEXT, since I assumed field names wouldn't matter for human-readable formats. I also couldn’t trigger any warnings with --libxo:W. However, to stay consistent with xolint expectations and ensure correctness across all styles, I’ll add proper field names in my next commit.

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

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

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

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

Or (pretty-fied);

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

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

<div class="line">
  <div class="data" data-tag="name" data-xpath="/storage-system-information/filesystem/name">zroot/ROOT/default</div>
  <div class="text"> </div>
  <div class="data" data-tag="total-blocks" data-xpath="/storage-system-information/filesystem[name = 'zroot/ROOT/default']/total-blocks">1581780992</div>
  <div class="text"> </div>
  <div class="data" data-tag="used-blocks" data-xpath="/storage-system-information/filesystem[name = 'zroot/ROOT/default']/used-blocks">7599348</div>
  <div class="text"> </div>
  <div class="data" data-tag="available-blocks" data-xpath="/storage-system-information/filesystem[name = 'zroot/ROOT/default']/available-blocks">1574181644</div>
  <div class="text"> </div>
  <div class="data" data-tag="used-percent" data-xpath="/storage-system-information/filesystem[name = 'zroot/ROOT/default']/used-percent">    0</div>
  <div class="units">%</div>
  <div class="text">  </div>
  <div class="text">  </div>
  <div class="data" data-tag="mounted-on" data-xpath="/storage-system-information/filesystem[name = 'zroot/ROOT/default']/mounted-on">/</div>
</div>

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

Thanks,
 Phil