Open GoogleCodeExporter opened 8 years ago
Is it possible? Yes. Is it a monstrously huge amount of work? Yes. Will I do
it? No, since it would require rewriting more than 10k lines of code and logic
to handle a totally abstracted output format, instead of the one it has now.
Will I accept a patch that is well structured and not damaging to other things
in inxi to do that? Yes, if it's well done. Is it conceptually possible to do
it? Probably, but very very hard.
Since inxi at its core is printing lines, and generating those lines via
functions per data type, there's no clean or easy way to do that type of
feature, it's not impossible, but it's close. That is, nothing in inxi 'knows'
that any one line contains data identifiers, like: ID: vs the data, like:
/dev/hda1, all inxi 'knows' is that a line is greater or less than x
characters, which then lets it determine how long to make each line vs the
display width. It knows nothing about the contents of those character strings,
just that they have a count of characters.
Since however the output of inxi is predictable, in my opinion, the best way to
generate such xml type data files is to write a parser for inxi output, and use
the -c 0 option to turn off all color codes from output, then do whatever you
want with the data.
I'd say on a technical level, it's radically more simple to write a parser for
inxi output than to make inxi output be in variable data formats.
Writing a parser in a sense would be relatively trivial though it would be a
lot of work too since you have to handle all the data per item, but it's
nothing perl or bash+sed can't handle, or any other language that handles
regular expressions well, since the field names are known, and you can add in
custom separators to make it even easier to do.
But internally in inxi, no, that's incredibly hard, and I can't see any real
way to do it as inxi is designed and implemented at this point. A parser, yes,
that's easy, you know, basic stuff, take line: CPU: read until next primary
type, and then rewrite those to whatever format you want, a lot of work given
how many types inxi has, but it's doable by someone, not me since it scratches
no itch I have and fills no need I personally have. Anyone else is free to do
it though.
Also worth noting is that technically, one reason inxi actually works in an
acceptable time frame compared to other tools is that it actually does each
line line by line, ie, it does all the research and data collection per line,
then prints that line, then moves to the next line, and has nothing in memory
at all about what it just did, so there's nothing in it that can take the
overall output and say, ok, let's do something different with this.
I'm going to leave this as status 'new' not accepted, or "won't fix", because
it is something that someone out there might do, for example, someone could
write something that stores all the inxi output into a variable, not printing
it out, then runs it through a parser that then creates the desired data format
output, for example.
inxi with logging turned on, for example, creates in the .inxi directory stuff
like this, but in default mode, inxi writes nothing at all to the system, and
with logging, it only writes logs of what it found in its data collection and
print functions.
Hopefully this is clear. The best way to handle this is to, in my opinioni,
either run inxi, save output minus color codes, to a variable or temp file,
then parse that output, it would be easier to do I think than any other method.
That's the kind of thing I'd do if someone paid me to do it, because it's not
particularly interesting to do, but it's not hard, just very tedious, ie, it's
work.
Like: Read line starting with CPU:, then insert all data detected into xml
tags, or json, including handling error outpus, which can and often does
terminate various line data types/value pairs, and instead just prints out a
single error string. I would guess that such a parser could be done in about
200 to 500 lines of code, give or take, but I wouldn't want to get stuck
mainaining it, since every inxi change would require a corresponding parser
change.
In general I worry about inxi being able to give users the data in a nice,
readable, user friendly format, unlike most sys info type cli tools, but what
end users do with inxi's data is in my opinion basically up to them.
But I never reject ideas in general, for example, the huge rewrite to do line
widths more flexibly was a really old user request that took a really big
amount of work to do, but I left the issue open for years until I felt like
doing it, but that was more an end user usability thing than data format, and
usability issues I tend to put up fairly high, ie, can you read the output in
various size displays? But even that is not fully done, and is very hard to do.
Original comment by inxi-...@techpatterns.com
on 6 Aug 2014 at 4:56
By the way, since inxi also is designed to basically work on all linux systems,
including old ones, it does not support Bash 4 at all, which does have simple
rudimentary associative array handling, and with real multidimensional
associative arrays, like PHP and other modern or complete languages use, it
would actually be almost trivial to do that type of conversion, since one could
write all the data in index/key pairs, which could then be used to generate
output, but that's not how inxi works, nor will it until no systems use bash 4,
maybe in 3-5 years, I haven't looked into bash 4 associative arrays but I
assume they basically suck in general, like bash arrays do, heh, so I doubt it
would even work.
That's a downside of designing inxi to work always on everything with basically
almost no dependencies on version or 'latest and greatest' features of latest
version, but it's also why inxi always has worked on basically everything with
gawk and bash installed.So that basically is what it is.
Original comment by inxi-...@techpatterns.com
on 6 Aug 2014 at 5:07
Actually, it's not hard if you know how to use parsing, then you can write your
own inxi parser then allow the output be whatever you want. I did this in both
Python and in Javascript for the inxi-gui, which needs to read in the
information and format it for visual layout.
Yes, other utilities do this. Yes, other utilities allow others to send in
patches so that they can do this. We accept good patches.
Original comment by Trash80.v2.0@gmail.com
on 6 Aug 2014 at 11:18
Original issue reported on code.google.com by
ioan...@stoilis.gr
on 6 Aug 2014 at 3:54