1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-17 00:07:37 +02:00

proc-locks fixes

This commit is contained in:
Kelly Brazil
2022-09-13 20:40:48 -07:00
parent 140dc656a2
commit c348fa89a9
3 changed files with 187 additions and 54 deletions

130
docs/parsers/proc_locks.md Normal file
View File

@ -0,0 +1,130 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.proc_locks"></a>
# jc.parsers.proc\_locks
jc - JSON Convert `/proc/locks` file parser
Usage (cli):
$ cat /proc/locks | jc --proc
or
$ jc /proc/locks
or
$ cat /proc/locks | jc --proc-locks
Usage (module):
import jc
result = jc.parse('proc', proc_locks_file)
or
import jc
result = jc.parse('proc_locks', proc_locks_file)
Schema:
[
{
"id": integer,
"class": string,
"type": string,
"access": string,
"pid": integer,
"maj": string,
"min": string,
"inode": integer,
"start": string,
"end": string
}
]
Examples:
$ cat /proc/locks | jc --proc -p
[
{
"id": 1,
"class": "POSIX",
"type": "ADVISORY",
"access": "WRITE",
"pid": 877,
"maj": "00",
"min": "19",
"inode": 812,
"start": "0",
"end": "EOF"
},
{
"id": 2,
"class": "FLOCK",
"type": "ADVISORY",
"access": "WRITE",
"pid": 854,
"maj": "00",
"min": "19",
"inode": 805,
"start": "0",
"end": "EOF"
},
...
]
$ proc_locks | jc --proc_locks -p -r
[
{
"id": "1",
"class": "POSIX",
"type": "ADVISORY",
"access": "WRITE",
"pid": "877",
"maj": "00",
"min": "19",
"inode": "812",
"start": "0",
"end": "EOF"
},
{
"id": "2",
"class": "FLOCK",
"type": "ADVISORY",
"access": "WRITE",
"pid": "854",
"maj": "00",
"min": "19",
"inode": "805",
"start": "0",
"end": "EOF"
},
...
]
<a id="jc.parsers.proc_locks.parse"></a>
### parse
```python
def parse(data: str, raw: bool = False, quiet: bool = False) -> List[Dict]
```
Main text parsing function
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
Returns:
List of Dictionaries. Raw or processed structured data.
### Parser Information
Compatibility: linux
Version 1.0 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@ -26,14 +26,16 @@ Schema:
[ [
{ {
"module": string, "id": integer,
"size": integer, "class": string,
"used": integer, "type": string,
"used_by": [ "access": string,
string "pid": integer,
], "maj": string,
"status": string, "min": string,
"location": string "inode": integer,
"start": string,
"end": string
} }
] ]
@ -42,30 +44,28 @@ Examples:
$ cat /proc/locks | jc --proc -p $ cat /proc/locks | jc --proc -p
[ [
{ {
"module": "binfmt_misc", "id": 1,
"size": 24576, "class": "POSIX",
"used": 1, "type": "ADVISORY",
"used_by": [], "access": "WRITE",
"status": "Live", "pid": 877,
"location": "0xffffffffc0ab4000" "maj": "00",
"min": "19",
"inode": 812,
"start": "0",
"end": "EOF"
}, },
{ {
"module": "vsock_loopback", "id": 2,
"size": 16384, "class": "FLOCK",
"used": 0, "type": "ADVISORY",
"used_by": [], "access": "WRITE",
"status": "Live", "pid": 854,
"location": "0xffffffffc0a14000" "maj": "00",
}, "min": "19",
{ "inode": 805,
"module": "vmw_vsock_virtio_transport_common", "start": "0",
"size": 36864, "end": "EOF"
"used": 1,
"used_by": [
"vsock_loopback"
],
"status": "Live",
"location": "0xffffffffc0a03000"
}, },
... ...
] ]
@ -73,30 +73,28 @@ Examples:
$ proc_locks | jc --proc_locks -p -r $ proc_locks | jc --proc_locks -p -r
[ [
{ {
"module": "binfmt_misc", "id": "1",
"size": "24576", "class": "POSIX",
"used": "1", "type": "ADVISORY",
"used_by": [], "access": "WRITE",
"status": "Live", "pid": "877",
"location": "0xffffffffc0ab4000" "maj": "00",
"min": "19",
"inode": "812",
"start": "0",
"end": "EOF"
}, },
{ {
"module": "vsock_loopback", "id": "2",
"size": "16384", "class": "FLOCK",
"used": "0", "type": "ADVISORY",
"used_by": [], "access": "WRITE",
"status": "Live", "pid": "854",
"location": "0xffffffffc0a14000" "maj": "00",
}, "min": "19",
{ "inode": "805",
"module": "vmw_vsock_virtio_transport_common", "start": "0",
"size": "36864", "end": "EOF"
"used": "1",
"used_by": [
"vsock_loopback"
],
"status": "Live",
"location": "0xffffffffc0a03000"
}, },
... ...
] ]
@ -130,12 +128,12 @@ def _process(proc_data: List[Dict]) -> List[Dict]:
List of Dictionaries. Structured to conform to the schema. List of Dictionaries. Structured to conform to the schema.
""" """
int_list = {'size', 'used'} int_list = {'id', 'pid', 'inode'}
for entry in proc_data: for entry in proc_data:
for key in entry: for key in entry:
if key in int_list: if key in int_list:
entry[key] = jc.utils.convert_to_int(entry[key]) entry[key] = int(entry[key])
return proc_data return proc_data

View File

@ -470,6 +470,11 @@ PLIST file parser
\fB--proc-loadavg\fP \fB--proc-loadavg\fP
`/proc/loadavg` file parser `/proc/loadavg` file parser
.TP
.B
\fB--proc-locks\fP
`/proc/locks` file parser
.TP .TP
.B .B
\fB--proc-meminfo\fP \fB--proc-meminfo\fP