diff --git a/docs/parsers/proc_interrupts.md b/docs/parsers/proc_interrupts.md
new file mode 100644
index 00000000..412449eb
--- /dev/null
+++ b/docs/parsers/proc_interrupts.md
@@ -0,0 +1,133 @@
+[Home](https://kellyjonbrazil.github.io/jc/)
+
+
+# jc.parsers.proc\_interrupts
+
+jc - JSON Convert `/proc/interrupts` file parser
+
+Usage (cli):
+
+ $ cat /proc/interrupts | jc --proc
+
+or
+
+ $ jc /proc/interrupts
+
+or
+
+ $ cat /proc/interrupts | jc --proc-interrupts
+
+Usage (module):
+
+ import jc
+ result = jc.parse('proc', proc_interrupts_file)
+
+or
+
+ import jc
+ result = jc.parse('proc_interrupts', proc_interrupts_file)
+
+Schema:
+
+ [
+ {
+ "irq": string,
+ "cpu_num": integer,
+ "interrupts": [
+ integer
+ ],
+ "type": string,
+ "device": [
+ string
+ ]
+ }
+ ]
+
+Examples:
+
+ $ cat /proc/interrupts | jc --proc -p
+ [
+ {
+ "irq": "0",
+ "cpu_num": 2,
+ "interrupts": [
+ 18,
+ 0
+ ],
+ "type": "IO-APIC",
+ "device": [
+ "2-edge",
+ "timer"
+ ]
+ },
+ {
+ "irq": "1",
+ "cpu_num": 2,
+ "interrupts": [
+ 0,
+ 73
+ ],
+ "type": "IO-APIC",
+ "device": [
+ "1-edge",
+ "i8042"
+ ]
+ },
+ ...
+ ]
+
+ $ proc_interrupts | jc --proc_interrupts -p -r
+ [
+ {
+ "irq": "0",
+ "cpu_num": 2,
+ "interrupts": [
+ "18",
+ "0"
+ ],
+ "type": "IO-APIC",
+ "device": [
+ "2-edge",
+ "timer"
+ ]
+ },
+ {
+ "irq": "1",
+ "cpu_num": 2,
+ "interrupts": [
+ "0",
+ "73"
+ ],
+ "type": "IO-APIC",
+ "device": [
+ "1-edge",
+ "i8042"
+ ]
+ },
+ ...
+ ]
+
+
+
+### 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)
diff --git a/jc/parsers/proc_interrupts.py b/jc/parsers/proc_interrupts.py
index 0ba288c2..76b76fe3 100644
--- a/jc/parsers/proc_interrupts.py
+++ b/jc/parsers/proc_interrupts.py
@@ -26,14 +26,15 @@ Schema:
[
{
- "module": string,
- "size": integer,
- "used": integer,
- "used_by": [
- string
+ "irq": string,
+ "cpu_num": integer,
+ "interrupts": [
+ integer
],
- "status": string,
- "location": string
+ "type": string,
+ "device": [
+ string
+ ]
}
]
@@ -42,30 +43,30 @@ Examples:
$ cat /proc/interrupts | jc --proc -p
[
{
- "module": "binfmt_misc",
- "size": 24576,
- "used": 1,
- "used_by": [],
- "status": "Live",
- "location": "0xffffffffc0ab4000"
- },
- {
- "module": "vsock_loopback",
- "size": 16384,
- "used": 0,
- "used_by": [],
- "status": "Live",
- "location": "0xffffffffc0a14000"
- },
- {
- "module": "vmw_vsock_virtio_transport_common",
- "size": 36864,
- "used": 1,
- "used_by": [
- "vsock_loopback"
+ "irq": "0",
+ "cpu_num": 2,
+ "interrupts": [
+ 18,
+ 0
],
- "status": "Live",
- "location": "0xffffffffc0a03000"
+ "type": "IO-APIC",
+ "device": [
+ "2-edge",
+ "timer"
+ ]
+ },
+ {
+ "irq": "1",
+ "cpu_num": 2,
+ "interrupts": [
+ 0,
+ 73
+ ],
+ "type": "IO-APIC",
+ "device": [
+ "1-edge",
+ "i8042"
+ ]
},
...
]
@@ -73,30 +74,30 @@ Examples:
$ proc_interrupts | jc --proc_interrupts -p -r
[
{
- "module": "binfmt_misc",
- "size": "24576",
- "used": "1",
- "used_by": [],
- "status": "Live",
- "location": "0xffffffffc0ab4000"
- },
- {
- "module": "vsock_loopback",
- "size": "16384",
- "used": "0",
- "used_by": [],
- "status": "Live",
- "location": "0xffffffffc0a14000"
- },
- {
- "module": "vmw_vsock_virtio_transport_common",
- "size": "36864",
- "used": "1",
- "used_by": [
- "vsock_loopback"
+ "irq": "0",
+ "cpu_num": 2,
+ "interrupts": [
+ "18",
+ "0"
],
- "status": "Live",
- "location": "0xffffffffc0a03000"
+ "type": "IO-APIC",
+ "device": [
+ "2-edge",
+ "timer"
+ ]
+ },
+ {
+ "irq": "1",
+ "cpu_num": 2,
+ "interrupts": [
+ "0",
+ "73"
+ ],
+ "type": "IO-APIC",
+ "device": [
+ "1-edge",
+ "i8042"
+ ]
},
...
]
@@ -130,12 +131,8 @@ def _process(proc_data: List[Dict]) -> List[Dict]:
List of Dictionaries. Structured to conform to the schema.
"""
- int_list = {'size', 'used'}
-
for entry in proc_data:
- for key in entry:
- if key in int_list:
- entry[key] = jc.utils.convert_to_int(entry[key])
+ entry['interrupts'] = [int(x) for x in entry['interrupts']]
return proc_data
@@ -188,22 +185,22 @@ def parse(
interrupts.append(split_line.pop(0))
interrupt_type = split_line.pop(0)
- interrupt_info = split_line
+ device = split_line
else:
for _ in range(cpu_num):
interrupts.append(split_line.pop(0))
interrupt_type = ' '.join(split_line)
- interrupt_info = []
+ device = []
raw_output.append(
{
'irq': irq,
'cpu_num': cpu_num,
'interrupts': interrupts,
- 'interrupt_type': interrupt_type,
- 'interrupt_info': interrupt_info or None
+ 'type': interrupt_type,
+ 'device': device or None
}
)
diff --git a/man/jc.1 b/man/jc.1
index aa896893..c9df998f 100644
--- a/man/jc.1
+++ b/man/jc.1
@@ -1,4 +1,4 @@
-.TH jc 1 2022-09-09 1.21.2 "JSON Convert"
+.TH jc 1 2022-09-13 1.21.2 "JSON Convert"
.SH NAME
\fBjc\fP \- JSON Convert JSONifies the output of many CLI tools, file-types, and strings
.SH SYNOPSIS
@@ -450,6 +450,11 @@ PLIST file parser
\fB--proc-filesystems\fP
`/proc/filesystems` file parser
+.TP
+.B
+\fB--proc-interrupts\fP
+`/proc/interrupts` file parser
+
.TP
.B
\fB--proc-meminfo\fP