dmidecode-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: dmidecode --json


From: Jean Delvare
Subject: Re: dmidecode --json
Date: Mon, 25 Nov 2024 18:41:00 +0100

Hi Jiri,

On Fri, 23 Jun 2023 16:45:03 +0200, Jiri Hnidek wrote:
> Hi,
> I'm working on machine readable output of dmidecode. I added the --json CLI
> option. You can see my POC here:
> 
> https://github.com/jirihnidek/dmidecode/pull/1

I know that you have posted a second iteration of your work meanwhile,
but I still wanted to review this first iteration so I better
understand the steps you went through.

I did a quick review and this is what I found:

* First of all, I must apologize. When reviewing your work, I realized
  that my effort to abstract the output of dmidecode and make it
  possible and easy to implement alternative output format, was not
  fully committed. I proposed two possibilities for the last step, but
  never settled (I waited for feedback that never came) so never
  committed either. The two possible implementations can be seen here:
  https://lists.nongnu.org/archive/html/dmidecode-devel/2020-04/msg00001.html
  https://lists.nongnu.org/archive/html/dmidecode-devel/2020-04/msg00004.html
  I think we want to make a decision and commit that before adding JSON
  output format support, as it should make integration a lot easier and
  cleaner. Feel free to review and tell me what you think. I can send
  raw patches to you if it helps.

* In dmi_decode() case 0 (BIOS information), you fixed the position of
  pr_list_end(). This is a good catch but this bug should be fixed
  separately from the addition of JSON output format (even though I
  understand that the fix was not strictly needed before JSON as
  pr_list_end is a no-op for text output). I see that this fix was not
  included in your second iteration, which I find suspect.

* You are using the bool variable type. How portable is that?
  Remember that dmidecode must work on BSD and Solaris, not just Linux.

* Documentation update was missing but I see this was fixed in the
  second iteration, good.

> Example of output can be seen here:
> 
> https://gist.github.com/jirihnidek/02c7620a5c2cf06752ccea877b35cc84

Looks good in a browser, but when running the patched dmidecode on my
own machine, I noticed that the output was all on a single line, which
made it horrible to read in a text editor. I understand that newlines
and proper indentation are not technically needed for a JSON file, but
I consider them a must-have so that the file can be handled by a human
being if needed. Thankfully this seems to be addressed in v2.

> As you can see there are no dependencies to any other library, but some
> information is missing in the output (e.g. handle, DMI type), and there are
> other issues.

One issue I noticed is that using --json and --quiet together resulted
in an invalid JSON file. Seems fixed in v2 by making them mutually
exclusive (which I think makes sense), good.

> I would like to ask if you would be interested adding this to upstream
> version of dmidecode?

Yes!

> I would like to do proper implementation using the json-c library:
> https://github.com/json-c/json-c This is a small library that is part of
> most Linux distributions. Could adding dependency on json-c be acceptable?

Not a blocker, but I see that this option results in more intrusive
changes (although the net difference isn't that big). The first
iteration (without json-c) didn't look especially ugly to me so I would
need a better reason for adding a dependency than "proper
implementation". What actual benefit is there to using json-c?

I'll be honest with you, when I prepared the code to be able to support
alternative output formats, I really hoped that we would be able to
generate a JSON file directly without using a library, thus sticking to
the dmidecode tradition of simplicity, absence of dependency and very
low memory footprint. So my preference leans towards version 1 of your
work. Thus if you want me to review and pick version 2 instead, you'll
have to convince me with good arguments.

If we end up using the json-c library, do you know how portable it is?
Ideally I would like JSON support to also work on BSD and Solaris.

I also would like json-c support to be optional, that is, one should
still be able to build dmidecode (without JSON support, obviously) if
they somehow don't have access to json-c. No need for autodetection,
just a flag in the Makefile which can be set if needed, and proper
#ifdefs in the code to discard the new code.

Thanks,
-- 
Jean Delvare
SUSE L3 Support



reply via email to

[Prev in Thread] Current Thread [Next in Thread]