mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-17 00:07:37 +02:00
add lsblk parser
This commit is contained in:
49
README.md
49
README.md
@ -65,6 +65,7 @@ jc [parser] [options]
|
|||||||
- `--free` enables the `free` parser
|
- `--free` enables the `free` parser
|
||||||
- `--ifconfig` enables the `ifconfig` parser
|
- `--ifconfig` enables the `ifconfig` parser
|
||||||
- `--ls` enables the `ls` parser
|
- `--ls` enables the `ls` parser
|
||||||
|
- `--lsblk` enables the `lsblk` parser
|
||||||
- `--netstat` enables the `netstat` parser
|
- `--netstat` enables the `netstat` parser
|
||||||
- `--ps` enables the `ps` parser
|
- `--ps` enables the `ps` parser
|
||||||
- `--route` enables the `route` parser
|
- `--route` enables the `route` parser
|
||||||
@ -261,6 +262,54 @@ $ ls -l /bin | jc --ls -p
|
|||||||
...
|
...
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
### lsblk
|
||||||
|
```
|
||||||
|
$ lsblk | jc --lsblk -p
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"NAME": "loop0",
|
||||||
|
"MAJ:MIN": "7:0",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "54.5M",
|
||||||
|
"RO": "1",
|
||||||
|
"TYPE": "loop",
|
||||||
|
"MOUNTPOINT": "/snap/core18/1223"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sda",
|
||||||
|
"MAJ:MIN": "8:0",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "20G",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "disk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sda1",
|
||||||
|
"MAJ:MIN": "8:1",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "1M",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "part"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sda2",
|
||||||
|
"MAJ:MIN": "8:2",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "20G",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "part",
|
||||||
|
"MOUNTPOINT": "/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sr0",
|
||||||
|
"MAJ:MIN": "11:0",
|
||||||
|
"RM": "1",
|
||||||
|
"SIZE": "64.8M",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "rom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
### netstat
|
### netstat
|
||||||
```
|
```
|
||||||
$ netstat -p | jc --netstat -p
|
$ netstat -p | jc --netstat -p
|
||||||
|
@ -4,6 +4,7 @@ jc changelog
|
|||||||
- Add env parser
|
- Add env parser
|
||||||
- Add df parser
|
- Add df parser
|
||||||
- Add free parser
|
- Add free parser
|
||||||
|
- Add lsblk parser
|
||||||
|
|
||||||
20191021 v0.6.4
|
20191021 v0.6.4
|
||||||
- Flatten netstat parser output
|
- Flatten netstat parser output
|
||||||
|
5
jc/jc.py
5
jc/jc.py
@ -11,6 +11,7 @@ import jc.parsers.env
|
|||||||
import jc.parsers.free
|
import jc.parsers.free
|
||||||
import jc.parsers.ifconfig
|
import jc.parsers.ifconfig
|
||||||
import jc.parsers.ls
|
import jc.parsers.ls
|
||||||
|
import jc.parsers.lsblk
|
||||||
import jc.parsers.netstat
|
import jc.parsers.netstat
|
||||||
import jc.parsers.ps
|
import jc.parsers.ps
|
||||||
import jc.parsers.route
|
import jc.parsers.route
|
||||||
@ -38,6 +39,9 @@ def main():
|
|||||||
elif '--ls' in sys.argv:
|
elif '--ls' in sys.argv:
|
||||||
result = jc.parsers.ls.parse(data)
|
result = jc.parsers.ls.parse(data)
|
||||||
|
|
||||||
|
elif '--lsblk' in sys.argv:
|
||||||
|
result = jc.parsers.lsblk.parse(data)
|
||||||
|
|
||||||
elif '--netstat' in sys.argv:
|
elif '--netstat' in sys.argv:
|
||||||
result = jc.parsers.netstat.parse(data)
|
result = jc.parsers.netstat.parse(data)
|
||||||
|
|
||||||
@ -56,6 +60,7 @@ def main():
|
|||||||
print(' --free free parser', file=sys.stderr)
|
print(' --free free parser', file=sys.stderr)
|
||||||
print(' --ifconfig iconfig parser', file=sys.stderr)
|
print(' --ifconfig iconfig parser', file=sys.stderr)
|
||||||
print(' --ls ls parser', file=sys.stderr)
|
print(' --ls ls parser', file=sys.stderr)
|
||||||
|
print(' --lsblk lsblk parser', file=sys.stderr)
|
||||||
print(' --netstat netstat parser', file=sys.stderr)
|
print(' --netstat netstat parser', file=sys.stderr)
|
||||||
print(' --ps ps parser', file=sys.stderr)
|
print(' --ps ps parser', file=sys.stderr)
|
||||||
print(' --route route parser\n', file=sys.stderr)
|
print(' --route route parser\n', file=sys.stderr)
|
||||||
|
70
jc/parsers/lsblk.py
Normal file
70
jc/parsers/lsblk.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
"""jc - JSON CLI output utility lsblk Parser
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
specify --lsblk as the first argument if the piped input is coming from lsblk
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
$ lsblk | jc --lsblk -p
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"NAME": "loop0",
|
||||||
|
"MAJ:MIN": "7:0",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "54.5M",
|
||||||
|
"RO": "1",
|
||||||
|
"TYPE": "loop",
|
||||||
|
"MOUNTPOINT": "/snap/core18/1223"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sda",
|
||||||
|
"MAJ:MIN": "8:0",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "20G",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "disk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sda1",
|
||||||
|
"MAJ:MIN": "8:1",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "1M",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "part"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sda2",
|
||||||
|
"MAJ:MIN": "8:2",
|
||||||
|
"RM": "0",
|
||||||
|
"SIZE": "20G",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "part",
|
||||||
|
"MOUNTPOINT": "/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "sr0",
|
||||||
|
"MAJ:MIN": "11:0",
|
||||||
|
"RM": "1",
|
||||||
|
"SIZE": "64.8M",
|
||||||
|
"RO": "0",
|
||||||
|
"TYPE": "rom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def parse(data):
|
||||||
|
|
||||||
|
# code adapted from Conor Heine at:
|
||||||
|
# https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501
|
||||||
|
|
||||||
|
cleandata = data.splitlines()
|
||||||
|
headers = [h for h in ' '.join(cleandata[0].strip().split()).split() if h]
|
||||||
|
|
||||||
|
raw_data = map(lambda s: s.strip().split(None, len(headers) - 1), cleandata[1:])
|
||||||
|
output = [dict(zip(headers, r)) for r in raw_data]
|
||||||
|
|
||||||
|
for entry in output:
|
||||||
|
entry['NAME'] = entry['NAME'].encode('ascii', errors='ignore').decode()
|
||||||
|
|
||||||
|
return output
|
Reference in New Issue
Block a user