diff --git a/README.md b/README.md index 38576fb7..7d7c912e 100644 --- a/README.md +++ b/README.md @@ -236,6 +236,8 @@ option. - `--xml` enables the XML file parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/xml)) - `--yaml` enables the YAML file parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/yaml)) - `--zipinfo` enables the `zipinfo` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/zipinfo)) +- `--testing-two` enables the test parser 2 ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/testing_two)) +- `--testing` enables the test parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/testing)) ### Options - `-a` about `jc`. Prints information about `jc` and the parsers (in JSON, of diff --git a/docgen.sh b/docgen.sh index 994891b8..dce03c0f 100755 --- a/docgen.sh +++ b/docgen.sh @@ -4,16 +4,16 @@ cd jc echo Building docs for: package -pydocmd simple jc+ > ../docs/readme.md +pydoc-markdown -m jc > ../docs/readme.md echo Building docs for: lib -pydocmd simple lib+ > ../docs/lib.md +pydoc-markdown -m jc.lib > ../docs/lib.md echo Building docs for: utils -pydocmd simple utils+ > ../docs/utils.md +pydoc-markdown -m jc.utils > ../docs/utils.md echo Building docs for: universal parser -pydocmd simple jc.parsers.universal+ > ../docs/parsers/universal.md +pydoc-markdown -m jc.parsers.universal > ../docs/parsers/universal.md # a bit of inception here... jc is being used to help # automate the generation of its own documentation. :) @@ -23,7 +23,7 @@ parsers=() while read -r value do parsers+=("$value") -done < <(jc -a | jq -c '.parsers[]') +done < <(jc -a | jq -c '.parsers[] | select(.plugin != true)') # iterate over the bash array for parser in "${parsers[@]}" @@ -36,7 +36,7 @@ do echo "Building docs for: ${parser_name}" echo "[Home](https://kellyjonbrazil.github.io/jc/)" > ../docs/parsers/"${parser_name}".md - pydocmd simple jc.parsers."${parser_name}"+ >> ../docs/parsers/"${parser_name}".md + pydoc-markdown -m jc.parsers."${parser_name}" >> ../docs/parsers/"${parser_name}".md echo "## Parser Information" >> ../docs/parsers/"${parser_name}".md echo "Compatibility: ${compatible}" >> ../docs/parsers/"${parser_name}".md echo >> ../docs/parsers/"${parser_name}".md diff --git a/docgen.sh.old b/docgen.sh.old new file mode 100755 index 00000000..022535c3 --- /dev/null +++ b/docgen.sh.old @@ -0,0 +1,44 @@ +#!/bin/bash +# Generate docs.md +# requires pydoc-markdown 2.1.0.post1 + +cd jc +echo Building docs for: package +pydocmd simple jc+ > ../docs/readme.md + +echo Building docs for: lib +pydocmd simple lib+ > ../docs/lib.md + +echo Building docs for: utils +pydocmd simple utils+ > ../docs/utils.md + +echo Building docs for: universal parser +pydocmd simple jc.parsers.universal+ > ../docs/parsers/universal.md + +# a bit of inception here... jc is being used to help +# automate the generation of its own documentation. :) + +# pull jc parser objects into a bash array from jq +parsers=() +while read -r value +do + parsers+=("$value") +done < <(jc -a | jq -c '.parsers[] | select(.plugin != true)') + +# iterate over the bash array +for parser in "${parsers[@]}" +do + parser_name=$(jq -r '.name' <<< "$parser") + compatible=$(jq -r '.compatible | join(", ")' <<< "$parser") + version=$(jq -r '.version' <<< "$parser") + author=$(jq -r '.author' <<< "$parser") + author_email=$(jq -r '.author_email' <<< "$parser") + + echo "Building docs for: ${parser_name}" + echo "[Home](https://kellyjonbrazil.github.io/jc/)" > ../docs/parsers/"${parser_name}".md + pydocmd simple jc.parsers."${parser_name}"+ >> ../docs/parsers/"${parser_name}".md + echo "## Parser Information" >> ../docs/parsers/"${parser_name}".md + echo "Compatibility: ${compatible}" >> ../docs/parsers/"${parser_name}".md + echo >> ../docs/parsers/"${parser_name}".md + echo "Version ${version} by ${author} (${author_email})" >> ../docs/parsers/"${parser_name}".md +done diff --git a/docs/lib.md b/docs/lib.md index 4601a0bb..24bd4376 100644 --- a/docs/lib.md +++ b/docs/lib.md @@ -1,17 +1,18 @@ + + +# jc.lib -# lib jc - JSON CLI output utility JC lib module + + +#### parse -## parse ```python -parse(parser_mod_name, - data, - quiet=False, - raw=False, - ignore_exceptions=None, - **kwargs) +def parse(parser_mod_name: str, data: Union[str, Iterable[str]], quiet: Optional[bool] = False, raw: Optional[bool] = False, ignore_exceptions: Optional[Union[None, bool]] = None, **kwargs: Any, ,) -> Union[Dict[str, Any], + List[Dict[str, Any]], + Iterator[Dict[str, Any]]] ``` Parse the string data using the supplied parser module. @@ -19,72 +20,106 @@ Parse the string data using the supplied parser module. This function provides a high-level API to simplify parser use. This function will call built-in parsers and custom plugin parsers. -Example: +**Example**: - >>> import jc - >>> jc.parse('date', 'Tue Jan 18 10:23:07 PST 2022') - {'year': 2022, 'month': 'Jan', 'month_num': 1, 'day'...} + + >>> import jc + >>> jc.parse('date', 'Tue Jan 18 10:23:07 PST 2022') +- `{'year'` - 2022, 'month': 'Jan', 'month_num': 1, 'day'...} + + To get a list of available parser module names, use `parser_mod_list()` + or `plugin_parser_mod_list()`. `plugin_parser_mod_list()` is a subset + of `parser_mod_list()`. + + You can also use the lower-level parser modules directly: + + >>> import jc.parsers.date + >>> jc.parsers.date.parse('Tue Jan 18 10:23:07 PST 2022') + + Though, accessing plugin parsers directly is a bit more cumbersome, so + this higher-level API is recommended. Here is how you can access plugin + parsers without this API: + + >>> import os + >>> import sys + >>> import jc.appdirs + >>> data_dir = jc.appdirs.user_data_dir('jc', 'jc') + >>> local_parsers_dir = os.path.join(data_dir, 'jcparsers') + >>> sys.path.append(local_parsers_dir) + >>> import my_custom_parser + >>> my_custom_parser.parse('command_data') + -To get a list of available parser module names, use `parser_mod_list()` -or `plugin_parser_mod_list()`. `plugin_parser_mod_list()` is a subset -of `parser_mod_list()`. +**Arguments**: -You can also use the lower-level parser modules directly: + +- `parser_mod_name` - (string) name of the parser module. This + function will accept module_name, + cli-name, and --argument-name + variants of the module name. + +- `data` - (string or data to parse (string for normal + iterator) parsers, iterator of strings for + streaming parsers) + +- `raw` - (boolean) output preprocessed JSON if True + +- `quiet` - (boolean) suppress warning messages if True + +- `ignore_exceptions` - (boolean) ignore parsing exceptions if True + (streaming parsers only) + - >>> import jc.parsers.date - >>> jc.parsers.date.parse('Tue Jan 18 10:23:07 PST 2022') +**Returns**: -Though, accessing plugin parsers directly is a bit more cumbersome, so -this higher-level API is recommended. Here is how you can access plugin -parsers without this API: + + Standard Parsers: Dictionary or List of Dictionaries + Streaming Parsers: Generator Object containing Dictionaries - >>> import os - >>> import sys - >>> import jc.appdirs - >>> data_dir = jc.appdirs.user_data_dir('jc', 'jc') - >>> local_parsers_dir = os.path.join(data_dir, 'jcparsers') - >>> sys.path.append(local_parsers_dir) - >>> import my_custom_parser - >>> my_custom_parser.parse('command_data') + -Parameters: +#### parser\_mod\_list - parser_mod_name: (string) name of the parser module - - data: (string or data to parse (string for normal - iterator) parsers, iterator of strings for - streaming parsers) - - raw: (boolean) output preprocessed JSON if True - - quiet: (boolean) suppress warning messages if True - - ignore_exceptions: (boolean) ignore parsing exceptions if True - (streaming parsers only) - -Returns: - - Standard Parsers: Dictionary or List of Dictionaries - Streaming Parsers: Generator Object containing Dictionaries - - -## parser_mod_list ```python -parser_mod_list() +def parser_mod_list() -> List[str] ``` + Returns a list of all available parser module names. -## plugin_parser_mod_list + + +#### plugin\_parser\_mod\_list + ```python -plugin_parser_mod_list() +def plugin_parser_mod_list() -> List[str] ``` Returns a list of plugin parser module names. This function is a subset of `parser_mod_list()`. + + +#### parser\_info -## get_help ```python -get_help(parser_mod_name) +def parser_info(parser_mod_name: str) -> Dict[str, Any] ``` + +Returns a dictionary that includes the module metadata. + +This function will accept module_name, cli-name, and --argument-name +variants of the module name string. + + + +#### get\_help + +```python +def get_help(parser_mod_name: str) -> None +``` + Show help screen for the selected parser. + +This function will accept module_name, cli-name, and --argument-name +variants of the module name string. + diff --git a/docs/parsers/acpi.md b/docs/parsers/acpi.md index 50e5f378..fdc780e9 100644 --- a/docs/parsers/acpi.md +++ b/docs/parsers/acpi.md @@ -1,258 +1,270 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.acpi + jc - JSON CLI output utility `acpi` command output parser Usage (cli): - $ acpi -V | jc --acpi +$ acpi -V | jc --acpi - or +or - $ jc acpi -V +$ jc acpi -V Usage (module): - import jc - result = jc.parse('acpi', acpi_command_output) +import jc +result = jc.parse('acpi', acpi_command_output) - or +or - import jc.parsers.acpi - result = jc.parsers.acpi.parse(acpi_command_output) +import jc.parsers.acpi +result = jc.parsers.acpi.parse(acpi_command_output) Schema: - [ - { - "type": string, - "id": integer, - "state": string, - "charge_percent": integer, - "until_charged": string, - "until_charged_hours": integer, - "until_charged_minuts": integer, - "until_charged_seconds": integer, - "until_charged_total_seconds": integer, - "charge_remaining": string, - "charge_remaining_hours": integer, - "charge_remaining_minutes": integer, - "charge_remaining_seconds": integer, - "charge_remaining_total_seconds": integer, - "design_capacity_mah": integer, - "last_full_capacity": integer, - "last_full_capacity_percent": integer, - "on-line": boolean, - "mode": string, - "temperature": float, - "temperature_unit": string, - "trip_points": [ - { - "id": integer, - "switches_to_mode": string, - "temperature": float, - "temperature_unit": string - } - ], - "messages": [ - string - ] - } - ] +[ +{ +"type": string, +"id": integer, +"state": string, +"charge_percent": integer, +"until_charged": string, +"until_charged_hours": integer, +"until_charged_minuts": integer, +"until_charged_seconds": integer, +"until_charged_total_seconds": integer, +"charge_remaining": string, +"charge_remaining_hours": integer, +"charge_remaining_minutes": integer, +"charge_remaining_seconds": integer, +"charge_remaining_total_seconds": integer, +"design_capacity_mah": integer, +"last_full_capacity": integer, +"last_full_capacity_percent": integer, +"on-line": boolean, +"mode": string, +"temperature": float, +"temperature_unit": string, +"trip_points": [ +{ +"id": integer, +"switches_to_mode": string, +"temperature": float, +"temperature_unit": string +} +], +"messages": [ +string +] +} +] -Examples: +**Examples**: - $ acpi -V | jc --acpi -p - [ - { - "type": "Battery", - "id": 0, - "state": "Charging", - "charge_percent": 71, - "until_charged": "00:29:20", - "design_capacity_mah": 2110, - "last_full_capacity": 2271, - "last_full_capacity_percent": 100, - "until_charged_hours": 0, - "until_charged_minutes": 29, - "until_charged_seconds": 20, - "until_charged_total_seconds": 1760 - }, - { - "type": "Adapter", - "id": 0, - "on-line": true - }, - { - "type": "Thermal", - "id": 0, - "mode": "ok", - "temperature": 46.0, - "temperature_unit": "C", - "trip_points": [ - { - "id": 0, - "switches_to_mode": "critical", - "temperature": 127.0, - "temperature_unit": "C" - }, - { - "id": 1, - "switches_to_mode": "hot", - "temperature": 127.0, - "temperature_unit": "C" - } - ] - }, - { - "type": "Cooling", - "id": 0, - "messages": [ - "Processor 0 of 10" - ] - }, - { - "type": "Cooling", - "id": 1, - "messages": [ - "Processor 0 of 10" - ] - }, - { - "type": "Cooling", - "id": 2, - "messages": [ - "x86_pkg_temp no state information available" - ] - }, - { - "type": "Cooling", - "id": 3, - "messages": [ - "Processor 0 of 10" - ] - }, - { - "type": "Cooling", - "id": 4, - "messages": [ - "intel_powerclamp no state information available" - ] - }, - { - "type": "Cooling", - "id": 5, - "messages": [ - "Processor 0 of 10" - ] - } - ] + + $ acpi -V | jc --acpi -p + [ + { +- `"type"` - "Battery", +- `"id"` - 0, +- `"state"` - "Charging", +- `"charge_percent"` - 71, +- `"until_charged"` - "00:29:20", +- `"design_capacity_mah"` - 2110, +- `"last_full_capacity"` - 2271, +- `"last_full_capacity_percent"` - 100, +- `"until_charged_hours"` - 0, +- `"until_charged_minutes"` - 29, +- `"until_charged_seconds"` - 20, +- `"until_charged_total_seconds"` - 1760 + }, + { +- `"type"` - "Adapter", +- `"id"` - 0, +- `"on-line"` - true + }, + { +- `"type"` - "Thermal", +- `"id"` - 0, +- `"mode"` - "ok", +- `"temperature"` - 46.0, +- `"temperature_unit"` - "C", +- `"trip_points"` - [ + { +- `"id"` - 0, +- `"switches_to_mode"` - "critical", +- `"temperature"` - 127.0, +- `"temperature_unit"` - "C" + }, + { +- `"id"` - 1, +- `"switches_to_mode"` - "hot", +- `"temperature"` - 127.0, +- `"temperature_unit"` - "C" + } + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - 0, +- `"messages"` - [ + "Processor 0 of 10" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - 1, +- `"messages"` - [ + "Processor 0 of 10" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - 2, +- `"messages"` - [ + "x86_pkg_temp no state information available" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - 3, +- `"messages"` - [ + "Processor 0 of 10" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - 4, +- `"messages"` - [ + "intel_powerclamp no state information available" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - 5, +- `"messages"` - [ + "Processor 0 of 10" + ] + } + ] + + $ acpi -V | jc --acpi -p -r + [ + { +- `"type"` - "Battery", +- `"id"` - "0", +- `"state"` - "Charging", +- `"charge_percent"` - "71", +- `"until_charged"` - "00:29:20", +- `"design_capacity_mah"` - "2110", +- `"last_full_capacity"` - "2271", +- `"last_full_capacity_percent"` - "100" + }, + { +- `"type"` - "Adapter", +- `"id"` - "0", +- `"on-line"` - true + }, + { +- `"type"` - "Thermal", +- `"id"` - "0", +- `"mode"` - "ok", +- `"temperature"` - "46.0", +- `"temperature_unit"` - "C", +- `"trip_points"` - [ + { +- `"id"` - "0", +- `"switches_to_mode"` - "critical", +- `"temperature"` - "127.0", +- `"temperature_unit"` - "C" + }, + { +- `"id"` - "1", +- `"switches_to_mode"` - "hot", +- `"temperature"` - "127.0", +- `"temperature_unit"` - "C" + } + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - "0", +- `"messages"` - [ + "Processor 0 of 10" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - "1", +- `"messages"` - [ + "Processor 0 of 10" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - "2", +- `"messages"` - [ + "x86_pkg_temp no state information available" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - "3", +- `"messages"` - [ + "Processor 0 of 10" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - "4", +- `"messages"` - [ + "intel_powerclamp no state information available" + ] + }, + { +- `"type"` - "Cooling", +- `"id"` - "5", +- `"messages"` - [ + "Processor 0 of 10" + ] + } + ] - $ acpi -V | jc --acpi -p -r - [ - { - "type": "Battery", - "id": "0", - "state": "Charging", - "charge_percent": "71", - "until_charged": "00:29:20", - "design_capacity_mah": "2110", - "last_full_capacity": "2271", - "last_full_capacity_percent": "100" - }, - { - "type": "Adapter", - "id": "0", - "on-line": true - }, - { - "type": "Thermal", - "id": "0", - "mode": "ok", - "temperature": "46.0", - "temperature_unit": "C", - "trip_points": [ - { - "id": "0", - "switches_to_mode": "critical", - "temperature": "127.0", - "temperature_unit": "C" - }, - { - "id": "1", - "switches_to_mode": "hot", - "temperature": "127.0", - "temperature_unit": "C" - } - ] - }, - { - "type": "Cooling", - "id": "0", - "messages": [ - "Processor 0 of 10" - ] - }, - { - "type": "Cooling", - "id": "1", - "messages": [ - "Processor 0 of 10" - ] - }, - { - "type": "Cooling", - "id": "2", - "messages": [ - "x86_pkg_temp no state information available" - ] - }, - { - "type": "Cooling", - "id": "3", - "messages": [ - "Processor 0 of 10" - ] - }, - { - "type": "Cooling", - "id": "4", - "messages": [ - "intel_powerclamp no state information available" - ] - }, - { - "type": "Cooling", - "id": "5", - "messages": [ - "Processor 0 of 10" - ] - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/airport.md b/docs/parsers/airport.md index dc178d52..8eceb431 100644 --- a/docs/parsers/airport.md +++ b/docs/parsers/airport.md @@ -1,111 +1,123 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.airport + jc - JSON CLI output utility `airport -I` command output parser The `airport` program can be found at `/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport`. Usage (cli): - $ airport -I | jc --airport +$ airport -I | jc --airport - or +or - $ jc airport -I +$ jc airport -I Usage (module): - import jc - result = jc.parse('airport', airport_command_output) +import jc +result = jc.parse('airport', airport_command_output) - or +or - import jc.parsers.airport - result = jc.parsers.airport.parse(airport_command_output) +import jc.parsers.airport +result = jc.parsers.airport.parse(airport_command_output) Schema: - { - "agrctlrssi": integer, - "agrextrssi": integer, - "agrctlnoise": integer, - "agrextnoise": integer, - "state": string, - "op_mode": string, - "lasttxrate": integer, - "maxrate": integer, - "lastassocstatus": integer, - "802_11_auth": string, - "link_auth": string, - "bssid": string, - "ssid": string, - "mcs": integer, - "channel": string - } +{ +"agrctlrssi": integer, +"agrextrssi": integer, +"agrctlnoise": integer, +"agrextnoise": integer, +"state": string, +"op_mode": string, +"lasttxrate": integer, +"maxrate": integer, +"lastassocstatus": integer, +"802_11_auth": string, +"link_auth": string, +"bssid": string, +"ssid": string, +"mcs": integer, +"channel": string +} -Examples: +**Examples**: - $ airport -I | jc --airport -p - { - "agrctlrssi": -66, - "agrextrssi": 0, - "agrctlnoise": -90, - "agrextnoise": 0, - "state": "running", - "op_mode": "station", - "lasttxrate": 195, - "maxrate": 867, - "lastassocstatus": 0, - "802_11_auth": "open", - "link_auth": "wpa2-psk", - "bssid": "3c:37:86:15:ad:f9", - "ssid": "SnazzleDazzle", - "mcs": 0, - "channel": "48,80" - } + + $ airport -I | jc --airport -p + { +- `"agrctlrssi"` - -66, +- `"agrextrssi"` - 0, +- `"agrctlnoise"` - -90, +- `"agrextnoise"` - 0, +- `"state"` - "running", +- `"op_mode"` - "station", +- `"lasttxrate"` - 195, +- `"maxrate"` - 867, +- `"lastassocstatus"` - 0, +- `"802_11_auth"` - "open", +- `"link_auth"` - "wpa2-psk", +- `"bssid"` - "3c:37:86:15:ad:f9", +- `"ssid"` - "SnazzleDazzle", +- `"mcs"` - 0, +- `"channel"` - "48,80" + } + + $ airport -I | jc --airport -p -r + { +- `"agrctlrssi"` - "-66", +- `"agrextrssi"` - "0", +- `"agrctlnoise"` - "-90", +- `"agrextnoise"` - "0", +- `"state"` - "running", +- `"op_mode"` - "station", +- `"lasttxrate"` - "195", +- `"maxrate"` - "867", +- `"lastassocstatus"` - "0", +- `"802_11_auth"` - "open", +- `"link_auth"` - "wpa2-psk", +- `"bssid"` - "3c:37:86:15:ad:f9", +- `"ssid"` - "SnazzleDazzle", +- `"mcs"` - "0", +- `"channel"` - "48,80" + } - $ airport -I | jc --airport -p -r - { - "agrctlrssi": "-66", - "agrextrssi": "0", - "agrctlnoise": "-90", - "agrextnoise": "0", - "state": "running", - "op_mode": "station", - "lasttxrate": "195", - "maxrate": "867", - "lastassocstatus": "0", - "802_11_auth": "open", - "link_auth": "wpa2-psk", - "bssid": "3c:37:86:15:ad:f9", - "ssid": "SnazzleDazzle", - "mcs": "0", - "channel": "48,80" - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: darwin diff --git a/docs/parsers/airport_s.md b/docs/parsers/airport_s.md index 035a5d7a..63bf0caf 100644 --- a/docs/parsers/airport_s.md +++ b/docs/parsers/airport_s.md @@ -1,139 +1,151 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.airport\_s -# jc.parsers.airport_s jc - JSON CLI output utility `airport -s` command output parser The `airport` program can be found at `/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport`. Usage (cli): - $ airport -s | jc --airport-s +$ airport -s | jc --airport-s - or +or - $ jc airport -s +$ jc airport -s Usage (module): - import jc - result = jc.parse('airport_s', airport_s_command_output) +import jc +result = jc.parse('airport_s', airport_s_command_output) - or +or - import jc.parsers.airport_s - result = jc.parsers.airport_s.parse(airport_s_command_output) +import jc.parsers.airport_s +result = jc.parsers.airport_s.parse(airport_s_command_output) Schema: - [ - { - "ssid": string, - "bssid": string, - "rssi": integer, - "channel": string, - "ht": boolean, - "cc": string, - "security": [ - string, - ] - } - ] +[ +{ +"ssid": string, +"bssid": string, +"rssi": integer, +"channel": string, +"ht": boolean, +"cc": string, +"security": [ +string, +] +} +] -Examples: +**Examples**: - $ airport -s | jc --airport-s -p - [ - { - "ssid": "DIRECT-4A-HP OfficeJet 3830", - "bssid": "00:67:eb:2a:a7:3b", - "rssi": -90, - "channel": "6", - "ht": true, - "cc": "--", - "security": [ - "WPA2(PSK/AES/AES)" - ] - }, - { - "ssid": "Latitude38", - "bssid": "c0:ff:d5:d2:7a:f3", - "rssi": -85, - "channel": "11", - "ht": true, - "cc": "US", - "security": [ - "WPA2(PSK/AES/AES)" - ] - }, - { - "ssid": "xfinitywifi", - "bssid": "6e:e3:0e:b8:45:99", - "rssi": -83, - "channel": "11", - "ht": true, - "cc": "US", - "security": [ - "NONE" - ] - }, - ... - ] + + $ airport -s | jc --airport-s -p + [ + { +- `"ssid"` - "DIRECT-4A-HP OfficeJet 3830", +- `"bssid"` - "00:67:eb:2a:a7:3b", +- `"rssi"` - -90, +- `"channel"` - "6", +- `"ht"` - true, +- `"cc"` - "--", +- `"security"` - [ + "WPA2(PSK/AES/AES)" + ] + }, + { +- `"ssid"` - "Latitude38", +- `"bssid"` - "c0:ff:d5:d2:7a:f3", +- `"rssi"` - -85, +- `"channel"` - "11", +- `"ht"` - true, +- `"cc"` - "US", +- `"security"` - [ + "WPA2(PSK/AES/AES)" + ] + }, + { +- `"ssid"` - "xfinitywifi", +- `"bssid"` - "6e:e3:0e:b8:45:99", +- `"rssi"` - -83, +- `"channel"` - "11", +- `"ht"` - true, +- `"cc"` - "US", +- `"security"` - [ + "NONE" + ] + }, + ... + ] + + $ airport -s | jc --airport -p -r + [ + { +- `"ssid"` - "DIRECT-F3-HP ENVY 5660 series", +- `"bssid"` - "b0:5a:da:6f:0a:d4", +- `"rssi"` - "-93", +- `"channel"` - "1", +- `"ht"` - "Y", +- `"cc"` - "--", +- `"security"` - "WPA2(PSK/AES/AES)" + }, + { +- `"ssid"` - "YouAreInfected-5", +- `"bssid"` - "5c:e3:0e:c2:85:da", +- `"rssi"` - "-85", +- `"channel"` - "36", +- `"ht"` - "Y", +- `"cc"` - "US", +- `"security"` - "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)" + }, + { +- `"ssid"` - "YuanFamily", +- `"bssid"` - "5c:e3:0e:b8:5f:9a", +- `"rssi"` - "-84", +- `"channel"` - "11", +- `"ht"` - "Y", +- `"cc"` - "US", +- `"security"` - "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)" + }, + ... + ] - $ airport -s | jc --airport -p -r - [ - { - "ssid": "DIRECT-F3-HP ENVY 5660 series", - "bssid": "b0:5a:da:6f:0a:d4", - "rssi": "-93", - "channel": "1", - "ht": "Y", - "cc": "--", - "security": "WPA2(PSK/AES/AES)" - }, - { - "ssid": "YouAreInfected-5", - "bssid": "5c:e3:0e:c2:85:da", - "rssi": "-85", - "channel": "36", - "ht": "Y", - "cc": "US", - "security": "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)" - }, - { - "ssid": "YuanFamily", - "bssid": "5c:e3:0e:b8:5f:9a", - "rssi": "-84", - "channel": "11", - "ht": "Y", - "cc": "US", - "security": "WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: darwin diff --git a/docs/parsers/arp.md b/docs/parsers/arp.md index 70f5757b..50f0f653 100644 --- a/docs/parsers/arp.md +++ b/docs/parsers/arp.md @@ -1,148 +1,160 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.arp + jc - JSON CLI output utility `arp` command output parser Supports `arp` and `arp -a` output. Usage (cli): - $ arp | jc --arp +$ arp | jc --arp - or +or - $ jc arp +$ jc arp Usage (module): - import jc - result = jc.parse('arp', arp_command_output) +import jc +result = jc.parse('arp', arp_command_output) - or +or - import jc.parsers.arp - result = jc.parsers.arp.parse(arp_command_output) +import jc.parsers.arp +result = jc.parsers.arp.parse(arp_command_output) Schema: - [ - { - "name": string, - "address": string, - "hwtype": string, - "hwaddress": string, - "flags_mask": string, - "iface": string, - "permanent": boolean, - "expires": integer - } - ] +[ +{ +"name": string, +"address": string, +"hwtype": string, +"hwaddress": string, +"flags_mask": string, +"iface": string, +"permanent": boolean, +"expires": integer +} +] -Examples: +**Examples**: - $ arp | jc --arp -p - [ - { - "address": "192.168.71.254", - "hwtype": "ether", - "hwaddress": "00:50:56:f0:98:26", - "flags_mask": "C", - "iface": "ens33" - }, - { - "address": "gateway", - "hwtype": "ether", - "hwaddress": "00:50:56:f7:4a:fc", - "flags_mask": "C", - "iface": "ens33" - } - ] + + $ arp | jc --arp -p + [ + { +- `"address"` - "192.168.71.254", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:f0:98:26", +- `"flags_mask"` - "C", +- `"iface"` - "ens33" + }, + { +- `"address"` - "gateway", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:f7:4a:fc", +- `"flags_mask"` - "C", +- `"iface"` - "ens33" + } + ] + + $ arp | jc --arp -p -r + [ + { +- `"address"` - "gateway", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:f7:4a:fc", +- `"flags_mask"` - "C", +- `"iface"` - "ens33" + }, + { +- `"address"` - "192.168.71.254", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:fe:7a:b4", +- `"flags_mask"` - "C", +- `"iface"` - "ens33" + } + ] + + $ arp -a | jc --arp -p + [ + { +- `"name"` - null, +- `"address"` - "192.168.71.254", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:f0:98:26", +- `"iface"` - "ens33" +- `"permanent"` - false, +- `"expires"` - 1182 + }, + { +- `"name"` - "gateway", +- `"address"` - "192.168.71.2", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:f7:4a:fc", +- `"iface"` - "ens33" +- `"permanent"` - false, +- `"expires"` - 110 + } + ] + + $ arp -a | jc --arp -p -r + [ + { +- `"name"` - "?", +- `"address"` - "192.168.71.254", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:fe:7a:b4", +- `"iface"` - "ens33" +- `"permanent"` - false, +- `"expires"` - "1182" + }, + { +- `"name"` - "_gateway", +- `"address"` - "192.168.71.2", +- `"hwtype"` - "ether", +- `"hwaddress"` - "00:50:56:f7:4a:fc", +- `"iface"` - "ens33" +- `"permanent"` - false, +- `"expires"` - "110" + } + ] - $ arp | jc --arp -p -r - [ - { - "address": "gateway", - "hwtype": "ether", - "hwaddress": "00:50:56:f7:4a:fc", - "flags_mask": "C", - "iface": "ens33" - }, - { - "address": "192.168.71.254", - "hwtype": "ether", - "hwaddress": "00:50:56:fe:7a:b4", - "flags_mask": "C", - "iface": "ens33" - } - ] + - $ arp -a | jc --arp -p - [ - { - "name": null, - "address": "192.168.71.254", - "hwtype": "ether", - "hwaddress": "00:50:56:f0:98:26", - "iface": "ens33" - "permanent": false, - "expires": 1182 - }, - { - "name": "gateway", - "address": "192.168.71.2", - "hwtype": "ether", - "hwaddress": "00:50:56:f7:4a:fc", - "iface": "ens33" - "permanent": false, - "expires": 110 - } - ] +## info Objects - $ arp -a | jc --arp -p -r - [ - { - "name": "?", - "address": "192.168.71.254", - "hwtype": "ether", - "hwaddress": "00:50:56:fe:7a:b4", - "iface": "ens33" - "permanent": false, - "expires": "1182" - }, - { - "name": "_gateway", - "address": "192.168.71.2", - "hwtype": "ether", - "hwaddress": "00:50:56:f7:4a:fc", - "iface": "ens33" - "permanent": false, - "expires": "110" - } - ] - - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, aix, freebsd, darwin diff --git a/docs/parsers/blkid.md b/docs/parsers/blkid.md index c982ba9e..8b51c8c9 100644 --- a/docs/parsers/blkid.md +++ b/docs/parsers/blkid.md @@ -1,151 +1,163 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.blkid + jc - JSON CLI output utility `blkid` command output parser Usage (cli): - $ blkid | jc --blkid +$ blkid | jc --blkid - or +or - $ jc blkid +$ jc blkid Usage (module): - import jc - result = jc.parse('blkid', blkid_command_output) +import jc +result = jc.parse('blkid', blkid_command_output) - or +or - import jc.parsers.blkid - result = jc.parsers.blkid.parse(blkid_command_output) +import jc.parsers.blkid +result = jc.parsers.blkid.parse(blkid_command_output) Schema: - [ - { - "device": string, - "uuid": string, - "type": string, - "usage": string, - "part_entry_scheme": string, - "part_entry_type": string, - "part_entry_flags": string, - "part_entry_number": integer, - "part_entry_offset": integer, - "part_entry_size": integer, - "part_entry_disk": string, - "id_fs_uuid": string, - "id_fs_uuid_enc": string, - "id_fs_version": string, - "id_fs_type": string, - "id_fs_usage": string, - "id_part_entry_scheme": string, - "id_part_entry_type": string, - "id_part_entry_flags": string, - "id_part_entry_number": integer, - "id_part_entry_offset": integer, - "id_part_entry_size": integer, - "id_iolimit_minimum_io_size": integer, - "id_iolimit_physical_sector_size": integer, - "id_iolimit_logical_sector_size": integer, - "id_part_entry_disk": string, - "minimum_io_size": integer, - "physical_sector_size": integer, - "logical_sector_size": integer - } - ] +[ +{ +"device": string, +"uuid": string, +"type": string, +"usage": string, +"part_entry_scheme": string, +"part_entry_type": string, +"part_entry_flags": string, +"part_entry_number": integer, +"part_entry_offset": integer, +"part_entry_size": integer, +"part_entry_disk": string, +"id_fs_uuid": string, +"id_fs_uuid_enc": string, +"id_fs_version": string, +"id_fs_type": string, +"id_fs_usage": string, +"id_part_entry_scheme": string, +"id_part_entry_type": string, +"id_part_entry_flags": string, +"id_part_entry_number": integer, +"id_part_entry_offset": integer, +"id_part_entry_size": integer, +"id_iolimit_minimum_io_size": integer, +"id_iolimit_physical_sector_size": integer, +"id_iolimit_logical_sector_size": integer, +"id_part_entry_disk": string, +"minimum_io_size": integer, +"physical_sector_size": integer, +"logical_sector_size": integer +} +] -Examples: +**Examples**: - $ blkid | jc --blkid -p - [ - { - "device": "/dev/sda1", - "uuid": "05d927ab-5875-49e4-ada1-7f46cb32c932", - "type": "xfs" - }, - { - "device": "/dev/sda2", - "uuid": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM", - "type": "LVM2_member" - }, - { - "device": "/dev/mapper/centos-root", - "uuid": "07d718ff-950c-4e5b-98f0-42a1147c77d9", - "type": "xfs" - }, - { - "device": "/dev/mapper/centos-swap", - "uuid": "615eb89a-bcbf-46fd-80e3-c483ff5c931f", - "type": "swap" - } - ] + + $ blkid | jc --blkid -p + [ + { +- `"device"` - "/dev/sda1", +- `"uuid"` - "05d927ab-5875-49e4-ada1-7f46cb32c932", +- `"type"` - "xfs" + }, + { +- `"device"` - "/dev/sda2", +- `"uuid"` - "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM", +- `"type"` - "LVM2_member" + }, + { +- `"device"` - "/dev/mapper/centos-root", +- `"uuid"` - "07d718ff-950c-4e5b-98f0-42a1147c77d9", +- `"type"` - "xfs" + }, + { +- `"device"` - "/dev/mapper/centos-swap", +- `"uuid"` - "615eb89a-bcbf-46fd-80e3-c483ff5c931f", +- `"type"` - "swap" + } + ] + + $ sudo blkid -o udev -ip /dev/sda2 | jc --blkid -p + [ + { +- `"id_fs_uuid"` - "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM", +- `"id_fs_uuid_enc"` - "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM", +- `"id_fs_version"` - "LVM2\\x20001", +- `"id_fs_type"` - "LVM2_member", +- `"id_fs_usage"` - "raid", +- `"id_iolimit_minimum_io_size"` - 512, +- `"id_iolimit_physical_sector_size"` - 512, +- `"id_iolimit_logical_sector_size"` - 512, +- `"id_part_entry_scheme"` - "dos", +- `"id_part_entry_type"` - "0x8e", +- `"id_part_entry_number"` - 2, +- `"id_part_entry_offset"` - 2099200, +- `"id_part_entry_size"` - 39843840, +- `"id_part_entry_disk"` - "8:0" + } + ] + + $ sudo blkid -ip /dev/sda1 | jc --blkid -p -r + [ + { +- `"devname"` - "/dev/sda1", +- `"uuid"` - "05d927bb-5875-49e3-ada1-7f46cb31c932", +- `"type"` - "xfs", +- `"usage"` - "filesystem", +- `"minimum_io_size"` - "512", +- `"physical_sector_size"` - "512", +- `"logical_sector_size"` - "512", +- `"part_entry_scheme"` - "dos", +- `"part_entry_type"` - "0x83", +- `"part_entry_flags"` - "0x80", +- `"part_entry_number"` - "1", +- `"part_entry_offset"` - "2048", +- `"part_entry_size"` - "2097152", +- `"part_entry_disk"` - "8:0" + } + ] - $ sudo blkid -o udev -ip /dev/sda2 | jc --blkid -p - [ - { - "id_fs_uuid": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM", - "id_fs_uuid_enc": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM", - "id_fs_version": "LVM2\x20001", - "id_fs_type": "LVM2_member", - "id_fs_usage": "raid", - "id_iolimit_minimum_io_size": 512, - "id_iolimit_physical_sector_size": 512, - "id_iolimit_logical_sector_size": 512, - "id_part_entry_scheme": "dos", - "id_part_entry_type": "0x8e", - "id_part_entry_number": 2, - "id_part_entry_offset": 2099200, - "id_part_entry_size": 39843840, - "id_part_entry_disk": "8:0" - } - ] + - $ sudo blkid -ip /dev/sda1 | jc --blkid -p -r - [ - { - "devname": "/dev/sda1", - "uuid": "05d927bb-5875-49e3-ada1-7f46cb31c932", - "type": "xfs", - "usage": "filesystem", - "minimum_io_size": "512", - "physical_sector_size": "512", - "logical_sector_size": "512", - "part_entry_scheme": "dos", - "part_entry_type": "0x83", - "part_entry_flags": "0x80", - "part_entry_number": "1", - "part_entry_offset": "2048", - "part_entry_size": "2097152", - "part_entry_disk": "8:0" - } - ] +## info Objects - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/cksum.md b/docs/parsers/cksum.md index afcb754a..1ecfb406 100644 --- a/docs/parsers/cksum.md +++ b/docs/parsers/cksum.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.cksum + jc - JSON CLI output utility `cksum` command output parser This parser works with the following checksum calculation utilities: @@ -9,77 +11,87 @@ This parser works with the following checksum calculation utilities: Usage (cli): - $ cksum file.txt | jc --cksum +$ cksum file.txt | jc --cksum - or +or - $ jc cksum file.txt +$ jc cksum file.txt Usage (module): - import jc - result = jc.parse('cksum', cksum_command_output) +import jc +result = jc.parse('cksum', cksum_command_output) - or +or - import jc.parsers.cksum - result = jc.parsers.cksum.parse(cksum_command_output) +import jc.parsers.cksum +result = jc.parsers.cksum.parse(cksum_command_output) Schema: - [ - { - "filename": string, - "checksum": integer, - "blocks": integer - } - ] +[ +{ +"filename": string, +"checksum": integer, +"blocks": integer +} +] -Examples: +**Examples**: - $ cksum * | jc --cksum -p - [ - { - "filename": "__init__.py", - "checksum": 4294967295, - "blocks": 0 - }, - { - "filename": "airport.py", - "checksum": 2208551092, - "blocks": 3745 - }, - { - "filename": "airport_s.py", - "checksum": 1113817598, - "blocks": 4572 - }, - ... - ] + + $ cksum * | jc --cksum -p + [ + { +- `"filename"` - "__init__.py", +- `"checksum"` - 4294967295, +- `"blocks"` - 0 + }, + { +- `"filename"` - "airport.py", +- `"checksum"` - 2208551092, +- `"blocks"` - 3745 + }, + { +- `"filename"` - "airport_s.py", +- `"checksum"` - 1113817598, +- `"blocks"` - 4572 + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/crontab.md b/docs/parsers/crontab.md index 1efd7d31..61ef64ad 100644 --- a/docs/parsers/crontab.md +++ b/docs/parsers/crontab.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.crontab + jc - JSON CLI output utility `crontab -l` command output and crontab file parser @@ -8,197 +10,207 @@ Supports `crontab -l` command output and crontab files. Usage (cli): - $ crontab -l | jc --crontab +$ crontab -l | jc --crontab - or +or - $ jc crontab -l +$ jc crontab -l Usage (module): - import jc - result = jc.parse('crontab', crontab_output) +import jc +result = jc.parse('crontab', crontab_output) - or +or - import jc.parsers.crontab - result = jc.parsers.crontab.parse(crontab_output) +import jc.parsers.crontab +result = jc.parsers.crontab.parse(crontab_output) Schema: - { - "variables": [ - { - "name": string, - "value": string - } - ], - "schedule": [ - { - "occurrence" string, - "minute": [ - string - ], - "hour": [ - string - ], - "day_of_month": [ - string - ], - "month": [ - string - ], - "day_of_week": [ - string - ], - "occurrence": string, - "command": string - } - ] - } +{ +"variables": [ +{ +"name": string, +"value": string +} +], +"schedule": [ +{ +"occurrence" string, +"minute": [ +string +], +"hour": [ +string +], +"day_of_month": [ +string +], +"month": [ +string +], +"day_of_week": [ +string +], +"occurrence": string, +"command": string +} +] +} -Examples: +**Examples**: - $ crontab -l | jc --crontab -p - { - "variables": [ - { - "name": "MAILTO", - "value": "root" - }, - { - "name": "PATH", - "value": "/sbin:/bin:/usr/sbin:/usr/bin" - }, - { - "name": "SHELL", - "value": "/bin/bash" - } - ], - "schedule": [ - { - "minute": [ - "5" - ], - "hour": [ - "10-11", - "22" - ], - "day_of_month": [ - "*" - ], - "month": [ - "*" - ], - "day_of_week": [ - "*" - ], - "command": "/var/www/devdaily.com/bin/mk-new-links.php" - }, - { - "minute": [ - "30" - ], - "hour": [ - "4/2" - ], - "day_of_month": [ - "*" - ], - "month": [ - "*" - ], - "day_of_week": [ - "*" - ], - "command": "/var/www/devdaily.com/bin/create-all-backups.sh" - }, - { - "occurrence": "yearly", - "command": "/home/maverick/bin/annual-maintenance" - }, - { - "occurrence": "reboot", - "command": "/home/cleanup" - }, - { - "occurrence": "monthly", - "command": "/home/maverick/bin/tape-backup" - } - ] - } + + $ crontab -l | jc --crontab -p + { +- `"variables"` - [ + { +- `"name"` - "MAILTO", +- `"value"` - "root" + }, + { +- `"name"` - "PATH", +- `"value"` - "/sbin:/bin:/usr/sbin:/usr/bin" + }, + { +- `"name"` - "SHELL", +- `"value"` - "/bin/bash" + } + ], +- `"schedule"` - [ + { +- `"minute"` - [ + "5" + ], +- `"hour"` - [ + "10-11", + "22" + ], +- `"day_of_month"` - [ + "*" + ], +- `"month"` - [ + "*" + ], +- `"day_of_week"` - [ + "*" + ], +- `"command"` - "/var/www/devdaily.com/bin/mk-new-links.php" + }, + { +- `"minute"` - [ + "30" + ], +- `"hour"` - [ + "4/2" + ], +- `"day_of_month"` - [ + "*" + ], +- `"month"` - [ + "*" + ], +- `"day_of_week"` - [ + "*" + ], +- `"command"` - "/var/www/devdaily.com/bin/create-all-backups.sh" + }, + { +- `"occurrence"` - "yearly", +- `"command"` - "/home/maverick/bin/annual-maintenance" + }, + { +- `"occurrence"` - "reboot", +- `"command"` - "/home/cleanup" + }, + { +- `"occurrence"` - "monthly", +- `"command"` - "/home/maverick/bin/tape-backup" + } + ] + } + + $ cat /etc/crontab | jc --crontab -p -r + { +- `"variables"` - [ + { +- `"name"` - "MAILTO", +- `"value"` - "root" + }, + { +- `"name"` - "PATH", +- `"value"` - "/sbin:/bin:/usr/sbin:/usr/bin" + }, + { +- `"name"` - "SHELL", +- `"value"` - "/bin/bash" + } + ], +- `"schedule"` - [ + { +- `"minute"` - "5", +- `"hour"` - "10-11,22", +- `"day_of_month"` - "*", +- `"month"` - "*", +- `"day_of_week"` - "*", +- `"command"` - "/var/www/devdaily.com/bin/mk-new-links.php" + }, + { +- `"minute"` - "30", +- `"hour"` - "4/2", +- `"day_of_month"` - "*", +- `"month"` - "*", +- `"day_of_week"` - "*", +- `"command"` - "/var/www/devdaily.com/bin/create-all-backups.sh" + }, + { +- `"occurrence"` - "yearly", +- `"command"` - "/home/maverick/bin/annual-maintenance" + }, + { +- `"occurrence"` - "reboot", +- `"command"` - "/home/cleanup" + }, + { +- `"occurrence"` - "monthly", +- `"command"` - "/home/maverick/bin/tape-backup" + } + ] + } - $ cat /etc/crontab | jc --crontab -p -r - { - "variables": [ - { - "name": "MAILTO", - "value": "root" - }, - { - "name": "PATH", - "value": "/sbin:/bin:/usr/sbin:/usr/bin" - }, - { - "name": "SHELL", - "value": "/bin/bash" - } - ], - "schedule": [ - { - "minute": "5", - "hour": "10-11,22", - "day_of_month": "*", - "month": "*", - "day_of_week": "*", - "command": "/var/www/devdaily.com/bin/mk-new-links.php" - }, - { - "minute": "30", - "hour": "4/2", - "day_of_month": "*", - "month": "*", - "day_of_week": "*", - "command": "/var/www/devdaily.com/bin/create-all-backups.sh" - }, - { - "occurrence": "yearly", - "command": "/home/maverick/bin/annual-maintenance" - }, - { - "occurrence": "reboot", - "command": "/home/cleanup" - }, - { - "occurrence": "monthly", - "command": "/home/maverick/bin/tape-backup" - } - ] - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/crontab_u.md b/docs/parsers/crontab_u.md index dc66508b..28d78c5d 100644 --- a/docs/parsers/crontab_u.md +++ b/docs/parsers/crontab_u.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.crontab\_u -# jc.parsers.crontab_u jc - JSON CLI output utility `crontab -l` command output and crontab file parser @@ -9,193 +11,203 @@ information for processes. Usage (cli): - $ crontab -l | jc --crontab-u +$ crontab -l | jc --crontab-u Usage (module): - import jc - result = jc.parse('crontab_u', crontab_u_output) +import jc +result = jc.parse('crontab_u', crontab_u_output) - or +or - import jc.parsers.crontab_u - result = jc.parsers.crontab_u.parse(crontab_u_output) +import jc.parsers.crontab_u +result = jc.parsers.crontab_u.parse(crontab_u_output) Schema: - { - "variables": [ - { - "name": string, - "value": string - } - ], - "schedule": [ - { - "occurrence" string, - "minute": [ - string - ], - "hour": [ - string - ], - "day_of_month": [ - string - ], - "month": [ - string - ], - "day_of_week": [ - string - ], - "occurrence": string, - "user": string, - "command": string - } - ] - } +{ +"variables": [ +{ +"name": string, +"value": string +} +], +"schedule": [ +{ +"occurrence" string, +"minute": [ +string +], +"hour": [ +string +], +"day_of_month": [ +string +], +"month": [ +string +], +"day_of_week": [ +string +], +"occurrence": string, +"user": string, +"command": string +} +] +} -Examples: +**Examples**: - $ cat /etc/crontab | jc --crontab-u -p - { - "variables": [ - { - "name": "PATH", - "value": "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sb..." - }, - { - "name": "SHELL", - "value": "/bin/sh" - } - ], - "schedule": [ - { - "minute": [ - "25" - ], - "hour": [ - "6" - ], - "day_of_month": [ - "*" - ], - "month": [ - "*" - ], - "day_of_week": [ - "*" - ], - "user": "root", - "command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..." - }, - { - "minute": [ - "47" - ], - "hour": [ - "6" - ], - "day_of_month": [ - "*" - ], - "month": [ - "*" - ], - "day_of_week": [ - "7" - ], - "user": "root", - "command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..." - }, - { - "minute": [ - "52" - ], - "hour": [ - "6" - ], - "day_of_month": [ - "1" - ], - "month": [ - "*" - ], - "day_of_week": [ - "*" - ], - "user": "root", - "command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..." - } - ] - } + + $ cat /etc/crontab | jc --crontab-u -p + { +- `"variables"` - [ + { +- `"name"` - "PATH", +- `"value"` - "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sb..." + }, + { +- `"name"` - "SHELL", +- `"value"` - "/bin/sh" + } + ], +- `"schedule"` - [ + { +- `"minute"` - [ + "25" + ], +- `"hour"` - [ + "6" + ], +- `"day_of_month"` - [ + "*" + ], +- `"month"` - [ + "*" + ], +- `"day_of_week"` - [ + "*" + ], +- `"user"` - "root", +- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..." + }, + { +- `"minute"` - [ + "47" + ], +- `"hour"` - [ + "6" + ], +- `"day_of_month"` - [ + "*" + ], +- `"month"` - [ + "*" + ], +- `"day_of_week"` - [ + "7" + ], +- `"user"` - "root", +- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..." + }, + { +- `"minute"` - [ + "52" + ], +- `"hour"` - [ + "6" + ], +- `"day_of_month"` - [ + "1" + ], +- `"month"` - [ + "*" + ], +- `"day_of_week"` - [ + "*" + ], +- `"user"` - "root", +- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..." + } + ] + } + + $ cat /etc/crontab | jc --crontab-u -p -r + { +- `"variables"` - [ + { +- `"name"` - "PATH", +- `"value"` - "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/..." + }, + { +- `"name"` - "SHELL", +- `"value"` - "/bin/sh" + } + ], +- `"schedule"` - [ + { +- `"minute"` - "25", +- `"hour"` - "6", +- `"day_of_month"` - "*", +- `"month"` - "*", +- `"day_of_week"` - "*", +- `"user"` - "root", +- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..." + }, + { +- `"minute"` - "47", +- `"hour"` - "6", +- `"day_of_month"` - "*", +- `"month"` - "*", +- `"day_of_week"` - "7", +- `"user"` - "root", +- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..." + }, + { +- `"minute"` - "52", +- `"hour"` - "6", +- `"day_of_month"` - "1", +- `"month"` - "*", +- `"day_of_week"` - "*", +- `"user"` - "root", +- `"command"` - "test -x /usr/sbin/anacron || ( cd / && run-parts ..." + } + ] + } - $ cat /etc/crontab | jc --crontab-u -p -r - { - "variables": [ - { - "name": "PATH", - "value": "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/..." - }, - { - "name": "SHELL", - "value": "/bin/sh" - } - ], - "schedule": [ - { - "minute": "25", - "hour": "6", - "day_of_month": "*", - "month": "*", - "day_of_week": "*", - "user": "root", - "command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..." - }, - { - "minute": "47", - "hour": "6", - "day_of_month": "*", - "month": "*", - "day_of_week": "7", - "user": "root", - "command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..." - }, - { - "minute": "52", - "hour": "6", - "day_of_month": "1", - "month": "*", - "day_of_week": "*", - "user": "root", - "command": "test -x /usr/sbin/anacron || ( cd / && run-parts ..." - } - ] - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/csv.md b/docs/parsers/csv.md index adc29ded..67f8ed75 100644 --- a/docs/parsers/csv.md +++ b/docs/parsers/csv.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.csv + jc - JSON CLI output utility `csv` file parser The `csv` parser will attempt to automatically detect the delimiter @@ -9,100 +11,110 @@ The first row of the file must be a header row. Usage (cli): - $ cat file.csv | jc --csv +$ cat file.csv | jc --csv Usage (module): - import jc - result = jc.parse('csv', csv_output) +import jc +result = jc.parse('csv', csv_output) - or +or - import jc.parsers.csv - result = jc.parsers.csv.parse(csv_output) +import jc.parsers.csv +result = jc.parsers.csv.parse(csv_output) Schema: - csv file converted to a Dictionary: - https://docs.python.org/3/library/csv.html +csv file converted to a Dictionary: +https://docs.python.org/3/library/csv.html - [ - { - "column_name1": string, - "column_name2": string - } - ] +[ +{ +"column_name1": string, +"column_name2": string +} +] -Examples: +**Examples**: - $ cat homes.csv - "Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres"... - 142, 160, 28, 10, 5, 3, 60, 0.28, 3167 - 175, 180, 18, 8, 4, 1, 12, 0.43, 4033 - 129, 132, 13, 6, 3, 1, 41, 0.33, 1471 - ... + + $ cat homes.csv + "Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres"... + 142, 160, 28, 10, 5, 3, 60, 0.28, 3167 + 175, 180, 18, 8, 4, 1, 12, 0.43, 4033 + 129, 132, 13, 6, 3, 1, 41, 0.33, 1471 + ... + + $ cat homes.csv | jc --csv -p + [ + { +- `"Sell"` - "142", +- `"List"` - "160", +- `"Living"` - "28", +- `"Rooms"` - "10", +- `"Beds"` - "5", +- `"Baths"` - "3", +- `"Age"` - "60", +- `"Acres"` - "0.28", +- `"Taxes"` - "3167" + }, + { +- `"Sell"` - "175", +- `"List"` - "180", +- `"Living"` - "18", +- `"Rooms"` - "8", +- `"Beds"` - "4", +- `"Baths"` - "1", +- `"Age"` - "12", +- `"Acres"` - "0.43", +- `"Taxes"` - "4033" + }, + { +- `"Sell"` - "129", +- `"List"` - "132", +- `"Living"` - "13", +- `"Rooms"` - "6", +- `"Beds"` - "3", +- `"Baths"` - "1", +- `"Age"` - "41", +- `"Acres"` - "0.33", +- `"Taxes"` - "1471" + }, + ... + ] - $ cat homes.csv | jc --csv -p - [ - { - "Sell": "142", - "List": "160", - "Living": "28", - "Rooms": "10", - "Beds": "5", - "Baths": "3", - "Age": "60", - "Acres": "0.28", - "Taxes": "3167" - }, - { - "Sell": "175", - "List": "180", - "Living": "18", - "Rooms": "8", - "Beds": "4", - "Baths": "1", - "Age": "12", - "Acres": "0.43", - "Taxes": "4033" - }, - { - "Sell": "129", - "List": "132", - "Living": "13", - "Rooms": "6", - "Beds": "3", - "Baths": "1", - "Age": "41", - "Acres": "0.33", - "Taxes": "1471" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/csv_s.md b/docs/parsers/csv_s.md index 6392d6aa..334d574b 100644 --- a/docs/parsers/csv_s.md +++ b/docs/parsers/csv_s.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.csv\_s -# jc.parsers.csv_s jc - JSON CLI output utility `csv` file streaming parser > This streaming parser outputs JSON Lines @@ -14,88 +16,100 @@ then the rest of the rows are loaded lazily. Usage (cli): - $ cat file.csv | jc --csv-s +$ cat file.csv | jc --csv-s Usage (module): - import jc - # result is an iterable object (generator) - result = jc.parse('csv_s', csv_output.splitlines()) - for item in result: - # do something +import jc +# result is an iterable object (generator) +result = jc.parse('csv_s', csv_output.splitlines()) +for item in result: +# do something - or +or - import jc.parsers.csv_s - # result is an iterable object (generator) - result = jc.parsers.csv_s.parse(csv_output.splitlines()) - for item in result: - # do something +import jc.parsers.csv_s +# result is an iterable object (generator) +result = jc.parsers.csv_s.parse(csv_output.splitlines()) +for item in result: +# do something Schema: - csv file converted to a Dictionary: - https://docs.python.org/3/library/csv.html +csv file converted to a Dictionary: +https://docs.python.org/3/library/csv.html - { - "column_name1": string, - "column_name2": string, +{ +"column_name1": string, +"column_name2": string, - # below object only exists if using -qq or ignore_exceptions=True +# below object only exists if using -qq or ignore_exceptions=True - "_jc_meta": - { - "success": boolean, # false if error parsing - "error": string, # exists if "success" is false - "line": string # exists if "success" is false - } - } +"_jc_meta": +{ +"success": boolean, # false if error parsing +"error": string, # exists if "success" is false +"line": string # exists if "success" is false +} +} -Examples: +**Examples**: - $ cat homes.csv - "Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres"... - 142, 160, 28, 10, 5, 3, 60, 0.28, 3167 - 175, 180, 18, 8, 4, 1, 12, 0.43, 4033 - 129, 132, 13, 6, 3, 1, 41, 0.33, 1471 - ... + + $ cat homes.csv + "Sell", "List", "Living", "Rooms", "Beds", "Baths", "Age", "Acres"... + 142, 160, 28, 10, 5, 3, 60, 0.28, 3167 + 175, 180, 18, 8, 4, 1, 12, 0.43, 4033 + 129, 132, 13, 6, 3, 1, 41, 0.33, 1471 + ... + + $ cat homes.csv | jc --csv-s + {"Sell":"142","List":"160","Living":"28","Rooms":"10","Beds":"5"...} + {"Sell":"175","List":"180","Living":"18","Rooms":"8","Beds":"4"...} + {"Sell":"129","List":"132","Living":"13","Rooms":"6","Beds":"3"...} + ... - $ cat homes.csv | jc --csv-s - {"Sell":"142","List":"160","Living":"28","Rooms":"10","Beds":"5"...} - {"Sell":"175","List":"180","Living":"18","Rooms":"8","Beds":"4"...} - {"Sell":"129","List":"132","Living":"13","Rooms":"6","Beds":"3"...} - ... + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False, ignore_exceptions=False) +def parse(data, raw=False, quiet=False, ignore_exceptions=False) ``` Main text parsing generator function. Returns an iterator object. -Parameters: +**Arguments**: - data: (iterable) line-based text data to parse - (e.g. sys.stdin or str.splitlines()) + +- `data` - (iterable) line-based text data to parse + (e.g. sys.stdin or str.splitlines()) + +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True +- `ignore_exceptions` - (boolean) ignore parsing exceptions if True + - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True - ignore_exceptions: (boolean) ignore parsing exceptions if True +**Yields**: -Yields: + + Dictionary. Raw or processed structured data. + - Dictionary. Raw or processed structured data. +**Returns**: -Returns: - - Iterator object + + Iterator object ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/date.md b/docs/parsers/date.md index 7132ed80..91b5c5dd 100644 --- a/docs/parsers/date.md +++ b/docs/parsers/date.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.date + jc - JSON CLI output utility `date` command output parser The `epoch` calculated timestamp field is naive. (i.e. based on the local @@ -11,98 +13,108 @@ available if the timezone field is UTC. Usage (cli): - $ date | jc --date +$ date | jc --date - or +or - $ jc date +$ jc date Usage (module): - import jc - result = jc.parse('date', date_command_output) +import jc +result = jc.parse('date', date_command_output) - or +or - import jc.parsers.date - result = jc.parsers.date.parse(date_command_output) +import jc.parsers.date +result = jc.parsers.date.parse(date_command_output) Schema: - { - "year": integer, - "month": string, - "month_num": integer, - "day": integer, - "weekday": string, - "weekday_num": integer, - "hour": integer, - "hour_24": integer, - "minute": integer, - "second": integer, - "period": string, - "timezone": string, - "utc_offset": string, # null if timezone field is not UTC - "day_of_year": integer, - "week_of_year": integer, - "iso": string, - "epoch": integer, # [0] - "epoch_utc": integer, # [1] - "timezone_aware": boolean # [2] - } +{ +"year": integer, +"month": string, +"month_num": integer, +"day": integer, +"weekday": string, +"weekday_num": integer, +"hour": integer, +"hour_24": integer, +"minute": integer, +"second": integer, +"period": string, +"timezone": string, +"utc_offset": string, # null if timezone field is not UTC +"day_of_year": integer, +"week_of_year": integer, +"iso": string, +"epoch": integer, # [0] +"epoch_utc": integer, # [1] +"timezone_aware": boolean # [2] +} - [0] naive timestamp - [1] timezone-aware timestamp. Only available if timezone field is UTC - [2] if true, all fields are correctly based on UTC +[0] naive timestamp +[1] timezone-aware timestamp. Only available if timezone field is UTC +[2] if true, all fields are correctly based on UTC -Examples: +**Examples**: - $ date | jc --date -p - { - "year": 2021, - "month": "Mar", - "month_num": 3, - "day": 25, - "weekday": "Thu", - "weekday_num": 4, - "hour": 2, - "hour_24": 2, - "minute": 2, - "second": 26, - "period": "AM", - "timezone": "UTC", - "utc_offset": "+0000", - "day_of_year": 84, - "week_of_year": 12, - "iso": "2021-03-25T02:02:26+00:00", - "epoch": 1616662946, - "epoch_utc": 1616637746, - "timezone_aware": true - } + + $ date | jc --date -p + { +- `"year"` - 2021, +- `"month"` - "Mar", +- `"month_num"` - 3, +- `"day"` - 25, +- `"weekday"` - "Thu", +- `"weekday_num"` - 4, +- `"hour"` - 2, +- `"hour_24"` - 2, +- `"minute"` - 2, +- `"second"` - 26, +- `"period"` - "AM", +- `"timezone"` - "UTC", +- `"utc_offset"` - "+0000", +- `"day_of_year"` - 84, +- `"week_of_year"` - 12, +- `"iso"` - "2021-03-25T02:02:26+00:00", +- `"epoch"` - 1616662946, +- `"epoch_utc"` - 1616637746, +- `"timezone_aware"` - true + } + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/df.md b/docs/parsers/df.md index 6087b001..22fd7c35 100644 --- a/docs/parsers/df.md +++ b/docs/parsers/df.md @@ -1,128 +1,140 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.df + jc - JSON CLI output utility `df` command output parser Usage (cli): - $ df | jc --df +$ df | jc --df - or +or - $ jc df +$ jc df Usage (module): - import jc - result = jc.parse('df', df_command_output) +import jc +result = jc.parse('df', df_command_output) - or +or - import jc.parsers.df - result = jc.parsers.df.parse(df_command_output) +import jc.parsers.df +result = jc.parsers.df.parse(df_command_output) Schema: - [ - { - "filesystem": string, - "size": string, - "1k_blocks": integer, - "512_blocks": integer, - "used": integer, - "available": integer, - "capacity_percent": integer, - "ifree": integer, - "iused": integer, - "use_percent": integer, - "iused_percent": integer, - "mounted_on": string - } - ] +[ +{ +"filesystem": string, +"size": string, +"1k_blocks": integer, +"512_blocks": integer, +"used": integer, +"available": integer, +"capacity_percent": integer, +"ifree": integer, +"iused": integer, +"use_percent": integer, +"iused_percent": integer, +"mounted_on": string +} +] -Examples: +**Examples**: - $ df | jc --df -p - [ - { - "filesystem": "devtmpfs", - "1k_blocks": 1918820, - "used": 0, - "available": 1918820, - "use_percent": 0, - "mounted_on": "/dev" - }, - { - "filesystem": "tmpfs", - "1k_blocks": 1930668, - "used": 0, - "available": 1930668, - "use_percent": 0, - "mounted_on": "/dev/shm" - }, - { - "filesystem": "tmpfs", - "1k_blocks": 1930668, - "used": 11800, - "available": 1918868, - "use_percent": 1, - "mounted_on": "/run" - }, - ... - ] + + $ df | jc --df -p + [ + { +- `"filesystem"` - "devtmpfs", +- `"1k_blocks"` - 1918820, +- `"used"` - 0, +- `"available"` - 1918820, +- `"use_percent"` - 0, +- `"mounted_on"` - "/dev" + }, + { +- `"filesystem"` - "tmpfs", +- `"1k_blocks"` - 1930668, +- `"used"` - 0, +- `"available"` - 1930668, +- `"use_percent"` - 0, +- `"mounted_on"` - "/dev/shm" + }, + { +- `"filesystem"` - "tmpfs", +- `"1k_blocks"` - 1930668, +- `"used"` - 11800, +- `"available"` - 1918868, +- `"use_percent"` - 1, +- `"mounted_on"` - "/run" + }, + ... + ] + + $ df | jc --df -p -r + [ + { +- `"filesystem"` - "devtmpfs", +- `"1k_blocks"` - "1918820", +- `"used"` - "0", +- `"available"` - "1918820", +- `"use_percent"` - "0%", +- `"mounted_on"` - "/dev" + }, + { +- `"filesystem"` - "tmpfs", +- `"1k_blocks"` - "1930668", +- `"used"` - "0", +- `"available"` - "1930668", +- `"use_percent"` - "0%", +- `"mounted_on"` - "/dev/shm" + }, + { +- `"filesystem"` - "tmpfs", +- `"1k_blocks"` - "1930668", +- `"used"` - "11800", +- `"available"` - "1918868", +- `"use_percent"` - "1%", +- `"mounted_on"` - "/run" + }, + ... + ] - $ df | jc --df -p -r - [ - { - "filesystem": "devtmpfs", - "1k_blocks": "1918820", - "used": "0", - "available": "1918820", - "use_percent": "0%", - "mounted_on": "/dev" - }, - { - "filesystem": "tmpfs", - "1k_blocks": "1930668", - "used": "0", - "available": "1930668", - "use_percent": "0%", - "mounted_on": "/dev/shm" - }, - { - "filesystem": "tmpfs", - "1k_blocks": "1930668", - "used": "11800", - "available": "1918868", - "use_percent": "1%", - "mounted_on": "/run" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/dig.md b/docs/parsers/dig.md index c727c763..d56a573b 100644 --- a/docs/parsers/dig.md +++ b/docs/parsers/dig.md @@ -1,11 +1,13 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.dig + jc - JSON CLI output utility `dig` command output parser Options supported: - `+noall +answer` options are supported in cases where only the answer - information is desired. +information is desired. - `+axfr` option is supported on its own The `when_epoch` calculated timestamp field is naive. (i.e. based on the @@ -16,338 +18,348 @@ only available if the timezone field is UTC. Usage (cli): - $ dig example.com | jc --dig +$ dig example.com | jc --dig - or +or - $ jc dig example.com +$ jc dig example.com Usage (module): - import jc - result = jc.parse('dig', dig_command_output) +import jc +result = jc.parse('dig', dig_command_output) - or +or - import jc.parsers.dig - result = jc.parsers.dig.parse(dig_command_output) +import jc.parsers.dig +result = jc.parsers.dig.parse(dig_command_output) Schema: - [ - { - "id": integer, - "opcode": string, - "status": string, - "flags": [ - string - ], - "query_num": integer, - "answer_num": integer, - "authority_num": integer, - "additional_num": integer, - "axfr": [ - { - "name": string, - "class": string, - "type": string, - "ttl": integer, - "data": string - } - ], - "opt_pseudosection": { - "edns": { - "version": integer, - "flags": [ - string - ], - "udp": integer - }, - "cookie": string - }, - "question": { - "name": string, - "class": string, - "type": string - }, - "answer": [ - { - "name": string, - "class": string, - "type": string, - "ttl": integer, - "data": string - } - ], - "additional": [ - { - "name": string, - "class": string, - "type": string, - "ttl": integer, - "data": string - } - ], - "authority": [ - { - "name": string, - "class": string, - "type": string, - "ttl": integer, - "data": string - } - ], - "query_size": integer, - "query_time": integer, # in msec - "server": string, - "when": string, - "when_epoch": integer, # [0] - "when_epoch_utc": integer, # [1] - "rcvd": integer - "size": string - } - ] +[ +{ +"id": integer, +"opcode": string, +"status": string, +"flags": [ +string +], +"query_num": integer, +"answer_num": integer, +"authority_num": integer, +"additional_num": integer, +"axfr": [ +{ +"name": string, +"class": string, +"type": string, +"ttl": integer, +"data": string +} +], +"opt_pseudosection": { +"edns": { +"version": integer, +"flags": [ +string +], +"udp": integer +}, +"cookie": string +}, +"question": { +"name": string, +"class": string, +"type": string +}, +"answer": [ +{ +"name": string, +"class": string, +"type": string, +"ttl": integer, +"data": string +} +], +"additional": [ +{ +"name": string, +"class": string, +"type": string, +"ttl": integer, +"data": string +} +], +"authority": [ +{ +"name": string, +"class": string, +"type": string, +"ttl": integer, +"data": string +} +], +"query_size": integer, +"query_time": integer, # in msec +"server": string, +"when": string, +"when_epoch": integer, # [0] +"when_epoch_utc": integer, # [1] +"rcvd": integer +"size": string +} +] - [0] naive timestamp if "when" field is parsable, else null - [1] timezone aware timestamp availabe for UTC, else null +[0] naive timestamp if "when" field is parsable, else null +[1] timezone aware timestamp availabe for UTC, else null -Examples: +**Examples**: - $ dig example.com | jc --dig -p - [ - { - "id": 2951, - "opcode": "QUERY", - "status": "NOERROR", - "flags": [ - "qr", - "rd", - "ra" - ], - "query_num": 1, - "answer_num": 1, - "authority_num": 0, - "additional_num": 1, - "opt_pseudosection": { - "edns": { - "version": 0, - "flags": [], - "udp": 4096 - } - }, - "question": { - "name": "example.com.", - "class": "IN", - "type": "A" - }, - "answer": [ - { - "name": "example.com.", - "class": "IN", - "type": "A", - "ttl": 39302, - "data": "93.184.216.34" - } - ], - "query_time": 49, - "server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", - "when": "Fri Apr 16 16:05:10 PDT 2021", - "rcvd": 56, - "when_epoch": 1618614310, - "when_epoch_utc": null - } - ] + + $ dig example.com | jc --dig -p + [ + { +- `"id"` - 2951, +- `"opcode"` - "QUERY", +- `"status"` - "NOERROR", +- `"flags"` - [ + "qr", + "rd", + "ra" + ], +- `"query_num"` - 1, +- `"answer_num"` - 1, +- `"authority_num"` - 0, +- `"additional_num"` - 1, +- `"opt_pseudosection"` - { +- `"edns"` - { +- `"version"` - 0, +- `"flags"` - [], +- `"udp"` - 4096 + } + }, +- `"question"` - { +- `"name"` - "example.com.", +- `"class"` - "IN", +- `"type"` - "A" + }, +- `"answer"` - [ + { +- `"name"` - "example.com.", +- `"class"` - "IN", +- `"type"` - "A", +- `"ttl"` - 39302, +- `"data"` - "93.184.216.34" + } + ], +- `"query_time"` - 49, +- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", +- `"when"` - "Fri Apr 16 16:05:10 PDT 2021", +- `"rcvd"` - 56, +- `"when_epoch"` - 1618614310, +- `"when_epoch_utc"` - null + } + ] + + $ dig cnn.com www.cnn.com @205.251.194.64 | jc --dig -p -r + [ + { +- `"id"` - "46052", +- `"opcode"` - "QUERY", +- `"status"` - "NOERROR", +- `"flags"` - [ + "qr", + "rd", + "ra" + ], +- `"query_num"` - "1", +- `"answer_num"` - "1", +- `"authority_num"` - "0", +- `"additional_num"` - "1", +- `"opt_pseudosection"` - { +- `"edns"` - { +- `"version"` - "0", +- `"flags"` - [], +- `"udp"` - "4096" + } + }, +- `"question"` - { +- `"name"` - "example.com.", +- `"class"` - "IN", +- `"type"` - "A" + }, +- `"answer"` - [ + { +- `"name"` - "example.com.", +- `"class"` - "IN", +- `"type"` - "A", +- `"ttl"` - "40426", +- `"data"` - "93.184.216.34" + } + ], +- `"query_time"` - "48 msec", +- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", +- `"when"` - "Fri Apr 16 16:06:12 PDT 2021", +- `"rcvd"` - "56" + } + ] + + $ dig -x 1.1.1.1 | jc --dig -p + [ + { +- `"id"` - 20785, +- `"opcode"` - "QUERY", +- `"status"` - "NOERROR", +- `"flags"` - [ + "qr", + "rd", + "ra" + ], +- `"query_num"` - 1, +- `"answer_num"` - 1, +- `"authority_num"` - 0, +- `"additional_num"` - 1, +- `"opt_pseudosection"` - { +- `"edns"` - { +- `"version"` - 0, +- `"flags"` - [], +- `"udp"` - 4096 + } + }, +- `"question"` - { +- `"name"` - "1.1.1.1.in-addr.arpa.", +- `"class"` - "IN", +- `"type"` - "PTR" + }, +- `"answer"` - [ + { +- `"name"` - "1.1.1.1.in-addr.arpa.", +- `"class"` - "IN", +- `"type"` - "PTR", +- `"ttl"` - 1800, +- `"data"` - "one.one.one.one." + } + ], +- `"query_time"` - 40, +- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", +- `"when"` - "Sat Apr 17 14:50:50 PDT 2021", +- `"rcvd"` - 78, +- `"when_epoch"` - 1618696250, +- `"when_epoch_utc"` - null + } + ] + + $ dig -x 1.1.1.1 | jc --dig -p -r + [ + { +- `"id"` - "32644", +- `"opcode"` - "QUERY", +- `"status"` - "NOERROR", +- `"flags"` - [ + "qr", + "rd", + "ra" + ], +- `"query_num"` - "1", +- `"answer_num"` - "1", +- `"authority_num"` - "0", +- `"additional_num"` - "1", +- `"opt_pseudosection"` - { +- `"edns"` - { +- `"version"` - "0", +- `"flags"` - [], +- `"udp"` - "4096" + } + }, +- `"question"` - { +- `"name"` - "1.1.1.1.in-addr.arpa.", +- `"class"` - "IN", +- `"type"` - "PTR" + }, +- `"answer"` - [ + { +- `"name"` - "1.1.1.1.in-addr.arpa.", +- `"class"` - "IN", +- `"type"` - "PTR", +- `"ttl"` - "1800", +- `"data"` - "one.one.one.one." + } + ], +- `"query_time"` - "52 msec", +- `"server"` - "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", +- `"when"` - "Sat Apr 17 14:51:46 PDT 2021", +- `"rcvd"` - "78" + } + ] + + $ dig +noall +answer cnn.com | jc --dig -p + [ + { +- `"answer"` - [ + { +- `"name"` - "cnn.com.", +- `"class"` - "IN", +- `"type"` - "A", +- `"ttl"` - 60, +- `"data"` - "151.101.193.67" + }, + { +- `"name"` - "cnn.com.", +- `"class"` - "IN", +- `"type"` - "A", +- `"ttl"` - 60, +- `"data"` - "151.101.65.67" + }, + { +- `"name"` - "cnn.com.", +- `"class"` - "IN", +- `"type"` - "A", +- `"ttl"` - 60, +- `"data"` - "151.101.1.67" + }, + { +- `"name"` - "cnn.com.", +- `"class"` - "IN", +- `"type"` - "A", +- `"ttl"` - 60, +- `"data"` - "151.101.129.67" + } + ] + } + ] - $ dig cnn.com www.cnn.com @205.251.194.64 | jc --dig -p -r - [ - { - "id": "46052", - "opcode": "QUERY", - "status": "NOERROR", - "flags": [ - "qr", - "rd", - "ra" - ], - "query_num": "1", - "answer_num": "1", - "authority_num": "0", - "additional_num": "1", - "opt_pseudosection": { - "edns": { - "version": "0", - "flags": [], - "udp": "4096" - } - }, - "question": { - "name": "example.com.", - "class": "IN", - "type": "A" - }, - "answer": [ - { - "name": "example.com.", - "class": "IN", - "type": "A", - "ttl": "40426", - "data": "93.184.216.34" - } - ], - "query_time": "48 msec", - "server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", - "when": "Fri Apr 16 16:06:12 PDT 2021", - "rcvd": "56" - } - ] + - $ dig -x 1.1.1.1 | jc --dig -p - [ - { - "id": 20785, - "opcode": "QUERY", - "status": "NOERROR", - "flags": [ - "qr", - "rd", - "ra" - ], - "query_num": 1, - "answer_num": 1, - "authority_num": 0, - "additional_num": 1, - "opt_pseudosection": { - "edns": { - "version": 0, - "flags": [], - "udp": 4096 - } - }, - "question": { - "name": "1.1.1.1.in-addr.arpa.", - "class": "IN", - "type": "PTR" - }, - "answer": [ - { - "name": "1.1.1.1.in-addr.arpa.", - "class": "IN", - "type": "PTR", - "ttl": 1800, - "data": "one.one.one.one." - } - ], - "query_time": 40, - "server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", - "when": "Sat Apr 17 14:50:50 PDT 2021", - "rcvd": 78, - "when_epoch": 1618696250, - "when_epoch_utc": null - } - ] +## info Objects - $ dig -x 1.1.1.1 | jc --dig -p -r - [ - { - "id": "32644", - "opcode": "QUERY", - "status": "NOERROR", - "flags": [ - "qr", - "rd", - "ra" - ], - "query_num": "1", - "answer_num": "1", - "authority_num": "0", - "additional_num": "1", - "opt_pseudosection": { - "edns": { - "version": "0", - "flags": [], - "udp": "4096" - } - }, - "question": { - "name": "1.1.1.1.in-addr.arpa.", - "class": "IN", - "type": "PTR" - }, - "answer": [ - { - "name": "1.1.1.1.in-addr.arpa.", - "class": "IN", - "type": "PTR", - "ttl": "1800", - "data": "one.one.one.one." - } - ], - "query_time": "52 msec", - "server": "2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)", - "when": "Sat Apr 17 14:51:46 PDT 2021", - "rcvd": "78" - } - ] - - $ dig +noall +answer cnn.com | jc --dig -p - [ - { - "answer": [ - { - "name": "cnn.com.", - "class": "IN", - "type": "A", - "ttl": 60, - "data": "151.101.193.67" - }, - { - "name": "cnn.com.", - "class": "IN", - "type": "A", - "ttl": 60, - "data": "151.101.65.67" - }, - { - "name": "cnn.com.", - "class": "IN", - "type": "A", - "ttl": 60, - "data": "151.101.1.67" - }, - { - "name": "cnn.com.", - "class": "IN", - "type": "A", - "ttl": 60, - "data": "151.101.129.67" - } - ] - } - ] - - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, aix, freebsd, darwin, win32, cygwin diff --git a/docs/parsers/dir.md b/docs/parsers/dir.md index 9d59d602..21e30db4 100644 --- a/docs/parsers/dir.md +++ b/docs/parsers/dir.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.dir + jc - JSON CLI output utility `dir` command output parser Options supported: @@ -17,135 +19,145 @@ time of the system the parser is run on) Usage (cli): - C:> dir | jc --dir +C:> dir | jc --dir Usage (module): - import jc - result = jc.parse('dir', dir_command_output) +import jc +result = jc.parse('dir', dir_command_output) - or +or - import jc.parsers.dir - result = jc.parsers.dir.parse(dir_command_output) +import jc.parsers.dir +result = jc.parsers.dir.parse(dir_command_output) Schema: - [ - { - "date": string, - "time": string, - "epoch": integer, # naive timestamp - "dir": boolean, - "size": integer, - "filename: string, - "parent": string - } - ] +[ +{ +"date": string, +"time": string, +"epoch": integer, # naive timestamp +"dir": boolean, +"size": integer, +"filename: string, +"parent": string +} +] -Examples: +**Examples**: - C:> dir | jc --dir -p - [ - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": true, - "size": null, - "filename": ".", - "parent": "C:\Program Files\Internet Explorer", - "epoch": 1616624100 - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": true, - "size": null, - "filename": "..", - "parent": "C:\Program Files\Internet Explorer", - "epoch": 1616624100 - }, - { - "date": "12/07/2019", - "time": "02:49 AM", - "dir": true, - "size": null, - "filename": "en-US", - "parent": "C:\Program Files\Internet Explorer", - "epoch": 1575715740 - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": false, - "size": 54784, - "filename": "ExtExport.exe", - "parent": "C:\Program Files\Internet Explorer", - "epoch": 1575713340 - }, - ... - ] + + C:> dir | jc --dir -p + [ + { +- `"date"` - "03/24/2021", +- `"time"` - "03:15 PM", +- `"dir"` - true, +- `"size"` - null, +- `"filename"` - ".", +- `"parent"` - "C:\\Program Files\\Internet Explorer", +- `"epoch"` - 1616624100 + }, + { +- `"date"` - "03/24/2021", +- `"time"` - "03:15 PM", +- `"dir"` - true, +- `"size"` - null, +- `"filename"` - "..", +- `"parent"` - "C:\\Program Files\\Internet Explorer", +- `"epoch"` - 1616624100 + }, + { +- `"date"` - "12/07/2019", +- `"time"` - "02:49 AM", +- `"dir"` - true, +- `"size"` - null, +- `"filename"` - "en-US", +- `"parent"` - "C:\\Program Files\\Internet Explorer", +- `"epoch"` - 1575715740 + }, + { +- `"date"` - "12/07/2019", +- `"time"` - "02:09 AM", +- `"dir"` - false, +- `"size"` - 54784, +- `"filename"` - "ExtExport.exe", +- `"parent"` - "C:\\Program Files\\Internet Explorer", +- `"epoch"` - 1575713340 + }, + ... + ] + + C:> dir | jc --dir -p -r + [ + { +- `"date"` - "03/24/2021", +- `"time"` - "03:15 PM", +- `"dir"` - true, +- `"size"` - null, +- `"filename"` - ".", +- `"parent"` - "C:\\Program Files\\Internet Explorer" + }, + { +- `"date"` - "03/24/2021", +- `"time"` - "03:15 PM", +- `"dir"` - true, +- `"size"` - null, +- `"filename"` - "..", +- `"parent"` - "C:\\Program Files\\Internet Explorer" + }, + { +- `"date"` - "12/07/2019", +- `"time"` - "02:49 AM", +- `"dir"` - true, +- `"size"` - null, +- `"filename"` - "en-US", +- `"parent"` - "C:\\Program Files\\Internet Explorer" + }, + { +- `"date"` - "12/07/2019", +- `"time"` - "02:09 AM", +- `"dir"` - false, +- `"size"` - "54,784", +- `"filename"` - "ExtExport.exe", +- `"parent"` - "C:\\Program Files\\Internet Explorer" + }, + ... + ] - C:> dir | jc --dir -p -r - [ - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": true, - "size": null, - "filename": ".", - "parent": "C:\Program Files\Internet Explorer" - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": true, - "size": null, - "filename": "..", - "parent": "C:\Program Files\Internet Explorer" - }, - { - "date": "12/07/2019", - "time": "02:49 AM", - "dir": true, - "size": null, - "filename": "en-US", - "parent": "C:\Program Files\Internet Explorer" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": false, - "size": "54,784", - "filename": "ExtExport.exe", - "parent": "C:\Program Files\Internet Explorer" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: win32 diff --git a/docs/parsers/dmidecode.md b/docs/parsers/dmidecode.md index 6a548ffe..69e84403 100644 --- a/docs/parsers/dmidecode.md +++ b/docs/parsers/dmidecode.md @@ -1,156 +1,168 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.dmidecode + jc - JSON CLI output utility `dmidecode` command output parser Usage (cli): - $ dmidecode | jc --dmidecode +$ dmidecode | jc --dmidecode - or +or - $ jc dmidecode +$ jc dmidecode Usage (module): - import jc - result = jc.parse('dmidecode', dmidecode_command_output) +import jc +result = jc.parse('dmidecode', dmidecode_command_output) - or +or - import jc.parsers.dmidecode - result = jc.parsers.dmidecode.parse(dmidecode_command_output) +import jc.parsers.dmidecode +result = jc.parsers.dmidecode.parse(dmidecode_command_output) Schema: - [ - { - "handle": string, - "type": integer, - "bytes": integer, - "description": string, - "values": { # null if empty - "lowercase_no_spaces_keys": string, - "multiline_key_values": [ - string, - ] - } - } - ] +[ +{ +"handle": string, +"type": integer, +"bytes": integer, +"description": string, +"values": { # null if empty +"lowercase_no_spaces_keys": string, +"multiline_key_values": [ +string, +] +} +} +] -Examples: +**Examples**: - # dmidecode | jc --dmidecode -p - [ - { - "handle": "0x0000", - "type": 0, - "bytes": 24, - "description": "BIOS Information", - "values": { - "vendor": "Phoenix Technologies LTD", - "version": "6.00", - "release_date": "04/13/2018", - "address": "0xEA490", - "runtime_size": "88944 bytes", - "rom_size": "64 kB", - "characteristics": [ - "ISA is supported", - "PCI is supported", - "PC Card (PCMCIA) is supported", - "PNP is supported", - "APM is supported", - "BIOS is upgradeable", - "BIOS shadowing is allowed", - "ESCD support is available", - "Boot from CD is supported", - "Selectable boot is supported", - "EDD is supported", - "Print screen service is supported (int 5h)", - "8042 keyboard services are supported (int 9h)", - "Serial services are supported (int 14h)", - "Printer services are supported (int 17h)", - "CGA/mono video services are supported (int 10h)", - "ACPI is supported", - "Smart battery is supported", - "BIOS boot specification is supported", - "Function key-initiated network boot is supported", - "Targeted content distribution is supported" - ], - "bios_revision": "4.6", - "firmware_revision": "0.0" - } - }, - ... - ] + + # dmidecode | jc --dmidecode -p + [ + { +- `"handle"` - "0x0000", +- `"type"` - 0, +- `"bytes"` - 24, +- `"description"` - "BIOS Information", +- `"values"` - { +- `"vendor"` - "Phoenix Technologies LTD", +- `"version"` - "6.00", +- `"release_date"` - "04/13/2018", +- `"address"` - "0xEA490", +- `"runtime_size"` - "88944 bytes", +- `"rom_size"` - "64 kB", +- `"characteristics"` - [ + "ISA is supported", + "PCI is supported", + "PC Card (PCMCIA) is supported", + "PNP is supported", + "APM is supported", + "BIOS is upgradeable", + "BIOS shadowing is allowed", + "ESCD support is available", + "Boot from CD is supported", + "Selectable boot is supported", + "EDD is supported", + "Print screen service is supported (int 5h)", + "8042 keyboard services are supported (int 9h)", + "Serial services are supported (int 14h)", + "Printer services are supported (int 17h)", + "CGA/mono video services are supported (int 10h)", + "ACPI is supported", + "Smart battery is supported", + "BIOS boot specification is supported", + "Function key-initiated network boot is supported", + "Targeted content distribution is supported" + ], +- `"bios_revision"` - "4.6", +- `"firmware_revision"` - "0.0" + } + }, + ... + ] + + # dmidecode | jc --dmidecode -p -r + [ + { +- `"handle"` - "0x0000", +- `"type"` - "0", +- `"bytes"` - "24", +- `"description"` - "BIOS Information", +- `"values"` - { +- `"vendor"` - "Phoenix Technologies LTD", +- `"version"` - "6.00", +- `"release_date"` - "04/13/2018", +- `"address"` - "0xEA490", +- `"runtime_size"` - "88944 bytes", +- `"rom_size"` - "64 kB", +- `"characteristics"` - [ + "ISA is supported", + "PCI is supported", + "PC Card (PCMCIA) is supported", + "PNP is supported", + "APM is supported", + "BIOS is upgradeable", + "BIOS shadowing is allowed", + "ESCD support is available", + "Boot from CD is supported", + "Selectable boot is supported", + "EDD is supported", + "Print screen service is supported (int 5h)", + "8042 keyboard services are supported (int 9h)", + "Serial services are supported (int 14h)", + "Printer services are supported (int 17h)", + "CGA/mono video services are supported (int 10h)", + "ACPI is supported", + "Smart battery is supported", + "BIOS boot specification is supported", + "Function key-initiated network boot is supported", + "Targeted content distribution is supported" + ], +- `"bios_revision"` - "4.6", +- `"firmware_revision"` - "0.0" + } + }, + ... + ] - # dmidecode | jc --dmidecode -p -r - [ - { - "handle": "0x0000", - "type": "0", - "bytes": "24", - "description": "BIOS Information", - "values": { - "vendor": "Phoenix Technologies LTD", - "version": "6.00", - "release_date": "04/13/2018", - "address": "0xEA490", - "runtime_size": "88944 bytes", - "rom_size": "64 kB", - "characteristics": [ - "ISA is supported", - "PCI is supported", - "PC Card (PCMCIA) is supported", - "PNP is supported", - "APM is supported", - "BIOS is upgradeable", - "BIOS shadowing is allowed", - "ESCD support is available", - "Boot from CD is supported", - "Selectable boot is supported", - "EDD is supported", - "Print screen service is supported (int 5h)", - "8042 keyboard services are supported (int 9h)", - "Serial services are supported (int 14h)", - "Printer services are supported (int 17h)", - "CGA/mono video services are supported (int 10h)", - "ACPI is supported", - "Smart battery is supported", - "BIOS boot specification is supported", - "Function key-initiated network boot is supported", - "Targeted content distribution is supported" - ], - "bios_revision": "4.6", - "firmware_revision": "0.0" - } - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/dpkg_l.md b/docs/parsers/dpkg_l.md index 9080b111..6addc439 100644 --- a/docs/parsers/dpkg_l.md +++ b/docs/parsers/dpkg_l.md @@ -1,162 +1,174 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.dpkg\_l -# jc.parsers.dpkg_l jc - JSON CLI output utility `dpkg -l` command output parser Set the `COLUMNS` environment variable to a large value to avoid field truncation. For example: - $ COLUMNS=500 dpkg -l | jc --dpkg-l +$ COLUMNS=500 dpkg -l | jc --dpkg-l Usage (cli): - $ dpkg -l | jc --dpkg-l +$ dpkg -l | jc --dpkg-l - or +or - $ jc dpkg -l +$ jc dpkg -l Usage (module): - import jc - result = jc.parse('dpkg_l', dpkg_command_output) +import jc +result = jc.parse('dpkg_l', dpkg_command_output) - or +or - import jc.parsers.dpkg_l - result = jc.parsers.dpkg_l.parse(dpkg_command_output) +import jc.parsers.dpkg_l +result = jc.parsers.dpkg_l.parse(dpkg_command_output) Schema: - [ - { - "codes": string, - "name": string, - "version": string, - "architecture": string, - "description": string, - "desired": string, - "status": string, - "error": string - } - ] +[ +{ +"codes": string, +"name": string, +"version": string, +"architecture": string, +"description": string, +"desired": string, +"status": string, +"error": string +} +] -Examples: +**Examples**: - $ dpkg -l | jc --dpkg-l -p - [ - { - "codes": "ii", - "name": "accountsservice", - "version": "0.6.45-1ubuntu1.3", - "architecture": "amd64", - "description": "query and manipulate user account information", - "desired": "install", - "status": "installed" - }, - { - "codes": "rc", - "name": "acl", - "version": "2.2.52-3build1", - "architecture": "amd64", - "description": "Access control list utilities", - "desired": "remove", - "status": "config-files" - }, - { - "codes": "uWR", - "name": "acpi", - "version": "1.7-1.1", - "architecture": "amd64", - "description": "displays information on ACPI devices", - "desired": "unknown", - "status": "trigger await", - "error": "reinstall required" - }, - { - "codes": "rh", - "name": "acpid", - "version": "1:2.0.28-1ubuntu1", - "architecture": "amd64", - "description": "Advanced Configuration and Power Interface...", - "desired": "remove", - "status": "half installed" - }, - { - "codes": "pn", - "name": "adduser", - "version": "3.116ubuntu1", - "architecture": "all", - "description": "add and remove users and groups", - "desired": "purge", - "status": "not installed" - }, - ... - ] + + $ dpkg -l | jc --dpkg-l -p + [ + { +- `"codes"` - "ii", +- `"name"` - "accountsservice", +- `"version"` - "0.6.45-1ubuntu1.3", +- `"architecture"` - "amd64", +- `"description"` - "query and manipulate user account information", +- `"desired"` - "install", +- `"status"` - "installed" + }, + { +- `"codes"` - "rc", +- `"name"` - "acl", +- `"version"` - "2.2.52-3build1", +- `"architecture"` - "amd64", +- `"description"` - "Access control list utilities", +- `"desired"` - "remove", +- `"status"` - "config-files" + }, + { +- `"codes"` - "uWR", +- `"name"` - "acpi", +- `"version"` - "1.7-1.1", +- `"architecture"` - "amd64", +- `"description"` - "displays information on ACPI devices", +- `"desired"` - "unknown", +- `"status"` - "trigger await", +- `"error"` - "reinstall required" + }, + { +- `"codes"` - "rh", +- `"name"` - "acpid", +- `"version"` - "1:2.0.28-1ubuntu1", +- `"architecture"` - "amd64", +- `"description"` - "Advanced Configuration and Power Interface...", +- `"desired"` - "remove", +- `"status"` - "half installed" + }, + { +- `"codes"` - "pn", +- `"name"` - "adduser", +- `"version"` - "3.116ubuntu1", +- `"architecture"` - "all", +- `"description"` - "add and remove users and groups", +- `"desired"` - "purge", +- `"status"` - "not installed" + }, + ... + ] + + $ dpkg -l | jc --dpkg-l -p -r + [ + { +- `"codes"` - "ii", +- `"name"` - "accountsservice", +- `"version"` - "0.6.45-1ubuntu1.3", +- `"architecture"` - "amd64", +- `"description"` - "query and manipulate user account information" + }, + { +- `"codes"` - "rc", +- `"name"` - "acl", +- `"version"` - "2.2.52-3build1", +- `"architecture"` - "amd64", +- `"description"` - "Access control list utilities" + }, + { +- `"codes"` - "uWR", +- `"name"` - "acpi", +- `"version"` - "1.7-1.1", +- `"architecture"` - "amd64", +- `"description"` - "displays information on ACPI devices" + }, + { +- `"codes"` - "rh", +- `"name"` - "acpid", +- `"version"` - "1:2.0.28-1ubuntu1", +- `"architecture"` - "amd64", +- `"description"` - "Advanced Configuration and Power Interface..." + }, + { +- `"codes"` - "pn", +- `"name"` - "adduser", +- `"version"` - "3.116ubuntu1", +- `"architecture"` - "all", +- `"description"` - "add and remove users and groups" + }, + ... + ] - $ dpkg -l | jc --dpkg-l -p -r - [ - { - "codes": "ii", - "name": "accountsservice", - "version": "0.6.45-1ubuntu1.3", - "architecture": "amd64", - "description": "query and manipulate user account information" - }, - { - "codes": "rc", - "name": "acl", - "version": "2.2.52-3build1", - "architecture": "amd64", - "description": "Access control list utilities" - }, - { - "codes": "uWR", - "name": "acpi", - "version": "1.7-1.1", - "architecture": "amd64", - "description": "displays information on ACPI devices" - }, - { - "codes": "rh", - "name": "acpid", - "version": "1:2.0.28-1ubuntu1", - "architecture": "amd64", - "description": "Advanced Configuration and Power Interface..." - }, - { - "codes": "pn", - "name": "adduser", - "version": "3.116ubuntu1", - "architecture": "all", - "description": "add and remove users and groups" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/du.md b/docs/parsers/du.md index c17c26b2..2d2c7a8a 100644 --- a/docs/parsers/du.md +++ b/docs/parsers/du.md @@ -1,118 +1,130 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.du + jc - JSON CLI output utility `du` command output parser Usage (cli): - $ du | jc --du +$ du | jc --du - or +or - $ jc du +$ jc du Usage (module): - import jc - result = jc.parse('du', du_command_output) +import jc +result = jc.parse('du', du_command_output) - or +or - import jc.parsers.du - result = jc.parsers.du.parse(du_command_output) +import jc.parsers.du +result = jc.parsers.du.parse(du_command_output) Schema: - [ - { - "size": integer, - "name": string - } - ] +[ +{ +"size": integer, +"name": string +} +] -Examples: +**Examples**: - $ du /usr | jc --du -p - [ - { - "size": 104608, - "name": "/usr/bin" - }, - { - "size": 56, - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": 0, - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": 0, - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": 0, - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": 1008, - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - ... - ] + + $ du /usr | jc --du -p + [ + { +- `"size"` - 104608, +- `"name"` - "/usr/bin" + }, + { +- `"size"` - 56, +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - 0, +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - 0, +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - 0, +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - 1008, +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + ... + ] + + $ du /usr | jc --du -p -r + [ + { +- `"size"` - "104608", +- `"name"` - "/usr/bin" + }, + { +- `"size"` - "56", +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - "0", +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - "0", +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - "0", +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + { +- `"size"` - "1008", +- `"name"` - "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." + }, + ... + ] - $ du /usr | jc --du -p -r - [ - { - "size": "104608", - "name": "/usr/bin" - }, - { - "size": "56", - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": "0", - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": "0", - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": "0", - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - { - "size": "1008", - "name": "/usr/standalone/firmware/iBridge1_1Customer.bundle/..." - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/env.md b/docs/parsers/env.md index e2b8525a..0df07cbe 100644 --- a/docs/parsers/env.md +++ b/docs/parsers/env.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.env + jc - JSON CLI output utility `env` and `printenv` command output parser This parser will output a list of dictionaries each containing `name` and @@ -10,95 +12,105 @@ function. Usage (cli): - $ env | jc --env +$ env | jc --env - or +or - $ jc env +$ jc env Usage (module): - import jc - result = jc.parse('env', env_command_output) +import jc +result = jc.parse('env', env_command_output) - or +or - import jc.parsers.env - result = jc.parsers.env.parse(env_command_output) +import jc.parsers.env +result = jc.parsers.env.parse(env_command_output) Schema: - [ - { - "name": string, - "value": string - } - ] +[ +{ +"name": string, +"value": string +} +] -Examples: +**Examples**: - $ env | jc --env -p - [ - { - "name": "XDG_SESSION_ID", - "value": "1" - }, - { - "name": "HOSTNAME", - "value": "localhost.localdomain" - }, - { - "name": "TERM", - "value": "vt220" - }, - { - "name": "SHELL", - "value": "/bin/bash" - }, - { - "name": "HISTSIZE", - "value": "1000" - }, - ... - ] + + $ env | jc --env -p + [ + { +- `"name"` - "XDG_SESSION_ID", +- `"value"` - "1" + }, + { +- `"name"` - "HOSTNAME", +- `"value"` - "localhost.localdomain" + }, + { +- `"name"` - "TERM", +- `"value"` - "vt220" + }, + { +- `"name"` - "SHELL", +- `"value"` - "/bin/bash" + }, + { +- `"name"` - "HISTSIZE", +- `"value"` - "1000" + }, + ... + ] + + $ env | jc --env -p -r + { +- `"TERM"` - "xterm-256color", +- `"SHELL"` - "/bin/bash", +- `"USER"` - "root", +- `"PATH"` - "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin", +- `"PWD"` - "/root", +- `"LANG"` - "en_US.UTF-8", +- `"HOME"` - "/root", +- `"LOGNAME"` - "root", +- `"_"` - "/usr/bin/env" + } - $ env | jc --env -p -r - { - "TERM": "xterm-256color", - "SHELL": "/bin/bash", - "USER": "root", - "PATH": "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin", - "PWD": "/root", - "LANG": "en_US.UTF-8", - "HOME": "/root", - "LOGNAME": "root", - "_": "/usr/bin/env" - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary of raw structured data or - List of Dictionaries of processed structured data + + Dictionary of raw structured data or + List of Dictionaries of processed structured data ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/file.md b/docs/parsers/file.md index bb8a211e..f493fc4d 100644 --- a/docs/parsers/file.md +++ b/docs/parsers/file.md @@ -1,93 +1,105 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.file + jc - JSON CLI output utility `file` command output parser Usage (cli): - $ file * | jc --file +$ file * | jc --file - or +or - $ jc file * +$ jc file * Usage (module): - import jc - result = jc.parse('file', file_command_output) +import jc +result = jc.parse('file', file_command_output) - or +or - import jc.parsers.file - result = jc.parsers.file.parse(file_command_output) +import jc.parsers.file +result = jc.parsers.file.parse(file_command_output) Schema: - [ - { - "filename": string, - "type": string - } - ] +[ +{ +"filename": string, +"type": string +} +] -Examples: +**Examples**: - $ file * | jc --file -p - [ - { - "filename": "Applications", - "type": "directory" - }, - { - "filename": "another file with spaces", - "type": "empty" - }, - { - "filename": "argstest.py", - "type": "Python script text executable, ASCII text" - }, - { - "filename": "blkid-p.out", - "type": "ASCII text" - }, - { - "filename": "blkid-pi.out", - "type": "ASCII text, with very long lines" - }, - { - "filename": "cd_catalog.xml", - "type": "XML 1.0 document text, ASCII text, with CRLF line ..." - }, - { - "filename": "centosserial.sh", - "type": "Bourne-Again shell script text executable, UTF-8 ..." - }, - ... - ] + + $ file * | jc --file -p + [ + { +- `"filename"` - "Applications", +- `"type"` - "directory" + }, + { +- `"filename"` - "another file with spaces", +- `"type"` - "empty" + }, + { +- `"filename"` - "argstest.py", +- `"type"` - "Python script text executable, ASCII text" + }, + { +- `"filename"` - "blkid-p.out", +- `"type"` - "ASCII text" + }, + { +- `"filename"` - "blkid-pi.out", +- `"type"` - "ASCII text, with very long lines" + }, + { +- `"filename"` - "cd_catalog.xml", +- `"type"` - "XML 1.0 document text, ASCII text, with CRLF line ..." + }, + { +- `"filename"` - "centosserial.sh", +- `"type"` - "Bourne-Again shell script text executable, UTF-8 ..." + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, aix, freebsd, darwin diff --git a/docs/parsers/finger.md b/docs/parsers/finger.md index 09e59400..93d47855 100644 --- a/docs/parsers/finger.md +++ b/docs/parsers/finger.md @@ -1,121 +1,133 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.finger + jc - JSON CLI output utility `finger` command output parser Supports `-s` output option. Does not support the `-l` detail option. Usage (cli): - $ finger | jc --finger +$ finger | jc --finger - or +or - $ jc finger +$ jc finger Usage (module): - import jc - result = jc.parse('finger', finger_command_output) +import jc +result = jc.parse('finger', finger_command_output) - or +or - import jc.parsers.finger - result = jc.parsers.finger.parse(finger_command_output) +import jc.parsers.finger +result = jc.parsers.finger.parse(finger_command_output) Schema: - [ - { - "login": string, - "name": string, - "tty": string, - "idle": string, # null if empty - "login_time": string, - "details": string, - "tty_writeable": boolean, - "idle_minutes": integer, - "idle_hours": integer, - "idle_days": integer, - "total_idle_minutes": integer - } - ] +[ +{ +"login": string, +"name": string, +"tty": string, +"idle": string, # null if empty +"login_time": string, +"details": string, +"tty_writeable": boolean, +"idle_minutes": integer, +"idle_hours": integer, +"idle_days": integer, +"total_idle_minutes": integer +} +] -Examples: +**Examples**: - $ finger | jc --finger -p - [ - { - "login": "jdoe", - "name": "John Doe", - "tty": "tty1", - "idle": "14d", - "login_time": "Mar 22 21:14", - "tty_writeable": false, - "idle_minutes": 0, - "idle_hours": 0, - "idle_days": 14, - "total_idle_minutes": 20160 - }, - { - "login": "jdoe", - "name": "John Doe", - "tty": "pts/0", - "idle": null, - "login_time": "Apr 5 15:33", - "details": "(192.168.1.22)", - "tty_writeable": true, - "idle_minutes": 0, - "idle_hours": 0, - "idle_days": 0, - "total_idle_minutes": 0 - }, - ... - ] + + $ finger | jc --finger -p + [ + { +- `"login"` - "jdoe", +- `"name"` - "John Doe", +- `"tty"` - "tty1", +- `"idle"` - "14d", +- `"login_time"` - "Mar 22 21:14", +- `"tty_writeable"` - false, +- `"idle_minutes"` - 0, +- `"idle_hours"` - 0, +- `"idle_days"` - 14, +- `"total_idle_minutes"` - 20160 + }, + { +- `"login"` - "jdoe", +- `"name"` - "John Doe", +- `"tty"` - "pts/0", +- `"idle"` - null, +- `"login_time"` - "Apr 5 15:33", +- `"details"` - "(192.168.1.22)", +- `"tty_writeable"` - true, +- `"idle_minutes"` - 0, +- `"idle_hours"` - 0, +- `"idle_days"` - 0, +- `"total_idle_minutes"` - 0 + }, + ... + ] + + $ finger | jc --finger -p -r + [ + { +- `"login"` - "jdoe", +- `"name"` - "John Doe", +- `"tty"` - "*tty1", +- `"idle"` - "14d", +- `"login_time"` - "Mar 22 21:14" + }, + { +- `"login"` - "jdoe", +- `"name"` - "John Doe", +- `"tty"` - "pts/0", +- `"idle"` - null, +- `"login_time"` - "Apr 5 15:33", +- `"details"` - "(192.168.1.22)" + }, + ... + ] - $ finger | jc --finger -p -r - [ - { - "login": "jdoe", - "name": "John Doe", - "tty": "*tty1", - "idle": "14d", - "login_time": "Mar 22 21:14" - }, - { - "login": "jdoe", - "name": "John Doe", - "tty": "pts/0", - "idle": null, - "login_time": "Apr 5 15:33", - "details": "(192.168.1.22)" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, freebsd diff --git a/docs/parsers/free.md b/docs/parsers/free.md index 25e7b826..210fc273 100644 --- a/docs/parsers/free.md +++ b/docs/parsers/free.md @@ -1,103 +1,115 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.free + jc - JSON CLI output utility `free` command output parser Usage (cli): - $ free | jc --free +$ free | jc --free - or +or - $ jc free +$ jc free Usage (module): - import jc - result = jc.parse('free', free_command_output) +import jc +result = jc.parse('free', free_command_output) - or +or - import jc.parsers.free - result = jc.parsers.free.parse(free_command_output) +import jc.parsers.free +result = jc.parsers.free.parse(free_command_output) Schema: - [ - { - "type": string, - "total": integer, - "used": integer, - "free": integer, - "shared": integer, - "buff_cache": integer, - "available": integer - } - ] +[ +{ +"type": string, +"total": integer, +"used": integer, +"free": integer, +"shared": integer, +"buff_cache": integer, +"available": integer +} +] -Examples: +**Examples**: - $ free | jc --free -p - [ - { - "type": "Mem", - "total": 3861340, - "used": 220508, - "free": 3381972, - "shared": 11800, - "buff_cache": 258860, - "available": 3397784 - }, - { - "type": "Swap", - "total": 2097148, - "used": 0, - "free": 2097148 - } - ] + + $ free | jc --free -p + [ + { +- `"type"` - "Mem", +- `"total"` - 3861340, +- `"used"` - 220508, +- `"free"` - 3381972, +- `"shared"` - 11800, +- `"buff_cache"` - 258860, +- `"available"` - 3397784 + }, + { +- `"type"` - "Swap", +- `"total"` - 2097148, +- `"used"` - 0, +- `"free"` - 2097148 + } + ] + + $ free | jc --free -p -r + [ + { +- `"type"` - "Mem", +- `"total"` - "2017300", +- `"used"` - "213104", +- `"free"` - "1148452", +- `"shared"` - "1176", +- `"buff_cache"` - "655744", +- `"available"` - "1622204" + }, + { +- `"type"` - "Swap", +- `"total"` - "2097148", +- `"used"` - "0", +- `"free"` - "2097148" + } + ] - $ free | jc --free -p -r - [ - { - "type": "Mem", - "total": "2017300", - "used": "213104", - "free": "1148452", - "shared": "1176", - "buff_cache": "655744", - "available": "1622204" - }, - { - "type": "Swap", - "total": "2097148", - "used": "0", - "free": "2097148" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/fstab.md b/docs/parsers/fstab.md index ede53d87..cb3d67f5 100644 --- a/docs/parsers/fstab.md +++ b/docs/parsers/fstab.md @@ -1,116 +1,128 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.fstab + jc - JSON CLI output utility `fstab` file parser Usage (cli): - $ cat /etc/fstab | jc --fstab +$ cat /etc/fstab | jc --fstab Usage (module): - import jc - result = jc.parse('fstab', fstab_command_output) +import jc +result = jc.parse('fstab', fstab_command_output) - or +or - import jc.parsers.fstab - result = jc.parsers.fstab.parse(fstab_command_output) +import jc.parsers.fstab +result = jc.parsers.fstab.parse(fstab_command_output) Schema: - [ - { - "fs_spec": string, - "fs_file": string, - "fs_vfstype": string, - "fs_mntops": string, - "fs_freq": integer, - "fs_passno": integer - } - ] +[ +{ +"fs_spec": string, +"fs_file": string, +"fs_vfstype": string, +"fs_mntops": string, +"fs_freq": integer, +"fs_passno": integer +} +] -Examples: +**Examples**: - $ cat /etc/fstab | jc --fstab -p - [ - { - "fs_spec": "/dev/mapper/centos-root", - "fs_file": "/", - "fs_vfstype": "xfs", - "fs_mntops": "defaults", - "fs_freq": 0, - "fs_passno": 0 - }, - { - "fs_spec": "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932", - "fs_file": "/boot", - "fs_vfstype": "xfs", - "fs_mntops": "defaults", - "fs_freq": 0, - "fs_passno": 0 - }, - { - "fs_spec": "/dev/mapper/centos-swap", - "fs_file": "swap", - "fs_vfstype": "swap", - "fs_mntops": "defaults", - "fs_freq": 0, - "fs_passno": 0 - } - ] + + $ cat /etc/fstab | jc --fstab -p + [ + { +- `"fs_spec"` - "/dev/mapper/centos-root", +- `"fs_file"` - "/", +- `"fs_vfstype"` - "xfs", +- `"fs_mntops"` - "defaults", +- `"fs_freq"` - 0, +- `"fs_passno"` - 0 + }, + { +- `"fs_spec"` - "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932", +- `"fs_file"` - "/boot", +- `"fs_vfstype"` - "xfs", +- `"fs_mntops"` - "defaults", +- `"fs_freq"` - 0, +- `"fs_passno"` - 0 + }, + { +- `"fs_spec"` - "/dev/mapper/centos-swap", +- `"fs_file"` - "swap", +- `"fs_vfstype"` - "swap", +- `"fs_mntops"` - "defaults", +- `"fs_freq"` - 0, +- `"fs_passno"` - 0 + } + ] + + $ cat /etc/fstab | jc --fstab -p -r + [ + { +- `"fs_spec"` - "/dev/mapper/centos-root", +- `"fs_file"` - "/", +- `"fs_vfstype"` - "xfs", +- `"fs_mntops"` - "defaults", +- `"fs_freq"` - "0", +- `"fs_passno"` - "0" + }, + { +- `"fs_spec"` - "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932", +- `"fs_file"` - "/boot", +- `"fs_vfstype"` - "xfs", +- `"fs_mntops"` - "defaults", +- `"fs_freq"` - "0", +- `"fs_passno"` - "0" + }, + { +- `"fs_spec"` - "/dev/mapper/centos-swap", +- `"fs_file"` - "swap", +- `"fs_vfstype"` - "swap", +- `"fs_mntops"` - "defaults", +- `"fs_freq"` - "0", +- `"fs_passno"` - "0" + } + ] - $ cat /etc/fstab | jc --fstab -p -r - [ - { - "fs_spec": "/dev/mapper/centos-root", - "fs_file": "/", - "fs_vfstype": "xfs", - "fs_mntops": "defaults", - "fs_freq": "0", - "fs_passno": "0" - }, - { - "fs_spec": "UUID=05d927bb-5875-49e3-ada1-7f46cb31c932", - "fs_file": "/boot", - "fs_vfstype": "xfs", - "fs_mntops": "defaults", - "fs_freq": "0", - "fs_passno": "0" - }, - { - "fs_spec": "/dev/mapper/centos-swap", - "fs_file": "swap", - "fs_vfstype": "swap", - "fs_mntops": "defaults", - "fs_freq": "0", - "fs_passno": "0" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, freebsd diff --git a/docs/parsers/group.md b/docs/parsers/group.md index 04d2be6d..86cf33cf 100644 --- a/docs/parsers/group.md +++ b/docs/parsers/group.md @@ -1,140 +1,152 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.group + jc - JSON CLI output utility `/etc/group` file parser Usage (cli): - $ cat /etc/group | jc --group +$ cat /etc/group | jc --group Usage (module): - import jc - result = jc.parse('group', group_file_output) +import jc +result = jc.parse('group', group_file_output) - or +or - import jc.parsers.group - result = jc.parsers.group.parse(group_file_output) +import jc.parsers.group +result = jc.parsers.group.parse(group_file_output) Schema: - [ - { - "group_name": string, - "password": string, - "gid": integer, - "members": [ - string - ] - } - ] +[ +{ +"group_name": string, +"password": string, +"gid": integer, +"members": [ +string +] +} +] -Examples: +**Examples**: - $ cat /etc/group | jc --group -p - [ - { - "group_name": "nobody", - "password": "*", - "gid": -2, - "members": [] - }, - { - "group_name": "nogroup", - "password": "*", - "gid": -1, - "members": [] - }, - { - "group_name": "wheel", - "password": "*", - "gid": 0, - "members": [ - "root" - ] - }, - { - "group_name": "certusers", - "password": "*", - "gid": 29, - "members": [ - "root", - "_jabber", - "_postfix", - "_cyrus", - "_calendar", - "_dovecot" - ] - }, - ... - ] + + $ cat /etc/group | jc --group -p + [ + { +- `"group_name"` - "nobody", +- `"password"` - "*", +- `"gid"` - -2, +- `"members"` - [] + }, + { +- `"group_name"` - "nogroup", +- `"password"` - "*", +- `"gid"` - -1, +- `"members"` - [] + }, + { +- `"group_name"` - "wheel", +- `"password"` - "*", +- `"gid"` - 0, +- `"members"` - [ + "root" + ] + }, + { +- `"group_name"` - "certusers", +- `"password"` - "*", +- `"gid"` - 29, +- `"members"` - [ + "root", + "_jabber", + "_postfix", + "_cyrus", + "_calendar", + "_dovecot" + ] + }, + ... + ] + + $ cat /etc/group | jc --group -p -r + [ + { +- `"group_name"` - "nobody", +- `"password"` - "*", +- `"gid"` - "-2", +- `"members"` - [ + "" + ] + }, + { +- `"group_name"` - "nogroup", +- `"password"` - "*", +- `"gid"` - "-1", +- `"members"` - [ + "" + ] + }, + { +- `"group_name"` - "wheel", +- `"password"` - "*", +- `"gid"` - "0", +- `"members"` - [ + "root" + ] + }, + { +- `"group_name"` - "certusers", +- `"password"` - "*", +- `"gid"` - "29", +- `"members"` - [ + "root", + "_jabber", + "_postfix", + "_cyrus", + "_calendar", + "_dovecot" + ] + }, + ... + ] - $ cat /etc/group | jc --group -p -r - [ - { - "group_name": "nobody", - "password": "*", - "gid": "-2", - "members": [ - "" - ] - }, - { - "group_name": "nogroup", - "password": "*", - "gid": "-1", - "members": [ - "" - ] - }, - { - "group_name": "wheel", - "password": "*", - "gid": "0", - "members": [ - "root" - ] - }, - { - "group_name": "certusers", - "password": "*", - "gid": "29", - "members": [ - "root", - "_jabber", - "_postfix", - "_cyrus", - "_calendar", - "_dovecot" - ] - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/gshadow.md b/docs/parsers/gshadow.md index 8fb1c089..5768a486 100644 --- a/docs/parsers/gshadow.md +++ b/docs/parsers/gshadow.md @@ -1,108 +1,120 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.gshadow + jc - JSON CLI output utility `/etc/gshadow` file parser Usage (cli): - $ cat /etc/gshadow | jc --gshadow +$ cat /etc/gshadow | jc --gshadow Usage (module): - import jc - result = jc.parse('gshadow', gshadow_file_output) +import jc +result = jc.parse('gshadow', gshadow_file_output) - or +or - import jc.parsers.gshadow - result = jc.parsers.gshadow.parse(gshadow_file_output) +import jc.parsers.gshadow +result = jc.parsers.gshadow.parse(gshadow_file_output) Schema: - [ - { - "group_name": string, - "password": string, - "administrators": [ - string - ], - "members": [ - string - ] - } - ] +[ +{ +"group_name": string, +"password": string, +"administrators": [ +string +], +"members": [ +string +] +} +] -Examples: +**Examples**: - $ cat /etc/gshadow | jc --gshadow -p - [ - { - "group_name": "root", - "password": "*", - "administrators": [], - "members": [] - }, - { - "group_name": "adm", - "password": "*", - "administrators": [], - "members": [ - "syslog", - "joeuser" - ] - }, - ... - ] + + $ cat /etc/gshadow | jc --gshadow -p + [ + { +- `"group_name"` - "root", +- `"password"` - "*", +- `"administrators"` - [], +- `"members"` - [] + }, + { +- `"group_name"` - "adm", +- `"password"` - "*", +- `"administrators"` - [], +- `"members"` - [ + "syslog", + "joeuser" + ] + }, + ... + ] + + $ cat /etc/gshadow | jc --gshadow -p -r + [ + { +- `"group_name"` - "root", +- `"password"` - "*", +- `"administrators"` - [ + "" + ], +- `"members"` - [ + "" + ] + }, + { +- `"group_name"` - "adm", +- `"password"` - "*", +- `"administrators"` - [ + "" + ], +- `"members"` - [ + "syslog", + "joeuser" + ] + }, + ... + ] - $ cat /etc/gshadow | jc --gshadow -p -r - [ - { - "group_name": "root", - "password": "*", - "administrators": [ - "" - ], - "members": [ - "" - ] - }, - { - "group_name": "adm", - "password": "*", - "administrators": [ - "" - ], - "members": [ - "syslog", - "joeuser" - ] - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, aix, freebsd diff --git a/docs/parsers/hash.md b/docs/parsers/hash.md index c2874b41..44d0e02c 100644 --- a/docs/parsers/hash.md +++ b/docs/parsers/hash.md @@ -1,68 +1,80 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.hash + jc - JSON CLI output utility `hash` command output parser Usage (cli): - $ hash | jc --hash +$ hash | jc --hash Usage (module): - import jc - result = jc.parse('hash', hash_command_output) +import jc +result = jc.parse('hash', hash_command_output) - or +or - import jc.parsers.hash - result = jc.parsers.hash.parse(hash_command_output) +import jc.parsers.hash +result = jc.parsers.hash.parse(hash_command_output) Schema: - [ - { - "command": string, - "hits": integer - } - ] +[ +{ +"command": string, +"hits": integer +} +] -Examples: +**Examples**: - $ hash | jc --hash -p - [ - { - "hits": 2, - "command": "/bin/cat" - }, - { - "hits": 1, - "command": "/bin/ls" - } - ] + + $ hash | jc --hash -p + [ + { +- `"hits"` - 2, +- `"command"` - "/bin/cat" + }, + { +- `"hits"` - 1, +- `"command"` - "/bin/ls" + } + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/hashsum.md b/docs/parsers/hashsum.md index d4894dc5..eb1603fd 100644 --- a/docs/parsers/hashsum.md +++ b/docs/parsers/hashsum.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.hashsum + jc - JSON CLI output utility `hash sum` command output parser This parser works with the following hash calculation utilities: @@ -15,85 +17,95 @@ This parser works with the following hash calculation utilities: Usage (cli): - $ md5sum file.txt | jc --hashsum +$ md5sum file.txt | jc --hashsum - or +or - $ jc md5sum file.txt +$ jc md5sum file.txt Usage (module): - import jc - result = jc.parse('hashsum', md5sum_command_output) +import jc +result = jc.parse('hashsum', md5sum_command_output) - or +or - import jc.parsers.hashsum - result = jc.parsers.hashsum.parse(md5sum_command_output) +import jc.parsers.hashsum +result = jc.parsers.hashsum.parse(md5sum_command_output) Schema: - [ - { - "filename": string, - "hash": string, - } - ] +[ +{ +"filename": string, +"hash": string, +} +] -Examples: +**Examples**: - $ md5sum * | jc --hashsum -p - [ - { - "filename": "devtoolset-3-gcc-4.9.2-6.el7.x86_64.rpm", - "hash": "65fc958c1add637ec23c4b137aecf3d3" - }, - { - "filename": "digout", - "hash": "5b9312ee5aff080927753c63a347707d" - }, - { - "filename": "dmidecode.out", - "hash": "716fd11c2ac00db109281f7110b8fb9d" - }, - { - "filename": "file with spaces in the name", - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - { - "filename": "id-centos.out", - "hash": "4295be239a14ad77ef3253103de976d2" - }, - { - "filename": "ifcfg.json", - "hash": "01fda0d9ba9a75618b072e64ff512b43" - }, - ... - ] + + $ md5sum * | jc --hashsum -p + [ + { +- `"filename"` - "devtoolset-3-gcc-4.9.2-6.el7.x86_64.rpm", +- `"hash"` - "65fc958c1add637ec23c4b137aecf3d3" + }, + { +- `"filename"` - "digout", +- `"hash"` - "5b9312ee5aff080927753c63a347707d" + }, + { +- `"filename"` - "dmidecode.out", +- `"hash"` - "716fd11c2ac00db109281f7110b8fb9d" + }, + { +- `"filename"` - "file with spaces in the name", +- `"hash"` - "d41d8cd98f00b204e9800998ecf8427e" + }, + { +- `"filename"` - "id-centos.out", +- `"hash"` - "4295be239a14ad77ef3253103de976d2" + }, + { +- `"filename"` - "ifcfg.json", +- `"hash"` - "01fda0d9ba9a75618b072e64ff512b43" + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/hciconfig.md b/docs/parsers/hciconfig.md index 191f941d..4fbb5c33 100644 --- a/docs/parsers/hciconfig.md +++ b/docs/parsers/hciconfig.md @@ -1,348 +1,360 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.hciconfig + jc - JSON CLI output utility `hciconfig` command output parser Usage (cli): - $ hciconfig | jc --hciconfig +$ hciconfig | jc --hciconfig - or +or - $ jc hciconfig +$ jc hciconfig Usage (module): - import jc - result = jc.parse('hciconfig', hciconfig_command_output) +import jc +result = jc.parse('hciconfig', hciconfig_command_output) - or +or - import jc.parsers.hciconfig - result = jc.parsers.hciconfig.parse(hciconfig_command_output) +import jc.parsers.hciconfig +result = jc.parsers.hciconfig.parse(hciconfig_command_output) Schema: - [ - { - "device": string, - "type": string, - "bus": string, - "bd_address": string, - "acl_mtu": integer, - "acl_mtu_packets": integer, - "sco_mtu": integer, - "sco_mtu_packets": integer, - "state": [ - string - ], - "rx_bytes": integer, - "rx_acl": integer, - "rx_sco": integer, - "rx_events": integer, - "rx_errors": integer, - "tx_bytes": integer, - "tx_acl": integer, - "tx_sco": integer, - "tx_commands": integer, - "tx_errors": integer, - "features": [ - string - ], - "packet_type": [ - string - ], - "link_policy": [ - string - ], - "link_mode": [ - string - ], - "name": string, - "class": string, - "service_classes": [ - string # 'Unspecified' is null - ], - "device_class": string, - "hci_version": string, - "hci_revision": string, - "lmp_version": string, - "lmp_subversion": string, - "manufacturer": string - } - ] +[ +{ +"device": string, +"type": string, +"bus": string, +"bd_address": string, +"acl_mtu": integer, +"acl_mtu_packets": integer, +"sco_mtu": integer, +"sco_mtu_packets": integer, +"state": [ +string +], +"rx_bytes": integer, +"rx_acl": integer, +"rx_sco": integer, +"rx_events": integer, +"rx_errors": integer, +"tx_bytes": integer, +"tx_acl": integer, +"tx_sco": integer, +"tx_commands": integer, +"tx_errors": integer, +"features": [ +string +], +"packet_type": [ +string +], +"link_policy": [ +string +], +"link_mode": [ +string +], +"name": string, +"class": string, +"service_classes": [ +string # 'Unspecified' is null +], +"device_class": string, +"hci_version": string, +"hci_revision": string, +"lmp_version": string, +"lmp_subversion": string, +"manufacturer": string +} +] -Examples: +**Examples**: - $ hciconfig -a | jc --hciconfig -p - [ - { - "device": "hci0", - "type": "Primary", - "bus": "USB", - "bd_address": "00:1A:7D:DA:71:13", - "acl_mtu": 310, - "acl_mtu_packets": 10, - "sco_mtu": 64, - "sco_mtu_packets": 8, - "state": [ - "UP", - "RUNNING" - ], - "rx_bytes": 13905869, - "rx_acl": 0, - "rx_sco": 0, - "rx_events": 393300, - "rx_errors": 0, - "tx_bytes": 62629, - "tx_acl": 0, - "tx_sco": 0, - "tx_commands": 3893, - "tx_errors": 0, - "features": [ - "0xff", - "0xff", - "0x8f", - "0xfe", - "0xdb", - "0xff", - "0x5b", - "0x87" - ], - "packet_type": [ - "DM1", - "DM3", - "DM5", - "DH1", - "DH3", - "DH5", - "HV1", - "HV2", - "HV3" - ], - "link_policy": [ - "RSWITCH", - "HOLD", - "SNIFF", - "PARK" - ], - "link_mode": [ - "SLAVE", - "ACCEPT" - ], - "name": "CSR8510 A10", - "class": "0x000000", - "service_classes": null, - "device_class": "Miscellaneous", - "hci_version": "4.0 (0x6)", - "hci_revision": "0x22bb", - "lmp_version": "4.0 (0x6)", - "lmp_subversion": "0x22bb", - "manufacturer": "Cambridge Silicon Radio (10)" - }, - { - "device": "hci1", - "type": "Primary", - "bus": "USB", - "bd_address": "00:1A:7D:DA:71:13", - "acl_mtu": 310, - "acl_mtu_packets": 10, - "sco_mtu": 64, - "sco_mtu_packets": 8, - "state": [ - "DOWN" - ], - "rx_bytes": 4388363, - "rx_acl": 0, - "rx_sco": 0, - "rx_events": 122021, - "rx_errors": 0, - "tx_bytes": 52350, - "tx_acl": 0, - "tx_sco": 0, - "tx_commands": 3480, - "tx_errors": 2, - "features": [ - "0xff", - "0xff", - "0x8f", - "0xfe", - "0xdb", - "0xff", - "0x5b", - "0x87" - ], - "packet_type": [ - "DM1", - "DM3", - "DM5", - "DH1", - "DH3", - "DH5", - "HV1", - "HV2", - "HV3" - ], - "link_policy": [ - "RSWITCH", - "HOLD", - "SNIFF", - "PARK" - ], - "link_mode": [ - "SLAVE", - "ACCEPT" - ] - } - ] + + $ hciconfig -a | jc --hciconfig -p + [ + { +- `"device"` - "hci0", +- `"type"` - "Primary", +- `"bus"` - "USB", +- `"bd_address"` - "00:1A:7D:DA:71:13", +- `"acl_mtu"` - 310, +- `"acl_mtu_packets"` - 10, +- `"sco_mtu"` - 64, +- `"sco_mtu_packets"` - 8, +- `"state"` - [ + "UP", + "RUNNING" + ], +- `"rx_bytes"` - 13905869, +- `"rx_acl"` - 0, +- `"rx_sco"` - 0, +- `"rx_events"` - 393300, +- `"rx_errors"` - 0, +- `"tx_bytes"` - 62629, +- `"tx_acl"` - 0, +- `"tx_sco"` - 0, +- `"tx_commands"` - 3893, +- `"tx_errors"` - 0, +- `"features"` - [ + "0xff", + "0xff", + "0x8f", + "0xfe", + "0xdb", + "0xff", + "0x5b", + "0x87" + ], +- `"packet_type"` - [ + "DM1", + "DM3", + "DM5", + "DH1", + "DH3", + "DH5", + "HV1", + "HV2", + "HV3" + ], +- `"link_policy"` - [ + "RSWITCH", + "HOLD", + "SNIFF", + "PARK" + ], +- `"link_mode"` - [ + "SLAVE", + "ACCEPT" + ], +- `"name"` - "CSR8510 A10", +- `"class"` - "0x000000", +- `"service_classes"` - null, +- `"device_class"` - "Miscellaneous", +- `"hci_version"` - "4.0 (0x6)", +- `"hci_revision"` - "0x22bb", +- `"lmp_version"` - "4.0 (0x6)", +- `"lmp_subversion"` - "0x22bb", +- `"manufacturer"` - "Cambridge Silicon Radio (10)" + }, + { +- `"device"` - "hci1", +- `"type"` - "Primary", +- `"bus"` - "USB", +- `"bd_address"` - "00:1A:7D:DA:71:13", +- `"acl_mtu"` - 310, +- `"acl_mtu_packets"` - 10, +- `"sco_mtu"` - 64, +- `"sco_mtu_packets"` - 8, +- `"state"` - [ + "DOWN" + ], +- `"rx_bytes"` - 4388363, +- `"rx_acl"` - 0, +- `"rx_sco"` - 0, +- `"rx_events"` - 122021, +- `"rx_errors"` - 0, +- `"tx_bytes"` - 52350, +- `"tx_acl"` - 0, +- `"tx_sco"` - 0, +- `"tx_commands"` - 3480, +- `"tx_errors"` - 2, +- `"features"` - [ + "0xff", + "0xff", + "0x8f", + "0xfe", + "0xdb", + "0xff", + "0x5b", + "0x87" + ], +- `"packet_type"` - [ + "DM1", + "DM3", + "DM5", + "DH1", + "DH3", + "DH5", + "HV1", + "HV2", + "HV3" + ], +- `"link_policy"` - [ + "RSWITCH", + "HOLD", + "SNIFF", + "PARK" + ], +- `"link_mode"` - [ + "SLAVE", + "ACCEPT" + ] + } + ] + + $ hciconfig -a | jc --hciconfig -p -r + [ + { +- `"device"` - "hci0", +- `"type"` - "Primary", +- `"bus"` - "USB", +- `"bd_address"` - "00:1A:7D:DA:71:13", +- `"acl_mtu"` - "310", +- `"acl_mtu_packets"` - "10", +- `"sco_mtu"` - "64", +- `"sco_mtu_packets"` - "8", +- `"state"` - [ + "UP", + "RUNNING" + ], +- `"rx_bytes"` - "13905869", +- `"rx_acl"` - "0", +- `"rx_sco"` - "0", +- `"rx_events"` - "393300", +- `"rx_errors"` - "0", +- `"tx_bytes"` - "62629", +- `"tx_acl"` - "0", +- `"tx_sco"` - "0", +- `"tx_commands"` - "3893", +- `"tx_errors"` - "0", +- `"features"` - [ + "0xff", + "0xff", + "0x8f", + "0xfe", + "0xdb", + "0xff", + "0x5b", + "0x87" + ], +- `"packet_type"` - [ + "DM1", + "DM3", + "DM5", + "DH1", + "DH3", + "DH5", + "HV1", + "HV2", + "HV3" + ], +- `"link_policy"` - [ + "RSWITCH", + "HOLD", + "SNIFF", + "PARK" + ], +- `"link_mode"` - [ + "SLAVE", + "ACCEPT" + ], +- `"name"` - "CSR8510 A10", +- `"class"` - "0x000000", +- `"service_classes"` - [ + "Unspecified" + ], +- `"device_class"` - "Miscellaneous", +- `"hci_version"` - "4.0 (0x6)", +- `"hci_revision"` - "0x22bb", +- `"lmp_version"` - "4.0 (0x6)", +- `"lmp_subversion"` - "0x22bb", +- `"manufacturer"` - "Cambridge Silicon Radio (10)" + }, + { +- `"device"` - "hci1", +- `"type"` - "Primary", +- `"bus"` - "USB", +- `"bd_address"` - "00:1A:7D:DA:71:13", +- `"acl_mtu"` - "310", +- `"acl_mtu_packets"` - "10", +- `"sco_mtu"` - "64", +- `"sco_mtu_packets"` - "8", +- `"state"` - [ + "DOWN" + ], +- `"rx_bytes"` - "4388363", +- `"rx_acl"` - "0", +- `"rx_sco"` - "0", +- `"rx_events"` - "122021", +- `"rx_errors"` - "0", +- `"tx_bytes"` - "52350", +- `"tx_acl"` - "0", +- `"tx_sco"` - "0", +- `"tx_commands"` - "3480", +- `"tx_errors"` - "2", +- `"features"` - [ + "0xff", + "0xff", + "0x8f", + "0xfe", + "0xdb", + "0xff", + "0x5b", + "0x87" + ], +- `"packet_type"` - [ + "DM1", + "DM3", + "DM5", + "DH1", + "DH3", + "DH5", + "HV1", + "HV2", + "HV3" + ], +- `"link_policy"` - [ + "RSWITCH", + "HOLD", + "SNIFF", + "PARK" + ], +- `"link_mode"` - [ + "SLAVE", + "ACCEPT" + ] + } + ] - $ hciconfig -a | jc --hciconfig -p -r - [ - { - "device": "hci0", - "type": "Primary", - "bus": "USB", - "bd_address": "00:1A:7D:DA:71:13", - "acl_mtu": "310", - "acl_mtu_packets": "10", - "sco_mtu": "64", - "sco_mtu_packets": "8", - "state": [ - "UP", - "RUNNING" - ], - "rx_bytes": "13905869", - "rx_acl": "0", - "rx_sco": "0", - "rx_events": "393300", - "rx_errors": "0", - "tx_bytes": "62629", - "tx_acl": "0", - "tx_sco": "0", - "tx_commands": "3893", - "tx_errors": "0", - "features": [ - "0xff", - "0xff", - "0x8f", - "0xfe", - "0xdb", - "0xff", - "0x5b", - "0x87" - ], - "packet_type": [ - "DM1", - "DM3", - "DM5", - "DH1", - "DH3", - "DH5", - "HV1", - "HV2", - "HV3" - ], - "link_policy": [ - "RSWITCH", - "HOLD", - "SNIFF", - "PARK" - ], - "link_mode": [ - "SLAVE", - "ACCEPT" - ], - "name": "CSR8510 A10", - "class": "0x000000", - "service_classes": [ - "Unspecified" - ], - "device_class": "Miscellaneous", - "hci_version": "4.0 (0x6)", - "hci_revision": "0x22bb", - "lmp_version": "4.0 (0x6)", - "lmp_subversion": "0x22bb", - "manufacturer": "Cambridge Silicon Radio (10)" - }, - { - "device": "hci1", - "type": "Primary", - "bus": "USB", - "bd_address": "00:1A:7D:DA:71:13", - "acl_mtu": "310", - "acl_mtu_packets": "10", - "sco_mtu": "64", - "sco_mtu_packets": "8", - "state": [ - "DOWN" - ], - "rx_bytes": "4388363", - "rx_acl": "0", - "rx_sco": "0", - "rx_events": "122021", - "rx_errors": "0", - "tx_bytes": "52350", - "tx_acl": "0", - "tx_sco": "0", - "tx_commands": "3480", - "tx_errors": "2", - "features": [ - "0xff", - "0xff", - "0x8f", - "0xfe", - "0xdb", - "0xff", - "0x5b", - "0x87" - ], - "packet_type": [ - "DM1", - "DM3", - "DM5", - "DH1", - "DH3", - "DH5", - "HV1", - "HV2", - "HV3" - ], - "link_policy": [ - "RSWITCH", - "HOLD", - "SNIFF", - "PARK" - ], - "link_mode": [ - "SLAVE", - "ACCEPT" - ] - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/history.md b/docs/parsers/history.md index 6b082014..f50dea3f 100644 --- a/docs/parsers/history.md +++ b/docs/parsers/history.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.history + jc - JSON CLI output utility `history` command output parser This parser will output a list of dictionaries each containing `line` and @@ -13,83 +15,93 @@ builtin. Usage (cli): - $ history | jc --history +$ history | jc --history Usage (module): - import jc - result = jc.parse('history', history_command_output) +import jc +result = jc.parse('history', history_command_output) - or +or - import jc.parsers.history - result = jc.parsers.history.parse(history_command_output) +import jc.parsers.history +result = jc.parsers.history.parse(history_command_output) Schema: - [ - { - "line": integer, - "command": string - } - ] +[ +{ +"line": integer, +"command": string +} +] -Examples: +**Examples**: - $ history | jc --history -p - [ - { - "line": 118, - "command": "sleep 100" - }, - { - "line": 119, - "command": "ls /bin" - }, - { - "line": 120, - "command": "echo "hello"" - }, - { - "line": 121, - "command": "docker images" - }, - ... - ] + + $ history | jc --history -p + [ + { +- `"line"` - 118, +- `"command"` - "sleep 100" + }, + { +- `"line"` - 119, +- `"command"` - "ls /bin" + }, + { +- `"line"` - 120, +- `"command"` - "echo \"hello\"" + }, + { +- `"line"` - 121, +- `"command"` - "docker images" + }, + ... + ] + + $ history | jc --history -p -r + { +- `"118"` - "sleep 100", +- `"119"` - "ls /bin", +- `"120"` - "echo \"hello\"", +- `"121"` - "docker images", + ... + } - $ history | jc --history -p -r - { - "118": "sleep 100", - "119": "ls /bin", - "120": "echo "hello"", - "121": "docker images", - ... - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary of raw structured data or - List of Dictionaries of processed structured data + + Dictionary of raw structured data or + List of Dictionaries of processed structured data ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/hosts.md b/docs/parsers/hosts.md index 0ba8e85f..a873ebad 100644 --- a/docs/parsers/hosts.md +++ b/docs/parsers/hosts.md @@ -1,105 +1,117 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.hosts + jc - JSON CLI output utility `/etc/hosts` file parser Usage (cli): - $ cat /etc/hosts | jc --hosts +$ cat /etc/hosts | jc --hosts Usage (module): - import jc - result = jc.parse('hosts', hosts_file_output) +import jc +result = jc.parse('hosts', hosts_file_output) - or +or - import jc.parsers.hosts - result = jc.parsers.hosts.parse(hosts_file_output) +import jc.parsers.hosts +result = jc.parsers.hosts.parse(hosts_file_output) Schema: - [ - { - "ip": string, - "hostname": [ - string - ] - } - ] +[ +{ +"ip": string, +"hostname": [ +string +] +} +] -Examples: +**Examples**: - $ cat /etc/hosts | jc --hosts -p - [ - { - "ip": "127.0.0.1", - "hostname": [ - "localhost" - ] - }, - { - "ip": "127.0.1.1", - "hostname": [ - "root-ubuntu" - ] - }, - { - "ip": "::1", - "hostname": [ - "ip6-localhost", - "ip6-loopback" - ] - }, - { - "ip": "fe00::0", - "hostname": [ - "ip6-localnet" - ] - }, - { - "ip": "ff00::0", - "hostname": [ - "ip6-mcastprefix" - ] - }, - { - "ip": "ff02::1", - "hostname": [ - "ip6-allnodes" - ] - }, - { - "ip": "ff02::2", - "hostname": [ - "ip6-allrouters" - ] - } - ] + + $ cat /etc/hosts | jc --hosts -p + [ + { +- `"ip"` - "127.0.0.1", +- `"hostname"` - [ + "localhost" + ] + }, + { +- `"ip"` - "127.0.1.1", +- `"hostname"` - [ + "root-ubuntu" + ] + }, + { +- `"ip"` - "::1", +- `"hostname"` - [ + "ip6-localhost", + "ip6-loopback" + ] + }, + { +- `"ip"` - "fe00::0", +- `"hostname"` - [ + "ip6-localnet" + ] + }, + { +- `"ip"` - "ff00::0", +- `"hostname"` - [ + "ip6-mcastprefix" + ] + }, + { +- `"ip"` - "ff02::1", +- `"hostname"` - [ + "ip6-allnodes" + ] + }, + { +- `"ip"` - "ff02::2", +- `"hostname"` - [ + "ip6-allrouters" + ] + } + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/id.md b/docs/parsers/id.md index 427f93d4..75a95179 100644 --- a/docs/parsers/id.md +++ b/docs/parsers/id.md @@ -1,136 +1,148 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.id + jc - JSON CLI output utility `id` command output parser Usage (cli): - $ id | jc --id +$ id | jc --id - or +or - $ jc id +$ jc id Usage (module): - import jc - result = jc.parse('id', id_command_output) +import jc +result = jc.parse('id', id_command_output) - or +or - import jc.parsers.id - result = jc.parsers.id.parse(id_command_output) +import jc.parsers.id +result = jc.parsers.id.parse(id_command_output) Schema: - { - "uid": { - "id": integer, - "name": string - }, - "gid": { - "id": integer, - "name": string - }, - "groups": [ - { - "id": integer, - "name": string - }, - { - "id": integer, - "name": string - } - ], - "context": { - "user": string, - "role": string, - "type": string, - "level": string - } - } +{ +"uid": { +"id": integer, +"name": string +}, +"gid": { +"id": integer, +"name": string +}, +"groups": [ +{ +"id": integer, +"name": string +}, +{ +"id": integer, +"name": string +} +], +"context": { +"user": string, +"role": string, +"type": string, +"level": string +} +} -Examples: +**Examples**: - $ id | jc --id -p - { - "uid": { - "id": 1000, - "name": "joeuser" - }, - "gid": { - "id": 1000, - "name": "joeuser" - }, - "groups": [ - { - "id": 1000, - "name": "joeuser" - }, - { - "id": 10, - "name": "wheel" - } - ], - "context": { - "user": "unconfined_u", - "role": "unconfined_r", - "type": "unconfined_t", - "level": "s0-s0:c0.c1023" - } - } + + $ id | jc --id -p + { +- `"uid"` - { +- `"id"` - 1000, +- `"name"` - "joeuser" + }, +- `"gid"` - { +- `"id"` - 1000, +- `"name"` - "joeuser" + }, +- `"groups"` - [ + { +- `"id"` - 1000, +- `"name"` - "joeuser" + }, + { +- `"id"` - 10, +- `"name"` - "wheel" + } + ], +- `"context"` - { +- `"user"` - "unconfined_u", +- `"role"` - "unconfined_r", +- `"type"` - "unconfined_t", +- `"level"` - "s0-s0:c0.c1023" + } + } + + $ id | jc --id -p -r + { +- `"uid"` - { +- `"id"` - "1000", +- `"name"` - "joeuser" + }, +- `"gid"` - { +- `"id"` - "1000", +- `"name"` - "joeuser" + }, +- `"groups"` - [ + { +- `"id"` - "1000", +- `"name"` - "joeuser" + }, + { +- `"id"` - "10", +- `"name"` - "wheel" + } + ], +- `"context"` - { +- `"user"` - "unconfined_u", +- `"role"` - "unconfined_r", +- `"type"` - "unconfined_t", +- `"level"` - "s0-s0:c0.c1023" + } + } - $ id | jc --id -p -r - { - "uid": { - "id": "1000", - "name": "joeuser" - }, - "gid": { - "id": "1000", - "name": "joeuser" - }, - "groups": [ - { - "id": "1000", - "name": "joeuser" - }, - { - "id": "10", - "name": "wheel" - } - ], - "context": { - "user": "unconfined_u", - "role": "unconfined_r", - "type": "unconfined_t", - "level": "s0-s0:c0.c1023" - } - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/ifconfig.md b/docs/parsers/ifconfig.md index 67b2ddf5..933e6492 100644 --- a/docs/parsers/ifconfig.md +++ b/docs/parsers/ifconfig.md @@ -1,217 +1,323 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ifconfig + jc - JSON CLI output utility `ifconfig` command output parser Note: No `ifconfig` options are supported. Usage (cli): - $ ifconfig | jc --ifconfig +$ ifconfig | jc --ifconfig - or +or - $ jc ifconfig +$ jc ifconfig Usage (module): - import jc - result = jc.parse('ifconfig', ifconfig_command_output) +import jc +result = jc.parse('ifconfig', ifconfig_command_output) - or +or - import jc.parsers.ifconfig - result = jc.parsers.ifconfig.parse(ifconfig_command_output) +import jc.parsers.ifconfig +result = jc.parsers.ifconfig.parse(ifconfig_command_output) Schema: - [ - { - "name": string, - "flags": integer, - "state": [ - string - ], - "mtu": integer, - "ipv4_addr": string, - "ipv4_mask": string, - "ipv4_bcast": string, - "ipv6_addr": string, - "ipv6_mask": integer, - "ipv6_scope": string, - "mac_addr": string, - "type": string, - "rx_packets": integer, - "rx_bytes": integer, - "rx_errors": integer, - "rx_dropped": integer, - "rx_overruns": integer, - "rx_frame": integer, - "tx_packets": integer, - "tx_bytes": integer, - "tx_errors": integer, - "tx_dropped": integer, - "tx_overruns": integer, - "tx_carrier": integer, - "tx_collisions": integer, - "metric": integer - } - ] +[ +{ +"name": string, +"flags": integer, +"state": [ +string +], +"mtu": integer, +"ipv4_addr": string, +"ipv4_mask": string, +"ipv4_bcast": string, +"ipv6_addr": string, +"ipv6_mask": integer, +"ipv6_scope": string, +"mac_addr": string, +"type": string, +"rx_packets": integer, +"rx_bytes": integer, +"rx_errors": integer, +"rx_dropped": integer, +"rx_overruns": integer, +"rx_frame": integer, +"tx_packets": integer, +"tx_bytes": integer, +"tx_errors": integer, +"tx_dropped": integer, +"tx_overruns": integer, +"tx_carrier": integer, +"tx_collisions": integer, +"metric": integer +} +] -Examples: +**Examples**: - $ ifconfig | jc --ifconfig -p - [ - { - "name": "ens33", - "flags": 4163, - "state": [ - "UP", - "BROADCAST", - "RUNNING", - "MULTICAST" - ], - "mtu": 1500, - "ipv4_addr": "192.168.71.137", - "ipv4_mask": "255.255.255.0", - "ipv4_bcast": "192.168.71.255", - "ipv6_addr": "fe80::c1cb:715d:bc3e:b8a0", - "ipv6_mask": 64, - "ipv6_scope": "0x20", - "mac_addr": "00:0c:29:3b:58:0e", - "type": "Ethernet", - "rx_packets": 8061, - "rx_bytes": 1514413, - "rx_errors": 0, - "rx_dropped": 0, - "rx_overruns": 0, - "rx_frame": 0, - "tx_packets": 4502, - "tx_bytes": 866622, - "tx_errors": 0, - "tx_dropped": 0, - "tx_overruns": 0, - "tx_carrier": 0, - "tx_collisions": 0, - "metric": null - }, - { - "name": "lo", - "flags": 73, - "state": [ - "UP", - "LOOPBACK", - "RUNNING" - ], - "mtu": 65536, - "ipv4_addr": "127.0.0.1", - "ipv4_mask": "255.0.0.0", - "ipv4_bcast": null, - "ipv6_addr": "::1", - "ipv6_mask": 128, - "ipv6_scope": "0x10", - "mac_addr": null, - "type": "Local Loopback", - "rx_packets": 73, - "rx_bytes": 6009, - "rx_errors": 0, - "rx_dropped": 0, - "rx_overruns": 0, - "rx_frame": 0, - "tx_packets": 73, - "tx_bytes": 6009, - "tx_errors": 0, - "tx_dropped": 0, - "tx_overruns": 0, - "tx_carrier": 0, - "tx_collisions": 0, - "metric": null - } - ] + + $ ifconfig | jc --ifconfig -p + [ + { +- `"name"` - "ens33", +- `"flags"` - 4163, +- `"state"` - [ + "UP", + "BROADCAST", + "RUNNING", + "MULTICAST" + ], +- `"mtu"` - 1500, +- `"ipv4_addr"` - "192.168.71.137", +- `"ipv4_mask"` - "255.255.255.0", +- `"ipv4_bcast"` - "192.168.71.255", +- `"ipv6_addr"` - "fe80::c1cb:715d:bc3e:b8a0", +- `"ipv6_mask"` - 64, +- `"ipv6_scope"` - "0x20", +- `"mac_addr"` - "00:0c:29:3b:58:0e", +- `"type"` - "Ethernet", +- `"rx_packets"` - 8061, +- `"rx_bytes"` - 1514413, +- `"rx_errors"` - 0, +- `"rx_dropped"` - 0, +- `"rx_overruns"` - 0, +- `"rx_frame"` - 0, +- `"tx_packets"` - 4502, +- `"tx_bytes"` - 866622, +- `"tx_errors"` - 0, +- `"tx_dropped"` - 0, +- `"tx_overruns"` - 0, +- `"tx_carrier"` - 0, +- `"tx_collisions"` - 0, +- `"metric"` - null + }, + { +- `"name"` - "lo", +- `"flags"` - 73, +- `"state"` - [ + "UP", + "LOOPBACK", + "RUNNING" + ], +- `"mtu"` - 65536, +- `"ipv4_addr"` - "127.0.0.1", +- `"ipv4_mask"` - "255.0.0.0", +- `"ipv4_bcast"` - null, +- `"ipv6_addr"` - "::1", +- `"ipv6_mask"` - 128, +- `"ipv6_scope"` - "0x10", +- `"mac_addr"` - null, +- `"type"` - "Local Loopback", +- `"rx_packets"` - 73, +- `"rx_bytes"` - 6009, +- `"rx_errors"` - 0, +- `"rx_dropped"` - 0, +- `"rx_overruns"` - 0, +- `"rx_frame"` - 0, +- `"tx_packets"` - 73, +- `"tx_bytes"` - 6009, +- `"tx_errors"` - 0, +- `"tx_dropped"` - 0, +- `"tx_overruns"` - 0, +- `"tx_carrier"` - 0, +- `"tx_collisions"` - 0, +- `"metric"` - null + } + ] + + $ ifconfig | jc --ifconfig -p -r + [ + { +- `"name"` - "ens33", +- `"flags"` - "4163", +- `"state"` - "UP,BROADCAST,RUNNING,MULTICAST", +- `"mtu"` - "1500", +- `"ipv4_addr"` - "192.168.71.137", +- `"ipv4_mask"` - "255.255.255.0", +- `"ipv4_bcast"` - "192.168.71.255", +- `"ipv6_addr"` - "fe80::c1cb:715d:bc3e:b8a0", +- `"ipv6_mask"` - "64", +- `"ipv6_scope"` - "0x20", +- `"mac_addr"` - "00:0c:29:3b:58:0e", +- `"type"` - "Ethernet", +- `"rx_packets"` - "8061", +- `"rx_bytes"` - "1514413", +- `"rx_errors"` - "0", +- `"rx_dropped"` - "0", +- `"rx_overruns"` - "0", +- `"rx_frame"` - "0", +- `"tx_packets"` - "4502", +- `"tx_bytes"` - "866622", +- `"tx_errors"` - "0", +- `"tx_dropped"` - "0", +- `"tx_overruns"` - "0", +- `"tx_carrier"` - "0", +- `"tx_collisions"` - "0", +- `"metric"` - null + }, + { +- `"name"` - "lo", +- `"flags"` - "73", +- `"state"` - "UP,LOOPBACK,RUNNING", +- `"mtu"` - "65536", +- `"ipv4_addr"` - "127.0.0.1", +- `"ipv4_mask"` - "255.0.0.0", +- `"ipv4_bcast"` - null, +- `"ipv6_addr"` - "::1", +- `"ipv6_mask"` - "128", +- `"ipv6_scope"` - "0x10", +- `"mac_addr"` - null, +- `"type"` - "Local Loopback", +- `"rx_packets"` - "73", +- `"rx_bytes"` - "6009", +- `"rx_errors"` - "0", +- `"rx_dropped"` - "0", +- `"rx_overruns"` - "0", +- `"rx_frame"` - "0", +- `"tx_packets"` - "73", +- `"tx_bytes"` - "6009", +- `"tx_errors"` - "0", +- `"tx_dropped"` - "0", +- `"tx_overruns"` - "0", +- `"tx_carrier"` - "0", +- `"tx_collisions"` - "0", +- `"metric"` - null + } + ] - $ ifconfig | jc --ifconfig -p -r - [ - { - "name": "ens33", - "flags": "4163", - "state": "UP,BROADCAST,RUNNING,MULTICAST", - "mtu": "1500", - "ipv4_addr": "192.168.71.137", - "ipv4_mask": "255.255.255.0", - "ipv4_bcast": "192.168.71.255", - "ipv6_addr": "fe80::c1cb:715d:bc3e:b8a0", - "ipv6_mask": "64", - "ipv6_scope": "0x20", - "mac_addr": "00:0c:29:3b:58:0e", - "type": "Ethernet", - "rx_packets": "8061", - "rx_bytes": "1514413", - "rx_errors": "0", - "rx_dropped": "0", - "rx_overruns": "0", - "rx_frame": "0", - "tx_packets": "4502", - "tx_bytes": "866622", - "tx_errors": "0", - "tx_dropped": "0", - "tx_overruns": "0", - "tx_carrier": "0", - "tx_collisions": "0", - "metric": null - }, - { - "name": "lo", - "flags": "73", - "state": "UP,LOOPBACK,RUNNING", - "mtu": "65536", - "ipv4_addr": "127.0.0.1", - "ipv4_mask": "255.0.0.0", - "ipv4_bcast": null, - "ipv6_addr": "::1", - "ipv6_mask": "128", - "ipv6_scope": "0x10", - "mac_addr": null, - "type": "Local Loopback", - "rx_packets": "73", - "rx_bytes": "6009", - "rx_errors": "0", - "rx_dropped": "0", - "rx_overruns": "0", - "rx_frame": "0", - "tx_packets": "73", - "tx_bytes": "6009", - "tx_errors": "0", - "tx_dropped": "0", - "tx_overruns": "0", - "tx_carrier": "0", - "tx_collisions": "0", - "metric": null - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +## \_IfconfigParser Objects + ```python -parse(data, raw=False, quiet=False) +class _IfconfigParser(object) +``` + +ifconfig parser module written by threeheadedknight@protonmail.com + + + +#### \_\_init\_\_ + +```python +def __init__(console_output) +``` + +**Arguments**: + +- `console_output`: + + + +#### list\_interfaces + +```python +def list_interfaces() +``` + + + +#### count\_interfaces + +```python +def count_interfaces() +``` + + + +#### filter\_interfaces + +```python +def filter_interfaces(**kwargs) +``` + +**Arguments**: + +- `kwargs`: + + + +#### get\_interface + +```python +def get_interface(name) +``` + +**Arguments**: + +- `name`: + + + +#### get\_interfaces + +```python +def get_interfaces() +``` + + + +#### is\_available + +```python +def is_available(name) +``` + +**Arguments**: + +- `name`: + + + +#### parser + +```python +def parser(source_data) +``` + +**Arguments**: + +- `source_data`: + + + +#### parse + +```python +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, aix, freebsd, darwin diff --git a/docs/parsers/ini.md b/docs/parsers/ini.md index 810f5073..5e8d1bde 100644 --- a/docs/parsers/ini.md +++ b/docs/parsers/ini.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ini + jc - JSON CLI output utility `INI` file parser Parses standard `INI` files and files containing simple key/value pairs. @@ -13,85 +15,95 @@ command-line argument or the `raw=True` argument in `parse()`. Usage (cli): - $ cat foo.ini | jc --ini +$ cat foo.ini | jc --ini Usage (module): - import jc - result = jc.parse('ini', ini_file_output) +import jc +result = jc.parse('ini', ini_file_output) - or +or - import jc.parsers.ini - result = jc.parsers.ini.parse(ini_file_output) +import jc.parsers.ini +result = jc.parsers.ini.parse(ini_file_output) Schema: - ini or key/value document converted to a dictionary - see the - configparser standard library documentation for more details. +ini or key/value document converted to a dictionary - see the +configparser standard library documentation for more details. - { - "key1": string, - "key2": string - } +{ +"key1": string, +"key2": string +} -Examples: +**Examples**: - $ cat example.ini - [DEFAULT] - ServerAliveInterval = 45 - Compression = yes - CompressionLevel = 9 - ForwardX11 = yes + + $ cat example.ini + [DEFAULT] + ServerAliveInterval = 45 + Compression = yes + CompressionLevel = 9 + ForwardX11 = yes + + [bitbucket.org] + User = hg + + [topsecret.server.com] + Port = 50022 + ForwardX11 = no + + $ cat example.ini | jc --ini -p + { +- `"bitbucket.org"` - { +- `"serveraliveinterval"` - "45", +- `"compression"` - "yes", +- `"compressionlevel"` - "9", +- `"forwardx11"` - "yes", +- `"user"` - "hg" + }, +- `"topsecret.server.com"` - { +- `"serveraliveinterval"` - "45", +- `"compression"` - "yes", +- `"compressionlevel"` - "9", +- `"forwardx11"` - "no", +- `"port"` - "50022" + } + } - [bitbucket.org] - User = hg + - [topsecret.server.com] - Port = 50022 - ForwardX11 = no +## info Objects - $ cat example.ini | jc --ini -p - { - "bitbucket.org": { - "serveraliveinterval": "45", - "compression": "yes", - "compressionlevel": "9", - "forwardx11": "yes", - "user": "hg" - }, - "topsecret.server.com": { - "serveraliveinterval": "45", - "compression": "yes", - "compressionlevel": "9", - "forwardx11": "no", - "port": "50022" - } - } - - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary representing the ini file + + Dictionary representing the ini file ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/iostat.md b/docs/parsers/iostat.md index e2482252..27a34b9a 100644 --- a/docs/parsers/iostat.md +++ b/docs/parsers/iostat.md @@ -1,190 +1,202 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.iostat + jc - JSON CLI output utility `iostat` command output parser Note: `iostat` version 11 and higher include a JSON output option Usage (cli): - $ iostat | jc --iostat +$ iostat | jc --iostat - or +or - $ jc iostat +$ jc iostat Usage (module): - import jc - result = jc.parse('iostat', iostat_command_output) +import jc +result = jc.parse('iostat', iostat_command_output) - or +or - import jc.parsers.iostat - result = jc.parsers.iostat.parse(iostat_command_output) +import jc.parsers.iostat +result = jc.parsers.iostat.parse(iostat_command_output) Schema: - [ - { - "type": string, - "percent_user": float, - "percent_nice": float, - "percent_system": float, - "percent_iowait": float, - "percent_steal": float, - "percent_idle": float, - "device": string, - "tps": float, - "kb_read_s": float, - "mb_read_s": float, - "kb_wrtn_s": float, - "mb_wrtn_s": float, - "kb_read": integer, - "mb_read": integer, - "kb_wrtn": integer, - "mb_wrtn": integer, - 'kb_dscd': integer, - 'mb_dscd': integer, - "rrqm_s": float, - "wrqm_s": float, - "r_s": float, - "w_s": float, - "rmb_s": float, - "rkb_s": float, - "wmb_s": float, - "wkb_s": float, - "avgrq_sz": float, - "avgqu_sz": float, - "await": float, - "r_await": float, - "w_await": float, - "svctm": float, - "aqu_sz": float, - "rareq_sz": float, - "wareq_sz": float, - "d_s": float, - "dkb_s": float, - "dmb_s": float, - "drqm_s": float, - "percent_drqm": float, - "d_await": float, - "dareq_sz": float, - "f_s": float, - "f_await": float, - "kb_dscd_s": float, - "mb_dscd_s": float, - "percent_util": float, - "percent_rrqm": float, - "percent_wrqm": float - } - ] +[ +{ +"type": string, +"percent_user": float, +"percent_nice": float, +"percent_system": float, +"percent_iowait": float, +"percent_steal": float, +"percent_idle": float, +"device": string, +"tps": float, +"kb_read_s": float, +"mb_read_s": float, +"kb_wrtn_s": float, +"mb_wrtn_s": float, +"kb_read": integer, +"mb_read": integer, +"kb_wrtn": integer, +"mb_wrtn": integer, +'kb_dscd': integer, +'mb_dscd': integer, +"rrqm_s": float, +"wrqm_s": float, +"r_s": float, +"w_s": float, +"rmb_s": float, +"rkb_s": float, +"wmb_s": float, +"wkb_s": float, +"avgrq_sz": float, +"avgqu_sz": float, +"await": float, +"r_await": float, +"w_await": float, +"svctm": float, +"aqu_sz": float, +"rareq_sz": float, +"wareq_sz": float, +"d_s": float, +"dkb_s": float, +"dmb_s": float, +"drqm_s": float, +"percent_drqm": float, +"d_await": float, +"dareq_sz": float, +"f_s": float, +"f_await": float, +"kb_dscd_s": float, +"mb_dscd_s": float, +"percent_util": float, +"percent_rrqm": float, +"percent_wrqm": float +} +] -Examples: +**Examples**: - $ iostat | jc --iostat -p - [ - { - "percent_user": 0.15, - "percent_nice": 0.0, - "percent_system": 0.18, - "percent_iowait": 0.0, - "percent_steal": 0.0, - "percent_idle": 99.67, - "type": "cpu" - }, - { - "device": "sda", - "tps": 0.29, - "kb_read_s": 7.22, - "kb_wrtn_s": 1.25, - "kb_read": 194341, - "kb_wrtn": 33590, - "type": "device" - }, - { - "device": "dm-0", - "tps": 0.29, - "kb_read_s": 5.99, - "kb_wrtn_s": 1.17, - "kb_read": 161361, - "kb_wrtn": 31522, - "type": "device" - }, - { - "device": "dm-1", - "tps": 0.0, - "kb_read_s": 0.08, - "kb_wrtn_s": 0.0, - "kb_read": 2204, - "kb_wrtn": 0, - "type": "device" - } - ] + + $ iostat | jc --iostat -p + [ + { +- `"percent_user"` - 0.15, +- `"percent_nice"` - 0.0, +- `"percent_system"` - 0.18, +- `"percent_iowait"` - 0.0, +- `"percent_steal"` - 0.0, +- `"percent_idle"` - 99.67, +- `"type"` - "cpu" + }, + { +- `"device"` - "sda", +- `"tps"` - 0.29, +- `"kb_read_s"` - 7.22, +- `"kb_wrtn_s"` - 1.25, +- `"kb_read"` - 194341, +- `"kb_wrtn"` - 33590, +- `"type"` - "device" + }, + { +- `"device"` - "dm-0", +- `"tps"` - 0.29, +- `"kb_read_s"` - 5.99, +- `"kb_wrtn_s"` - 1.17, +- `"kb_read"` - 161361, +- `"kb_wrtn"` - 31522, +- `"type"` - "device" + }, + { +- `"device"` - "dm-1", +- `"tps"` - 0.0, +- `"kb_read_s"` - 0.08, +- `"kb_wrtn_s"` - 0.0, +- `"kb_read"` - 2204, +- `"kb_wrtn"` - 0, +- `"type"` - "device" + } + ] + + $ iostat | jc --iostat -p -r + [ + { +- `"percent_user"` - "0.15", +- `"percent_nice"` - "0.00", +- `"percent_system"` - "0.18", +- `"percent_iowait"` - "0.00", +- `"percent_steal"` - "0.00", +- `"percent_idle"` - "99.67", +- `"type"` - "cpu" + }, + { +- `"device"` - "sda", +- `"tps"` - "0.29", +- `"kb_read_s"` - "7.22", +- `"kb_wrtn_s"` - "1.25", +- `"kb_read"` - "194341", +- `"kb_wrtn"` - "33590", +- `"type"` - "device" + }, + { +- `"device"` - "dm-0", +- `"tps"` - "0.29", +- `"kb_read_s"` - "5.99", +- `"kb_wrtn_s"` - "1.17", +- `"kb_read"` - "161361", +- `"kb_wrtn"` - "31522", +- `"type"` - "device" + }, + { +- `"device"` - "dm-1", +- `"tps"` - "0.00", +- `"kb_read_s"` - "0.08", +- `"kb_wrtn_s"` - "0.00", +- `"kb_read"` - "2204", +- `"kb_wrtn"` - "0", +- `"type"` - "device" + } + ] - $ iostat | jc --iostat -p -r - [ - { - "percent_user": "0.15", - "percent_nice": "0.00", - "percent_system": "0.18", - "percent_iowait": "0.00", - "percent_steal": "0.00", - "percent_idle": "99.67", - "type": "cpu" - }, - { - "device": "sda", - "tps": "0.29", - "kb_read_s": "7.22", - "kb_wrtn_s": "1.25", - "kb_read": "194341", - "kb_wrtn": "33590", - "type": "device" - }, - { - "device": "dm-0", - "tps": "0.29", - "kb_read_s": "5.99", - "kb_wrtn_s": "1.17", - "kb_read": "161361", - "kb_wrtn": "31522", - "type": "device" - }, - { - "device": "dm-1", - "tps": "0.00", - "kb_read_s": "0.08", - "kb_wrtn_s": "0.00", - "kb_read": "2204", - "kb_wrtn": "0", - "type": "device" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/iostat_s.md b/docs/parsers/iostat_s.md index 3696ff4b..730801bd 100644 --- a/docs/parsers/iostat_s.md +++ b/docs/parsers/iostat_s.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.iostat\_s -# jc.parsers.iostat_s jc - JSON CLI output utility `iostat` command output streaming parser > This streaming parser outputs JSON Lines @@ -9,130 +11,142 @@ Note: `iostat` version 11 and higher include a JSON output option Usage (cli): - $ iostat | jc --iostat-s +$ iostat | jc --iostat-s Usage (module): - import jc - # result is an iterable object (generator) - result = jc.parse('iostat_s', iostat_command_output.splitlines()) - for item in result: - # do something +import jc +# result is an iterable object (generator) +result = jc.parse('iostat_s', iostat_command_output.splitlines()) +for item in result: +# do something - or +or - import jc.parsers.iostat_s - # result is an iterable object (generator) - result = jc.parsers.iostat_s.parse(iostat_command_output.splitlines()) - for item in result: - # do something +import jc.parsers.iostat_s +# result is an iterable object (generator) +result = jc.parsers.iostat_s.parse(iostat_command_output.splitlines()) +for item in result: +# do something Schema: - { - "type": string, - "percent_user": float, - "percent_nice": float, - "percent_system": float, - "percent_iowait": float, - "percent_steal": float, - "percent_idle": float, - "device": string, - "tps": float, - "kb_read_s": float, - "mb_read_s": float, - "kb_wrtn_s": float, - "mb_wrtn_s": float, - "kb_read": integer, - "mb_read": integer, - "kb_wrtn": integer, - "mb_wrtn": integer, - 'kb_dscd': integer, - 'mb_dscd': integer, - "rrqm_s": float, - "wrqm_s": float, - "r_s": float, - "w_s": float, - "rmb_s": float, - "rkb_s": float, - "wmb_s": float, - "wkb_s": float, - "avgrq_sz": float, - "avgqu_sz": float, - "await": float, - "r_await": float, - "w_await": float, - "svctm": float, - "aqu_sz": float, - "rareq_sz": float, - "wareq_sz": float, - "d_s": float, - "dkb_s": float, - "dmb_s": float, - "drqm_s": float, - "percent_drqm": float, - "d_await": float, - "dareq_sz": float, - "f_s": float, - "f_await": float, - "kb_dscd_s": float, - "mb_dscd_s": float, - "percent_util": float, - "percent_rrqm": float, - "percent_wrqm": float, +{ +"type": string, +"percent_user": float, +"percent_nice": float, +"percent_system": float, +"percent_iowait": float, +"percent_steal": float, +"percent_idle": float, +"device": string, +"tps": float, +"kb_read_s": float, +"mb_read_s": float, +"kb_wrtn_s": float, +"mb_wrtn_s": float, +"kb_read": integer, +"mb_read": integer, +"kb_wrtn": integer, +"mb_wrtn": integer, +'kb_dscd': integer, +'mb_dscd': integer, +"rrqm_s": float, +"wrqm_s": float, +"r_s": float, +"w_s": float, +"rmb_s": float, +"rkb_s": float, +"wmb_s": float, +"wkb_s": float, +"avgrq_sz": float, +"avgqu_sz": float, +"await": float, +"r_await": float, +"w_await": float, +"svctm": float, +"aqu_sz": float, +"rareq_sz": float, +"wareq_sz": float, +"d_s": float, +"dkb_s": float, +"dmb_s": float, +"drqm_s": float, +"percent_drqm": float, +"d_await": float, +"dareq_sz": float, +"f_s": float, +"f_await": float, +"kb_dscd_s": float, +"mb_dscd_s": float, +"percent_util": float, +"percent_rrqm": float, +"percent_wrqm": float, - # Below object only exists if using -qq or ignore_exceptions=True +# Below object only exists if using -qq or ignore_exceptions=True - "_jc_meta": - { - "success": boolean, # false if error parsing - "error": string, # exists if "success" is false - "line": string # exists if "success" is false - } - } +"_jc_meta": +{ +"success": boolean, # false if error parsing +"error": string, # exists if "success" is false +"line": string # exists if "success" is false +} +} -Examples: +**Examples**: - $ iostat | jc --iostat-s - {"percent_user":0.14,"percent_nice":0.0,"percent_system":0.16,...} - {"device":"sda","tps":0.24,"kb_read_s":5.28,"kb_wrtn_s":1.1...} - ... + + $ iostat | jc --iostat-s + {"percent_user":0.14,"percent_nice":0.0,"percent_system":0.16,...} + {"device":"sda","tps":0.24,"kb_read_s":5.28,"kb_wrtn_s":1.1...} + ... + + $ iostat | jc --iostat-s -r + {"percent_user":"0.14","percent_nice":"0.00","percent_system":"0.16"...} + {"device":"sda","tps":"0.24","kb_read_s":"5.28","kb_wrtn_s":"1.10"...} + ... - $ iostat | jc --iostat-s -r - {"percent_user":"0.14","percent_nice":"0.00","percent_system":"0.16"...} - {"device":"sda","tps":"0.24","kb_read_s":"5.28","kb_wrtn_s":"1.10"...} - ... + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False, ignore_exceptions=False) +def parse(data, raw=False, quiet=False, ignore_exceptions=False) ``` Main text parsing generator function. Returns an iterator object. -Parameters: +**Arguments**: - data: (iterable) line-based text data to parse - (e.g. sys.stdin or str.splitlines()) + +- `data` - (iterable) line-based text data to parse + (e.g. sys.stdin or str.splitlines()) + +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True +- `ignore_exceptions` - (boolean) ignore parsing exceptions if True + - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True - ignore_exceptions: (boolean) ignore parsing exceptions if True +**Yields**: -Yields: + + Dictionary. Raw or processed structured data. + - Dictionary. Raw or processed structured data. +**Returns**: -Returns: - - Iterator object + + Iterator object ## Parser Information Compatibility: linux diff --git a/docs/parsers/iptables.md b/docs/parsers/iptables.md index 3f3c41fa..ee64a39e 100644 --- a/docs/parsers/iptables.md +++ b/docs/parsers/iptables.md @@ -1,194 +1,206 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.iptables + jc - JSON CLI output utility `iptables` command output parser Supports `-vLn` and `--line-numbers` for all tables. Usage (cli): - $ sudo iptables -L -t nat | jc --iptables +$ sudo iptables -L -t nat | jc --iptables - or +or - $ jc iptables -L -t nat +$ jc iptables -L -t nat Usage (module): - import jc - result = jc.parse('iptables', iptables_command_output) +import jc +result = jc.parse('iptables', iptables_command_output) - or +or - import jc.parsers.iptables - result = jc.parsers.iptables.parse(iptables_command_output) +import jc.parsers.iptables +result = jc.parsers.iptables.parse(iptables_command_output) Schema: - [ - { - "chain": string, - "rules": [ - { - "num" integer, - "pkts": integer, - "bytes": integer, # converted based on suffix - "target": string, - "prot": string, - "opt": string, # "--" = Null - "in": string, - "out": string, - "source": string, - "destination": string, - "options": string - } - ] - } - ] +[ +{ +"chain": string, +"rules": [ +{ +"num" integer, +"pkts": integer, +"bytes": integer, # converted based on suffix +"target": string, +"prot": string, +"opt": string, # "--" = Null +"in": string, +"out": string, +"source": string, +"destination": string, +"options": string +} +] +} +] -Examples: +**Examples**: - $ sudo iptables --line-numbers -v -L -t nat | jc --iptables -p - [ - { - "chain": "PREROUTING", - "rules": [ - { - "num": 1, - "pkts": 2183, - "bytes": 186000, - "target": "PREROUTING_direct", - "prot": "all", - "opt": null, - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere" - }, - { - "num": 2, - "pkts": 2183, - "bytes": 186000, - "target": "PREROUTING_ZONES_SOURCE", - "prot": "all", - "opt": null, - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere" - }, - { - "num": 3, - "pkts": 2183, - "bytes": 186000, - "target": "PREROUTING_ZONES", - "prot": "all", - "opt": null, - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere" - }, - { - "num": 4, - "pkts": 0, - "bytes": 0, - "target": "DOCKER", - "prot": "all", - "opt": null, - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere", - "options": "ADDRTYPE match dst-type LOCAL" - } - ] - }, - ... - ] + + $ sudo iptables --line-numbers -v -L -t nat | jc --iptables -p + [ + { +- `"chain"` - "PREROUTING", +- `"rules"` - [ + { +- `"num"` - 1, +- `"pkts"` - 2183, +- `"bytes"` - 186000, +- `"target"` - "PREROUTING_direct", +- `"prot"` - "all", +- `"opt"` - null, +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere" + }, + { +- `"num"` - 2, +- `"pkts"` - 2183, +- `"bytes"` - 186000, +- `"target"` - "PREROUTING_ZONES_SOURCE", +- `"prot"` - "all", +- `"opt"` - null, +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere" + }, + { +- `"num"` - 3, +- `"pkts"` - 2183, +- `"bytes"` - 186000, +- `"target"` - "PREROUTING_ZONES", +- `"prot"` - "all", +- `"opt"` - null, +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere" + }, + { +- `"num"` - 4, +- `"pkts"` - 0, +- `"bytes"` - 0, +- `"target"` - "DOCKER", +- `"prot"` - "all", +- `"opt"` - null, +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere", +- `"options"` - "ADDRTYPE match dst-type LOCAL" + } + ] + }, + ... + ] + + $ sudo iptables --line-numbers -v -L -t nat | jc --iptables -p -r + [ + { +- `"chain"` - "PREROUTING", +- `"rules"` - [ + { +- `"num"` - "1", +- `"pkts"` - "2183", +- `"bytes"` - "186K", +- `"target"` - "PREROUTING_direct", +- `"prot"` - "all", +- `"opt"` - "--", +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere" + }, + { +- `"num"` - "2", +- `"pkts"` - "2183", +- `"bytes"` - "186K", +- `"target"` - "PREROUTING_ZONES_SOURCE", +- `"prot"` - "all", +- `"opt"` - "--", +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere" + }, + { +- `"num"` - "3", +- `"pkts"` - "2183", +- `"bytes"` - "186K", +- `"target"` - "PREROUTING_ZONES", +- `"prot"` - "all", +- `"opt"` - "--", +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere" + }, + { +- `"num"` - "4", +- `"pkts"` - "0", +- `"bytes"` - "0", +- `"target"` - "DOCKER", +- `"prot"` - "all", +- `"opt"` - "--", +- `"in"` - "any", +- `"out"` - "any", +- `"source"` - "anywhere", +- `"destination"` - "anywhere", +- `"options"` - "ADDRTYPE match dst-type LOCAL" + } + ] + }, + ... + ] - $ sudo iptables --line-numbers -v -L -t nat | jc --iptables -p -r - [ - { - "chain": "PREROUTING", - "rules": [ - { - "num": "1", - "pkts": "2183", - "bytes": "186K", - "target": "PREROUTING_direct", - "prot": "all", - "opt": "--", - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere" - }, - { - "num": "2", - "pkts": "2183", - "bytes": "186K", - "target": "PREROUTING_ZONES_SOURCE", - "prot": "all", - "opt": "--", - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere" - }, - { - "num": "3", - "pkts": "2183", - "bytes": "186K", - "target": "PREROUTING_ZONES", - "prot": "all", - "opt": "--", - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere" - }, - { - "num": "4", - "pkts": "0", - "bytes": "0", - "target": "DOCKER", - "prot": "all", - "opt": "--", - "in": "any", - "out": "any", - "source": "anywhere", - "destination": "anywhere", - "options": "ADDRTYPE match dst-type LOCAL" - } - ] - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/iw_scan.md b/docs/parsers/iw_scan.md index b9932f17..bb2be345 100644 --- a/docs/parsers/iw_scan.md +++ b/docs/parsers/iw_scan.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.iw\_scan -# jc.parsers.iw_scan jc - JSON CLI output utility `iw dev scan` command output parser This parser is considered beta quality. Not all fields are parsed and there @@ -8,145 +10,155 @@ are not enough samples to test. Usage (cli): - $ iw dev wlan0 scan | jc --iw-scan +$ iw dev wlan0 scan | jc --iw-scan - or +or - $ jc iw dev wlan0 scan +$ jc iw dev wlan0 scan Usage (module): - import jc - result = jc.parse('iw_scan', iw_scan_command_output) +import jc +result = jc.parse('iw_scan', iw_scan_command_output) - or +or - import jc.parsers.iw_scan - result = jc.parsers.iw_scan.parse(iw_scan_command_output) +import jc.parsers.iw_scan +result = jc.parsers.iw_scan.parse(iw_scan_command_output) Schema: - [ - { - "foo": string/integer/float, # best guess based on value - "bar": string/integer/float, - "baz": string/integer/float - } - ] +[ +{ +"foo": string/integer/float, # best guess based on value +"bar": string/integer/float, +"baz": string/integer/float +} +] -Examples: +**Examples**: - $ iw dev wlan0 scan | jc --iw-scan -p - [ - { - "bssid": "71:31:72:65:e1:a2", - "interface": "wlan0", - "freq": 2462, - "capability": "ESS Privacy ShortSlotTime (0x0411)", - "ssid": "WLAN-1234", - "supported_rates": [ - 1.0, - 2.0, - 5.5, - 11.0, - 18.0, - 24.0, - 36.0, - 54.0 - ], - "erp": "", - "erp_d4.0": "", - "rsn": "Version: 1", - "group_cipher": "CCMP", - "pairwise_ciphers": "CCMP", - "authentication_suites": "PSK", - "capabilities": "0x186c", - "extended_supported_rates": [ - 6.0, - 9.0, - 12.0, - 48.0 - ], - "ht_rx_mcs_rate_indexes_supported": "0-15", - "primary_channel": 11, - "secondary_channel_offset": "no secondary", - "rifs": 1, - "ht_protection": "no", - "non-gf_present": 1, - "obss_non-gf_present": 0, - "dual_beacon": 0, - "dual_cts_protection": 0, - "stbc_beacon": 0, - "l-sig_txop_prot": 0, - "pco_active": 0, - "pco_phase": 0, - "bss_width_channel_transition_delay_factor": 5, - "extended_capabilities": "HT Information Exchange Supported", - "wmm": "Parameter version 1", - "be": "CW 15-1023, AIFSN 3", - "bk": "CW 15-1023, AIFSN 7", - "vi": "CW 7-15, AIFSN 2, TXOP 3008 usec", - "vo": "CW 3-7, AIFSN 2, TXOP 1504 usec", - "wps": "Version: 1.0", - "wi-fi_protected_setup_state": "2 (Configured)", - "selected_registrar": "0x0", - "response_type": "3 (AP)", - "uuid": "00000000-0000-0003-0000-75317074f1a2", - "manufacturer": "Corporation", - "model": "VGV8539JW", - "model_number": "1.47.000", - "serial_number": "J144024542", - "primary_device_type": "6-0050f204-1", - "device_name": "Wireless Router(WFA)", - "config_methods": "Label, PBC", - "rf_bands": "0x3", - "tsf_usec": 212098649788, - "sta_channel_width_mhz": 20, - "passive_dwell_tus": 20, - "active_dwell_tus": 10, - "channel_width_trigger_scan_interval_s": 300, - "scan_passive_total_per_channel_tus": 200, - "scan_active_total_per_channel_tus": 20, - "beacon_interval_tus": 100, - "signal_dbm": -80.0, - "last_seen_ms": 11420, - "selected_rates": [ - 1.0, - 2.0, - 5.5, - 11.0 - ], - "obss_scan_activity_threshold_percent": 0.25, - "ds_parameter_set_channel": 11, - "max_amsdu_length_bytes": 7935, - "minimum_rx_ampdu_time_spacing_usec": 16 - }, - ... - ] + + $ iw dev wlan0 scan | jc --iw-scan -p + [ + { +- `"bssid"` - "71:31:72:65:e1:a2", +- `"interface"` - "wlan0", +- `"freq"` - 2462, +- `"capability"` - "ESS Privacy ShortSlotTime (0x0411)", +- `"ssid"` - "WLAN-1234", +- `"supported_rates"` - [ + 1.0, + 2.0, + 5.5, + 11.0, + 18.0, + 24.0, + 36.0, + 54.0 + ], +- `"erp"` - "", +- `"erp_d4.0"` - "", +- `"rsn"` - "Version: 1", +- `"group_cipher"` - "CCMP", +- `"pairwise_ciphers"` - "CCMP", +- `"authentication_suites"` - "PSK", +- `"capabilities"` - "0x186c", +- `"extended_supported_rates"` - [ + 6.0, + 9.0, + 12.0, + 48.0 + ], +- `"ht_rx_mcs_rate_indexes_supported"` - "0-15", +- `"primary_channel"` - 11, +- `"secondary_channel_offset"` - "no secondary", +- `"rifs"` - 1, +- `"ht_protection"` - "no", +- `"non-gf_present"` - 1, +- `"obss_non-gf_present"` - 0, +- `"dual_beacon"` - 0, +- `"dual_cts_protection"` - 0, +- `"stbc_beacon"` - 0, +- `"l-sig_txop_prot"` - 0, +- `"pco_active"` - 0, +- `"pco_phase"` - 0, +- `"bss_width_channel_transition_delay_factor"` - 5, +- `"extended_capabilities"` - "HT Information Exchange Supported", +- `"wmm"` - "Parameter version 1", +- `"be"` - "CW 15-1023, AIFSN 3", +- `"bk"` - "CW 15-1023, AIFSN 7", +- `"vi"` - "CW 7-15, AIFSN 2, TXOP 3008 usec", +- `"vo"` - "CW 3-7, AIFSN 2, TXOP 1504 usec", +- `"wps"` - "Version: 1.0", +- `"wi-fi_protected_setup_state"` - "2 (Configured)", +- `"selected_registrar"` - "0x0", +- `"response_type"` - "3 (AP)", +- `"uuid"` - "00000000-0000-0003-0000-75317074f1a2", +- `"manufacturer"` - "Corporation", +- `"model"` - "VGV8539JW", +- `"model_number"` - "1.47.000", +- `"serial_number"` - "J144024542", +- `"primary_device_type"` - "6-0050f204-1", +- `"device_name"` - "Wireless Router(WFA)", +- `"config_methods"` - "Label, PBC", +- `"rf_bands"` - "0x3", +- `"tsf_usec"` - 212098649788, +- `"sta_channel_width_mhz"` - 20, +- `"passive_dwell_tus"` - 20, +- `"active_dwell_tus"` - 10, +- `"channel_width_trigger_scan_interval_s"` - 300, +- `"scan_passive_total_per_channel_tus"` - 200, +- `"scan_active_total_per_channel_tus"` - 20, +- `"beacon_interval_tus"` - 100, +- `"signal_dbm"` - -80.0, +- `"last_seen_ms"` - 11420, +- `"selected_rates"` - [ + 1.0, + 2.0, + 5.5, + 11.0 + ], +- `"obss_scan_activity_threshold_percent"` - 0.25, +- `"ds_parameter_set_channel"` - 11, +- `"max_amsdu_length_bytes"` - 7935, +- `"minimum_rx_ampdu_time_spacing_usec"` - 16 + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/jar_manifest.md b/docs/parsers/jar_manifest.md index b3014594..08efaacd 100644 --- a/docs/parsers/jar_manifest.md +++ b/docs/parsers/jar_manifest.md @@ -1,108 +1,120 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.jar\_manifest -# jc.parsers.jar_manifest jc - JSON CLI output utility `MANIFEST.MF` file parser Usage (cli): - $ cat MANIFEST.MF | jc --jar-manifest +$ cat MANIFEST.MF | jc --jar-manifest Usage (module): - import jc - result = jc.parse('jar_manifest', jar_manifest_file_output) +import jc +result = jc.parse('jar_manifest', jar_manifest_file_output) - or +or - import jc.parsers.jar_manifest - result = jc.parsers.jar_manifest.parse(jar_manifest_file_output) +import jc.parsers.jar_manifest +result = jc.parsers.jar_manifest.parse(jar_manifest_file_output) Schema: - [ - { - "key1": string, - "key2": string - } - ] +[ +{ +"key1": string, +"key2": string +} +] -Examples: +**Examples**: - $ cat MANIFEST.MF | jc --jar-manifest -p - $ unzip -c log4j-core-2.16.0.jar META-INF/MANIFEST.MF | \ - jc --jar-manifest -p - $ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \ - jc --jar-manifest -p + + $ cat MANIFEST.MF | jc --jar-manifest -p + $ unzip -c log4j-core-2.16.0.jar META-INF/MANIFEST.MF | \\ + jc --jar-manifest -p + $ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \\ + jc --jar-manifest -p + + $ cat MANIFEST.MF | jc --jar-manifest -p + [ + { +- `"Import_Package"` - "com.conversantmedia.util.concurrent;resoluti...", +- `"Export_Package"` - "org.apache.logging.log4j.core;uses:=\"org.ap...", +- `"Manifest_Version"` - "1.0", +- `"Bundle_License"` - "https://www.apache.org/licenses/LICENSE-2.0.txt", +- `"Bundle_SymbolicName"` - "org.apache.logging.log4j.core", +- `"Built_By"` - "matt", +- `"Bnd_LastModified"` - "1639373735804", +- `"Implementation_Vendor_Id"` - "org.apache.logging.log4j", +- `"Specification_Title"` - "Apache Log4j Core", +- `"Log4jReleaseManager"` - "Matt Sicker", + ... + } + ] + + $ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \\ + jc --jar-manifest -p + [ + ... + { +- `"Archive"` - "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-so...", +- `"Manifest_Version"` - "1.0", +- `"Built_By"` - "matt", +- `"Created_By"` - "Apache Maven 3.8.4", +- `"Build_Jdk"` - "1.8.0_312" + }, + { +- `"Archive"` - "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-ja...", +- `"Manifest_Version"` - "1.0", +- `"Built_By"` - "matt", +- `"Created_By"` - "Apache Maven 3.8.4", +- `"Build_Jdk"` - "1.8.0_312" + }, + { +- `"Bundle_SymbolicName"` - "org.apache.logging.log4j.spring-cloud-c...", +- `"Export_Package"` - "org.apache.logging.log4j.spring.cloud.config...", +- `"Archive"` - "apache-log4j-2.16.0-bin/log4j-spring-cloud-config-c...", +- `"Manifest_Version"` - "1.0", +- `"Bundle_License"` - "https://www.apache.org/licenses/LICENSE-2.0.txt", + ... + } + ... + ] - $ cat MANIFEST.MF | jc --jar-manifest -p - [ - { - "Import_Package": "com.conversantmedia.util.concurrent;resoluti...", - "Export_Package": "org.apache.logging.log4j.core;uses:="org.ap...", - "Manifest_Version": "1.0", - "Bundle_License": "https://www.apache.org/licenses/LICENSE-2.0.txt", - "Bundle_SymbolicName": "org.apache.logging.log4j.core", - "Built_By": "matt", - "Bnd_LastModified": "1639373735804", - "Implementation_Vendor_Id": "org.apache.logging.log4j", - "Specification_Title": "Apache Log4j Core", - "Log4jReleaseManager": "Matt Sicker", - ... - } - ] + - $ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \ - jc --jar-manifest -p - [ - ... - { - "Archive": "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-so...", - "Manifest_Version": "1.0", - "Built_By": "matt", - "Created_By": "Apache Maven 3.8.4", - "Build_Jdk": "1.8.0_312" - }, - { - "Archive": "apache-log4j-2.16.0-bin/log4j-spring-boot-2.16.0-ja...", - "Manifest_Version": "1.0", - "Built_By": "matt", - "Created_By": "Apache Maven 3.8.4", - "Build_Jdk": "1.8.0_312" - }, - { - "Bundle_SymbolicName": "org.apache.logging.log4j.spring-cloud-c...", - "Export_Package": "org.apache.logging.log4j.spring.cloud.config...", - "Archive": "apache-log4j-2.16.0-bin/log4j-spring-cloud-config-c...", - "Manifest_Version": "1.0", - "Bundle_License": "https://www.apache.org/licenses/LICENSE-2.0.txt", - ... - } - ... - ] +## info Objects - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/jobs.md b/docs/parsers/jobs.md index 2810277c..088fb678 100644 --- a/docs/parsers/jobs.md +++ b/docs/parsers/jobs.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.jobs + jc - JSON CLI output utility `jobs` command output parser Also supports the `-l` option. @@ -10,115 +12,125 @@ builtin. Usage (cli): - $ jobs | jc --jobs +$ jobs | jc --jobs Usage (module): - import jc - result = jc.parse('jobs', jobs_command_output) +import jc +result = jc.parse('jobs', jobs_command_output) - or +or - import jc.parsers.jobs - result = jc.parsers.jobs.parse(jobs_command_output) +import jc.parsers.jobs +result = jc.parsers.jobs.parse(jobs_command_output) Schema: - [ - { - "job_number": integer, - "pid": integer, - "history": string, - "status": string, - "command": string - } - ] +[ +{ +"job_number": integer, +"pid": integer, +"history": string, +"status": string, +"command": string +} +] -Example: +**Example**: - $ jobs -l | jc --jobs -p - [ - { - "job_number": 1, - "pid": 5283, - "status": "Running", - "command": "sleep 10000 &" - }, - { - "job_number": 2, - "pid": 5284, - "status": "Running", - "command": "sleep 10100 &" - }, - { - "job_number": 3, - "pid": 5285, - "history": "previous", - "status": "Running", - "command": "sleep 10001 &" - }, - { - "job_number": 4, - "pid": 5286, - "history": "current", - "status": "Running", - "command": "sleep 10112 &" - } - ] + + $ jobs -l | jc --jobs -p + [ + { +- `"job_number"` - 1, +- `"pid"` - 5283, +- `"status"` - "Running", +- `"command"` - "sleep 10000 &" + }, + { +- `"job_number"` - 2, +- `"pid"` - 5284, +- `"status"` - "Running", +- `"command"` - "sleep 10100 &" + }, + { +- `"job_number"` - 3, +- `"pid"` - 5285, +- `"history"` - "previous", +- `"status"` - "Running", +- `"command"` - "sleep 10001 &" + }, + { +- `"job_number"` - 4, +- `"pid"` - 5286, +- `"history"` - "current", +- `"status"` - "Running", +- `"command"` - "sleep 10112 &" + } + ] + + $ jobs -l | jc --jobs -p -r + [ + { +- `"job_number"` - "1", +- `"pid"` - "19510", +- `"status"` - "Running", +- `"command"` - "sleep 1000 &" + }, + { +- `"job_number"` - "2", +- `"pid"` - "19511", +- `"status"` - "Running", +- `"command"` - "sleep 1001 &" + }, + { +- `"job_number"` - "3", +- `"pid"` - "19512", +- `"history"` - "previous", +- `"status"` - "Running", +- `"command"` - "sleep 1002 &" + }, + { +- `"job_number"` - "4", +- `"pid"` - "19513", +- `"history"` - "current", +- `"status"` - "Running", +- `"command"` - "sleep 1003 &" + } + ] - $ jobs -l | jc --jobs -p -r - [ - { - "job_number": "1", - "pid": "19510", - "status": "Running", - "command": "sleep 1000 &" - }, - { - "job_number": "2", - "pid": "19511", - "status": "Running", - "command": "sleep 1001 &" - }, - { - "job_number": "3", - "pid": "19512", - "history": "previous", - "status": "Running", - "command": "sleep 1002 &" - }, - { - "job_number": "4", - "pid": "19513", - "history": "current", - "status": "Running", - "command": "sleep 1003 &" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/kv.md b/docs/parsers/kv.md index 391a82a4..82d53ad5 100644 --- a/docs/parsers/kv.md +++ b/docs/parsers/kv.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.kv + jc - JSON CLI output utility `Key/Value` file parser Supports files containing simple key/value pairs. Delimiter can be `=` or @@ -13,74 +15,84 @@ command-line argument or the `raw=True` argument in `parse()`. Usage (cli): - $ cat foo.txt | jc --kv +$ cat foo.txt | jc --kv Usage (module): - import jc - result = jc.parse('kv', kv_file_output) +import jc +result = jc.parse('kv', kv_file_output) - or +or - import jc.parsers.kv - result = jc.parsers.kv.parse(kv_file_output) +import jc.parsers.kv +result = jc.parsers.kv.parse(kv_file_output) Schema: - key/value document converted to a dictionary - see the - configparser standard library documentation for more details. +key/value document converted to a dictionary - see the +configparser standard library documentation for more details. - { - "key1": string, - "key2": string - } +{ +"key1": string, +"key2": string +} -Examples: +**Examples**: - $ cat keyvalue.txt - # this file contains key/value pairs - name = John Doe - address=555 California Drive - age: 34 - ; comments can include # or ; - # delimiter can be = or : - # quoted values have quotation marks stripped by default - # but can be preserved with the -r argument - occupation:"Engineer" + + $ cat keyvalue.txt + # this file contains key/value pairs + name = John Doe + address=555 California Drive +- `age` - 34 + ; comments can include # or ; + # delimiter can be = or : + # quoted values have quotation marks stripped by default + # but can be preserved with the -r argument + occupation:"Engineer" + + $ cat keyvalue.txt | jc --kv -p + { +- `"name"` - "John Doe", +- `"address"` - "555 California Drive", +- `"age"` - "34", +- `"occupation"` - "Engineer" + } - $ cat keyvalue.txt | jc --kv -p - { - "name": "John Doe", - "address": "555 California Drive", - "age": "34", - "occupation": "Engineer" - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function - Note: this is just a wrapper for jc.parsers.ini +Note: this is just a wrapper for jc.parsers.ini -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary representing the key/value file + + Dictionary representing the key/value file ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/last.md b/docs/parsers/last.md index 75ac2eea..9163bc94 100644 --- a/docs/parsers/last.md +++ b/docs/parsers/last.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.last + jc - JSON CLI output utility `last` and `lastb` command output parser Supports `-w` and `-F` options. @@ -11,126 +13,135 @@ system the parser is run on) since there is no timezone information in the Usage (cli): - $ last | jc --last +$ last | jc --last - or +or - $ jc last +$ jc last Usage (module): - import jc - result = jc.parse('last', last_command_output) +import jc +result = jc.parse('last', last_command_output) - or +or - import jc.parsers.last - result = jc.parsers.last.parse(last_command_output) +import jc.parsers.last +result = jc.parsers.last.parse(last_command_output) Schema: - [ - { - "user": string, - "tty": string, - "hostname": string, - "login": string, - "logout": string, - "duration": string, - "login_epoch": integer, # (naive) available w/last -F option - "logout_epoch": integer, # (naive) available w/last -F option - "duration_seconds": integer # available w/last -F option - } - ] +[ +{ +"user": string, +"tty": string, +"hostname": string, +"login": string, +"logout": string, +"duration": string, +"login_epoch": integer, # (naive) available w/last -F option +"logout_epoch": integer, # (naive) available w/last -F option +"duration_seconds": integer # available w/last -F option +} +] -Examples: +**Examples**: - $ last -F | jc --last -p - [ - { - "user": "kbrazil", - "tty": "ttys002", - "hostname": null, - "login": "Mon Dec 28 17:24:10 2020", - "logout": "still logged in" - }, - { - "user": "kbrazil", - "tty": "ttys003", - "hostname": null, - "login": "Mon Dec 28 17:24:10 2020", - "logout": "Mon Dec 28 17:25:01 2020", - "duration": "00:00", - "login_epoch": 1565891826, - "logout_epoch": 1565895404, - "duration_seconds": 3578 - }, - { - "user": "kbrazil", - "tty": "ttys003", - "hostname": null, - "login": "Mon Dec 28 17:24:10 2020", - "logout": "Mon Dec 28 17:25:01 2020", - "duration": "00:00", - "login_epoch": 1565891826, - "logout_epoch": 1565895404, - "duration_seconds": 3578 - }, - ... - ] + + $ last -F | jc --last -p + [ + { +- `"user"` - "kbrazil", +- `"tty"` - "ttys002", +- `"hostname"` - null, +- `"login"` - "Mon Dec 28 17:24:10 2020", +- `"logout"` - "still logged in" + }, + { +- `"user"` - "kbrazil", +- `"tty"` - "ttys003", +- `"hostname"` - null, +- `"login"` - "Mon Dec 28 17:24:10 2020", +- `"logout"` - "Mon Dec 28 17:25:01 2020", +- `"duration"` - "00:00", +- `"login_epoch"` - 1565891826, +- `"logout_epoch"` - 1565895404, +- `"duration_seconds"` - 3578 + }, + { +- `"user"` - "kbrazil", +- `"tty"` - "ttys003", +- `"hostname"` - null, +- `"login"` - "Mon Dec 28 17:24:10 2020", +- `"logout"` - "Mon Dec 28 17:25:01 2020", +- `"duration"` - "00:00", +- `"login_epoch"` - 1565891826, +- `"logout_epoch"` - 1565895404, +- `"duration_seconds"` - 3578 + }, + ... + ] + + $ last | jc --last -p -r + [ + { +- `"user"` - "kbrazil", +- `"tty"` - "ttys002", +- `"hostname"` - "-", +- `"login"` - "Thu Feb 27 14:31", +- `"logout"` - "still_logged_in" + }, + { +- `"user"` - "kbrazil", +- `"tty"` - "ttys003", +- `"hostname"` - "-", +- `"login"` - "Thu Feb 27 10:38", +- `"logout"` - "10:38", +- `"duration"` - "00:00" + }, + { +- `"user"` - "kbrazil", +- `"tty"` - "ttys003", +- `"hostname"` - "-", +- `"login"` - "Thu Feb 27 10:18", +- `"logout"` - "10:18", +- `"duration"` - "00:00" + }, + ... + ] - $ last | jc --last -p -r - [ - { - "user": "kbrazil", - "tty": "ttys002", - "hostname": "-", - "login": "Thu Feb 27 14:31", - "logout": "still_logged_in" - }, - { - "user": "kbrazil", - "tty": "ttys003", - "hostname": "-", - "login": "Thu Feb 27 10:38", - "logout": "10:38", - "duration": "00:00" - }, - { - "user": "kbrazil", - "tty": "ttys003", - "hostname": "-", - "login": "Thu Feb 27 10:18", - "logout": "10:18", - "duration": "00:00" - }, - ... - ] + +## info Objects - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/ls.md b/docs/parsers/ls.md index 67bc7199..519e4d6e 100644 --- a/docs/parsers/ls.md +++ b/docs/parsers/ls.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ls + jc - JSON CLI output utility `ls` and `vdir` command output parser Options supported: @@ -21,127 +23,137 @@ available if the timezone field is UTC. Usage (cli): - $ ls | jc --ls +$ ls | jc --ls - or +or - $ jc ls +$ jc ls Usage (module): - import jc - result = jc.parse('ls', ls_command_output) +import jc +result = jc.parse('ls', ls_command_output) - or +or - import jc.parsers.ls - result = jc.parsers.ls.parse(ls_command_output) +import jc.parsers.ls +result = jc.parsers.ls.parse(ls_command_output) Schema: - [ - { - "filename": string, - "flags": string, - "links": integer, - "parent": string, - "owner": string, - "group": string, - "size": integer, - "date": string, - "epoch": integer, # [0] - "epoch_utc": integer # [1] - } - ] +[ +{ +"filename": string, +"flags": string, +"links": integer, +"parent": string, +"owner": string, +"group": string, +"size": integer, +"date": string, +"epoch": integer, # [0] +"epoch_utc": integer # [1] +} +] - [0] naive timestamp if date field exists and can be converted. - [1] timezone aware timestamp if date field is in UTC and can - be converted. +[0] naive timestamp if date field exists and can be converted. +[1] timezone aware timestamp if date field is in UTC and can +be converted. -Examples: +**Examples**: - $ ls /usr/bin | jc --ls -p - [ - { - "filename": "apropos" - }, - { - "filename": "arch" - }, - ... - ] + + $ ls /usr/bin | jc --ls -p + [ + { +- `"filename"` - "apropos" + }, + { +- `"filename"` - "arch" + }, + ... + ] + + $ ls -l /usr/bin | jc --ls -p + [ + { +- `"filename"` - "apropos", +- `"link_to"` - "whatis", +- `"flags"` - "lrwxrwxrwx.", +- `"links"` - 1, +- `"owner"` - "root", +- `"group"` - "root", +- `"size"` - 6, +- `"date"` - "Aug 15 10:53" + }, + { +- `"filename"` - "ar", +- `"flags"` - "-rwxr-xr-x.", +- `"links"` - 1, +- `"owner"` - "root", +- `"group"` - "root", +- `"size"` - 62744, +- `"date"` - "Aug 8 16:14" + }, + ... + ] + + $ ls -l /usr/bin | jc --ls -p -r + [ + { +- `"filename"` - "apropos", +- `"link_to"` - "whatis", +- `"flags"` - "lrwxrwxrwx.", +- `"links"` - "1", +- `"owner"` - "root", +- `"group"` - "root", +- `"size"` - "6", +- `"date"` - "Aug 15 10:53" + }, + { +- `"filename"` - "arch", +- `"flags"` - "-rwxr-xr-x.", +- `"links"` - "1", +- `"owner"` - "root", +- `"group"` - "root", +- `"size"` - "33080", +- `"date"` - "Aug 19 23:25" + }, + ... + ] - $ ls -l /usr/bin | jc --ls -p - [ - { - "filename": "apropos", - "link_to": "whatis", - "flags": "lrwxrwxrwx.", - "links": 1, - "owner": "root", - "group": "root", - "size": 6, - "date": "Aug 15 10:53" - }, - { - "filename": "ar", - "flags": "-rwxr-xr-x.", - "links": 1, - "owner": "root", - "group": "root", - "size": 62744, - "date": "Aug 8 16:14" - }, - ... - ] + - $ ls -l /usr/bin | jc --ls -p -r - [ - { - "filename": "apropos", - "link_to": "whatis", - "flags": "lrwxrwxrwx.", - "links": "1", - "owner": "root", - "group": "root", - "size": "6", - "date": "Aug 15 10:53" - }, - { - "filename": "arch", - "flags": "-rwxr-xr-x.", - "links": "1", - "owner": "root", - "group": "root", - "size": "33080", - "date": "Aug 19 23:25" - }, - ... - ] +## info Objects - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/ls_s.md b/docs/parsers/ls_s.md index 6a4374cf..38cdd127 100644 --- a/docs/parsers/ls_s.md +++ b/docs/parsers/ls_s.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.ls\_s -# jc.parsers.ls_s jc - JSON CLI output utility `ls` and `vdir` command output streaming parser @@ -20,96 +22,108 @@ available if the timezone field is UTC. Usage (cli): - $ ls | jc --ls-s +$ ls | jc --ls-s Usage (module): - import jc - # result is an iterable object (generator) - result = jc.parse('ls_s', ls_command_output.splitlines()) - for item in result: - # do something +import jc +# result is an iterable object (generator) +result = jc.parse('ls_s', ls_command_output.splitlines()) +for item in result: +# do something - or +or - import jc.parsers.ls_s - # result is an iterable object (generator) - result = jc.parsers.ls_s.parse(ls_command_output.splitlines()) - for item in result: - # do something +import jc.parsers.ls_s +# result is an iterable object (generator) +result = jc.parsers.ls_s.parse(ls_command_output.splitlines()) +for item in result: +# do something Schema: - { - "filename": string, - "flags": string, - "links": integer, - "parent": string, - "owner": string, - "group": string, - "size": integer, - "date": string, - "epoch": integer, # [0] - "epoch_utc": integer, # [1] +{ +"filename": string, +"flags": string, +"links": integer, +"parent": string, +"owner": string, +"group": string, +"size": integer, +"date": string, +"epoch": integer, # [0] +"epoch_utc": integer, # [1] - # Below object only exists if using -qq or ignore_exceptions=True +# Below object only exists if using -qq or ignore_exceptions=True - "_jc_meta": - { - "success": boolean, # false if error parsing - "error": string, # exists if "success" is false - "line": string # exists if "success" is false - } - } +"_jc_meta": +{ +"success": boolean, # false if error parsing +"error": string, # exists if "success" is false +"line": string # exists if "success" is false +} +} - [0] naive timestamp if date field exists and can be converted. - [1] timezone aware timestamp if date field is in UTC and can - be converted +[0] naive timestamp if date field exists and can be converted. +[1] timezone aware timestamp if date field is in UTC and can +be converted -Examples: +**Examples**: - $ ls -l /usr/bin | jc --ls-s - {"filename":"2to3-","flags":"-rwxr-xr-x","links":4,"owner":"root","...} - {"filename":"2to3-2.7","link_to":"../../System/Library/Frameworks/P...} - {"filename":"AssetCacheLocatorUtil","flags":"-rwxr-xr-x","links":1,...} - ... + + $ ls -l /usr/bin | jc --ls-s + {"filename":"2to3-","flags":"-rwxr-xr-x","links":4,"owner":"root","...} + {"filename":"2to3-2.7","link_to":"../../System/Library/Frameworks/P...} + {"filename":"AssetCacheLocatorUtil","flags":"-rwxr-xr-x","links":1,...} + ... + + $ ls -l /usr/bin | jc --ls-s -r + {"filename":"2to3-","flags":"-rwxr-xr-x","links":"4","owner":"roo"..."} + {"filename":"2to3-2.7","link_to":"../../System/Library/Frameworks/P...} + {"filename":"AssetCacheLocatorUtil","flags":"-rwxr-xr-x","links":"1...} + ... - $ ls -l /usr/bin | jc --ls-s -r - {"filename":"2to3-","flags":"-rwxr-xr-x","links":"4","owner":"roo"..."} - {"filename":"2to3-2.7","link_to":"../../System/Library/Frameworks/P...} - {"filename":"AssetCacheLocatorUtil","flags":"-rwxr-xr-x","links":"1...} - ... + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False, ignore_exceptions=False) +def parse(data, raw=False, quiet=False, ignore_exceptions=False) ``` Main text parsing generator function. Returns an iterator object. -Parameters: +**Arguments**: - data: (iterable) line-based text data to parse - (e.g. sys.stdin or str.splitlines()) + +- `data` - (iterable) line-based text data to parse + (e.g. sys.stdin or str.splitlines()) + +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True +- `ignore_exceptions` - (boolean) ignore parsing exceptions if True + - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True - ignore_exceptions: (boolean) ignore parsing exceptions if True +**Yields**: -Yields: + + Dictionary. Raw or processed structured data. + - Dictionary. Raw or processed structured data. +**Returns**: -Returns: - - Iterator object + + Iterator object ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/lsblk.md b/docs/parsers/lsblk.md index 265593ab..bad00f88 100644 --- a/docs/parsers/lsblk.md +++ b/docs/parsers/lsblk.md @@ -1,305 +1,317 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.lsblk + jc - JSON CLI output utility `lsblk` command output parser Usage (cli): - $ lsblk | jc --lsblk +$ lsblk | jc --lsblk - or +or - $ jc lsblk +$ jc lsblk Usage (module): - import jc - result = jc.parse('lsblk', lsblk_command_output) +import jc +result = jc.parse('lsblk', lsblk_command_output) - or +or - import jc.parsers.lsblk - result = jc.parsers.lsblk.parse(lsblk_command_output) +import jc.parsers.lsblk +result = jc.parsers.lsblk.parse(lsblk_command_output) Schema: - [ - { - "name": string, - "maj_min": string, - "rm": boolean, - "size": string, - "ro": boolean, - "type": string, - "mountpoint": string, - "kname": string, - "fstype": string, - "label": string, - "uuid": string, - "partlabel": string, - "partuuid": string, - "ra": integer, - "model": string, - "serial": string, - "state": string, - "owner": string, - "group": string, - "mode": string, - "alignment": integer, - "min_io": integer, - "opt_io": integer, - "phy_sec": integer, - "log_sec": integer, - "rota": boolean, - "sched": string, - "rq_size": integer, - "disc_aln": integer, - "disc_gran": string, - "disc_max": string, - "disc_zero": boolean, - "wsame": string, - "wwn": string, - "rand": boolean, - "pkname": string, - "hctl": string, - "tran": string, - "rev": string, - "vendor": string - } - ] +[ +{ +"name": string, +"maj_min": string, +"rm": boolean, +"size": string, +"ro": boolean, +"type": string, +"mountpoint": string, +"kname": string, +"fstype": string, +"label": string, +"uuid": string, +"partlabel": string, +"partuuid": string, +"ra": integer, +"model": string, +"serial": string, +"state": string, +"owner": string, +"group": string, +"mode": string, +"alignment": integer, +"min_io": integer, +"opt_io": integer, +"phy_sec": integer, +"log_sec": integer, +"rota": boolean, +"sched": string, +"rq_size": integer, +"disc_aln": integer, +"disc_gran": string, +"disc_max": string, +"disc_zero": boolean, +"wsame": string, +"wwn": string, +"rand": boolean, +"pkname": string, +"hctl": string, +"tran": string, +"rev": string, +"vendor": string +} +] -Examples: +**Examples**: - $ lsblk | jc --lsblk -p - [ - { - "name": "sda", - "maj_min": "8:0", - "rm": false, - "size": "20G", - "ro": false, - "type": "disk", - "mountpoint": null - }, - { - "name": "sda1", - "maj_min": "8:1", - "rm": false, - "size": "1G", - "ro": false, - "type": "part", - "mountpoint": "/boot" - }, - ... - ] + + $ lsblk | jc --lsblk -p + [ + { +- `"name"` - "sda", +- `"maj_min"` - "8:0", +- `"rm"` - false, +- `"size"` - "20G", +- `"ro"` - false, +- `"type"` - "disk", +- `"mountpoint"` - null + }, + { +- `"name"` - "sda1", +- `"maj_min"` - "8:1", +- `"rm"` - false, +- `"size"` - "1G", +- `"ro"` - false, +- `"type"` - "part", +- `"mountpoint"` - "/boot" + }, + ... + ] + + $ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\\ + STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\\ + SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\\ + PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p + [ + { +- `"name"` - "sda", +- `"maj_min"` - "8:0", +- `"rm"` - false, +- `"size"` - "20G", +- `"ro"` - false, +- `"type"` - "disk", +- `"mountpoint"` - null, +- `"kname"` - "sda", +- `"fstype"` - null, +- `"label"` - null, +- `"uuid"` - null, +- `"partlabel"` - null, +- `"partuuid"` - null, +- `"ra"` - 4096, +- `"model"` - "VMware Virtual S", +- `"serial"` - null, +- `"state"` - "running", +- `"owner"` - "root", +- `"group"` - "disk", +- `"mode"` - "brw-rw----", +- `"alignment"` - 0, +- `"min_io"` - 512, +- `"opt_io"` - 0, +- `"phy_sec"` - 512, +- `"log_sec"` - 512, +- `"rota"` - true, +- `"sched"` - "deadline", +- `"rq_size"` - 128, +- `"disc_aln"` - 0, +- `"disc_gran"` - "0B", +- `"disc_max"` - "0B", +- `"disc_zero"` - false, +- `"wsame"` - "32M", +- `"wwn"` - null, +- `"rand"` - true, +- `"pkname"` - null, +- `"hctl"` - "0:0:0:0", +- `"tran"` - "spi", +- `"rev"` - "1.0", +- `"vendor"` - "VMware," + }, + { +- `"name"` - "sda1", +- `"maj_min"` - "8:1", +- `"rm"` - false, +- `"size"` - "1G", +- `"ro"` - false, +- `"type"` - "part", +- `"mountpoint"` - "/boot", +- `"kname"` - "sda1", +- `"fstype"` - "xfs", +- `"label"` - null, +- `"uuid"` - "05d927bb-5875-49e3-ada1-7f46cb31c932", +- `"partlabel"` - null, +- `"partuuid"` - null, +- `"ra"` - 4096, +- `"model"` - null, +- `"serial"` - null, +- `"state"` - null, +- `"owner"` - "root", +- `"group"` - "disk", +- `"mode"` - "brw-rw----", +- `"alignment"` - 0, +- `"min_io"` - 512, +- `"opt_io"` - 0, +- `"phy_sec"` - 512, +- `"log_sec"` - 512, +- `"rota"` - true, +- `"sched"` - "deadline", +- `"rq_size"` - 128, +- `"disc_aln"` - 0, +- `"disc_gran"` - "0B", +- `"disc_max"` - "0B", +- `"disc_zero"` - false, +- `"wsame"` - "32M", +- `"wwn"` - null, +- `"rand"` - true, +- `"pkname"` - "sda", +- `"hctl"` - null, +- `"tran"` - null, +- `"rev"` - null, +- `"vendor"` - null + }, + ... + ] + + $ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\\ + STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\\ + SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\\ + PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p -r + [ + { +- `"name"` - "sda", +- `"maj_min"` - "8:0", +- `"rm"` - "0", +- `"size"` - "20G", +- `"ro"` - "0", +- `"type"` - "disk", +- `"mountpoint"` - null, +- `"kname"` - "sda", +- `"fstype"` - null, +- `"label"` - null, +- `"uuid"` - null, +- `"partlabel"` - null, +- `"partuuid"` - null, +- `"ra"` - "4096", +- `"model"` - "VMware Virtual S", +- `"serial"` - null, +- `"state"` - "running", +- `"owner"` - "root", +- `"group"` - "disk", +- `"mode"` - "brw-rw----", +- `"alignment"` - "0", +- `"min_io"` - "512", +- `"opt_io"` - "0", +- `"phy_sec"` - "512", +- `"log_sec"` - "512", +- `"rota"` - "1", +- `"sched"` - "deadline", +- `"rq_size"` - "128", +- `"disc_aln"` - "0", +- `"disc_gran"` - "0B", +- `"disc_max"` - "0B", +- `"disc_zero"` - "0", +- `"wsame"` - "32M", +- `"wwn"` - null, +- `"rand"` - "1", +- `"pkname"` - null, +- `"hctl"` - "0:0:0:0", +- `"tran"` - "spi", +- `"rev"` - "1.0", +- `"vendor"` - "VMware," + }, + { +- `"name"` - "sda1", +- `"maj_min"` - "8:1", +- `"rm"` - "0", +- `"size"` - "1G", +- `"ro"` - "0", +- `"type"` - "part", +- `"mountpoint"` - "/boot", +- `"kname"` - "sda1", +- `"fstype"` - "xfs", +- `"label"` - null, +- `"uuid"` - "05d927bb-5875-49e3-ada1-7f46cb31c932", +- `"partlabel"` - null, +- `"partuuid"` - null, +- `"ra"` - "4096", +- `"model"` - null, +- `"serial"` - null, +- `"state"` - null, +- `"owner"` - "root", +- `"group"` - "disk", +- `"mode"` - "brw-rw----", +- `"alignment"` - "0", +- `"min_io"` - "512", +- `"opt_io"` - "0", +- `"phy_sec"` - "512", +- `"log_sec"` - "512", +- `"rota"` - "1", +- `"sched"` - "deadline", +- `"rq_size"` - "128", +- `"disc_aln"` - "0", +- `"disc_gran"` - "0B", +- `"disc_max"` - "0B", +- `"disc_zero"` - "0", +- `"wsame"` - "32M", +- `"wwn"` - null, +- `"rand"` - "1", +- `"pkname"` - "sda", +- `"hctl"` - null, +- `"tran"` - null, +- `"rev"` - null, +- `"vendor"` - null + }, + ... + ] - $ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\ - STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\ - SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\ - PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p - [ - { - "name": "sda", - "maj_min": "8:0", - "rm": false, - "size": "20G", - "ro": false, - "type": "disk", - "mountpoint": null, - "kname": "sda", - "fstype": null, - "label": null, - "uuid": null, - "partlabel": null, - "partuuid": null, - "ra": 4096, - "model": "VMware Virtual S", - "serial": null, - "state": "running", - "owner": "root", - "group": "disk", - "mode": "brw-rw----", - "alignment": 0, - "min_io": 512, - "opt_io": 0, - "phy_sec": 512, - "log_sec": 512, - "rota": true, - "sched": "deadline", - "rq_size": 128, - "disc_aln": 0, - "disc_gran": "0B", - "disc_max": "0B", - "disc_zero": false, - "wsame": "32M", - "wwn": null, - "rand": true, - "pkname": null, - "hctl": "0:0:0:0", - "tran": "spi", - "rev": "1.0", - "vendor": "VMware," - }, - { - "name": "sda1", - "maj_min": "8:1", - "rm": false, - "size": "1G", - "ro": false, - "type": "part", - "mountpoint": "/boot", - "kname": "sda1", - "fstype": "xfs", - "label": null, - "uuid": "05d927bb-5875-49e3-ada1-7f46cb31c932", - "partlabel": null, - "partuuid": null, - "ra": 4096, - "model": null, - "serial": null, - "state": null, - "owner": "root", - "group": "disk", - "mode": "brw-rw----", - "alignment": 0, - "min_io": 512, - "opt_io": 0, - "phy_sec": 512, - "log_sec": 512, - "rota": true, - "sched": "deadline", - "rq_size": 128, - "disc_aln": 0, - "disc_gran": "0B", - "disc_max": "0B", - "disc_zero": false, - "wsame": "32M", - "wwn": null, - "rand": true, - "pkname": "sda", - "hctl": null, - "tran": null, - "rev": null, - "vendor": null - }, - ... - ] + - $ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\ - STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\ - SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\ - PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p -r - [ - { - "name": "sda", - "maj_min": "8:0", - "rm": "0", - "size": "20G", - "ro": "0", - "type": "disk", - "mountpoint": null, - "kname": "sda", - "fstype": null, - "label": null, - "uuid": null, - "partlabel": null, - "partuuid": null, - "ra": "4096", - "model": "VMware Virtual S", - "serial": null, - "state": "running", - "owner": "root", - "group": "disk", - "mode": "brw-rw----", - "alignment": "0", - "min_io": "512", - "opt_io": "0", - "phy_sec": "512", - "log_sec": "512", - "rota": "1", - "sched": "deadline", - "rq_size": "128", - "disc_aln": "0", - "disc_gran": "0B", - "disc_max": "0B", - "disc_zero": "0", - "wsame": "32M", - "wwn": null, - "rand": "1", - "pkname": null, - "hctl": "0:0:0:0", - "tran": "spi", - "rev": "1.0", - "vendor": "VMware," - }, - { - "name": "sda1", - "maj_min": "8:1", - "rm": "0", - "size": "1G", - "ro": "0", - "type": "part", - "mountpoint": "/boot", - "kname": "sda1", - "fstype": "xfs", - "label": null, - "uuid": "05d927bb-5875-49e3-ada1-7f46cb31c932", - "partlabel": null, - "partuuid": null, - "ra": "4096", - "model": null, - "serial": null, - "state": null, - "owner": "root", - "group": "disk", - "mode": "brw-rw----", - "alignment": "0", - "min_io": "512", - "opt_io": "0", - "phy_sec": "512", - "log_sec": "512", - "rota": "1", - "sched": "deadline", - "rq_size": "128", - "disc_aln": "0", - "disc_gran": "0B", - "disc_max": "0B", - "disc_zero": "0", - "wsame": "32M", - "wwn": null, - "rand": "1", - "pkname": "sda", - "hctl": null, - "tran": null, - "rev": null, - "vendor": null - }, - ... - ] +## info Objects - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/lsmod.md b/docs/parsers/lsmod.md index 2cb65ce4..fa1523b1 100644 --- a/docs/parsers/lsmod.md +++ b/docs/parsers/lsmod.md @@ -1,156 +1,168 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.lsmod + jc - JSON CLI output utility `lsmod` command output parser Usage (cli): - $ lsmod | jc --lsmod +$ lsmod | jc --lsmod - or +or - $ jc lsmod +$ jc lsmod Usage (module): - import jc - result = jc.parse('lsmod', lsmod_command_output) +import jc +result = jc.parse('lsmod', lsmod_command_output) - or +or - import jc.parsers.lsmod - result = jc.parsers.lsmod.parse(lsmod_command_output) +import jc.parsers.lsmod +result = jc.parsers.lsmod.parse(lsmod_command_output) Schema: - [ - { - "module": string, - "size": integer, - "used": integer, - "by": [ - string - ] - } - ] +[ +{ +"module": string, +"size": integer, +"used": integer, +"by": [ +string +] +} +] -Examples: +**Examples**: - $ lsmod | jc --lsmod -p - [ - ... - { - "module": "nf_nat", - "size": 26583, - "used": 3, - "by": [ - "nf_nat_ipv4", - "nf_nat_ipv6", - "nf_nat_masquerade_ipv4" - ] - }, - { - "module": "iptable_mangle", - "size": 12695, - "used": 1 - }, - { - "module": "iptable_security", - "size": 12705, - "used": 1 - }, - { - "module": "iptable_raw", - "size": 12678, - "used": 1 - }, - { - "module": "nf_conntrack", - "size": 139224, - "used": 7, - "by": [ - "nf_nat", - "nf_nat_ipv4", - "nf_nat_ipv6", - "xt_conntrack", - "nf_nat_masquerade_ipv4", - "nf_conntrack_ipv4", - "nf_conntrack_ipv6" - ] - }, - ... - ] + + $ lsmod | jc --lsmod -p + [ + ... + { +- `"module"` - "nf_nat", +- `"size"` - 26583, +- `"used"` - 3, +- `"by"` - [ + "nf_nat_ipv4", + "nf_nat_ipv6", + "nf_nat_masquerade_ipv4" + ] + }, + { +- `"module"` - "iptable_mangle", +- `"size"` - 12695, +- `"used"` - 1 + }, + { +- `"module"` - "iptable_security", +- `"size"` - 12705, +- `"used"` - 1 + }, + { +- `"module"` - "iptable_raw", +- `"size"` - 12678, +- `"used"` - 1 + }, + { +- `"module"` - "nf_conntrack", +- `"size"` - 139224, +- `"used"` - 7, +- `"by"` - [ + "nf_nat", + "nf_nat_ipv4", + "nf_nat_ipv6", + "xt_conntrack", + "nf_nat_masquerade_ipv4", + "nf_conntrack_ipv4", + "nf_conntrack_ipv6" + ] + }, + ... + ] + + $ lsmod | jc --lsmod -p -r + [ + ... + { +- `"module"` - "nf_conntrack", +- `"size"` - "139224", +- `"used"` - "7", +- `"by"` - [ + "nf_nat", + "nf_nat_ipv4", + "nf_nat_ipv6", + "xt_conntrack", + "nf_nat_masquerade_ipv4", + "nf_conntrack_ipv4", + "nf_conntrack_ipv6" + ] + }, + { +- `"module"` - "ip_set", +- `"size"` - "45799", +- `"used"` - "0" + }, + { +- `"module"` - "nfnetlink", +- `"size"` - "14519", +- `"used"` - "1", +- `"by"` - [ + "ip_set" + ] + }, + { +- `"module"` - "ebtable_filter", +- `"size"` - "12827", +- `"used"` - "1" + }, + { +- `"module"` - "ebtables", +- `"size"` - "35009", +- `"used"` - "2", +- `"by"` - [ + "ebtable_nat", + "ebtable_filter" + ] + }, + ... + ] - $ lsmod | jc --lsmod -p -r - [ - ... - { - "module": "nf_conntrack", - "size": "139224", - "used": "7", - "by": [ - "nf_nat", - "nf_nat_ipv4", - "nf_nat_ipv6", - "xt_conntrack", - "nf_nat_masquerade_ipv4", - "nf_conntrack_ipv4", - "nf_conntrack_ipv6" - ] - }, - { - "module": "ip_set", - "size": "45799", - "used": "0" - }, - { - "module": "nfnetlink", - "size": "14519", - "used": "1", - "by": [ - "ip_set" - ] - }, - { - "module": "ebtable_filter", - "size": "12827", - "used": "1" - }, - { - "module": "ebtables", - "size": "35009", - "used": "2", - "by": [ - "ebtable_nat", - "ebtable_filter" - ] - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/lsof.md b/docs/parsers/lsof.md index 6003595f..af4f31ff 100644 --- a/docs/parsers/lsof.md +++ b/docs/parsers/lsof.md @@ -1,150 +1,162 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.lsof + jc - JSON CLI output utility `lsof` command output parser Usage (cli): - $ lsof | jc --lsof +$ lsof | jc --lsof - or +or - $ jc lsof +$ jc lsof Usage (module): - import jc - result = jc.parse('lsof', lsof_command_output) +import jc +result = jc.parse('lsof', lsof_command_output) - or +or - import jc.parsers.lsof - result = jc.parsers.lsof.parse(lsof_command_output) +import jc.parsers.lsof +result = jc.parsers.lsof.parse(lsof_command_output) Schema: - [ - { - "command": string, - "pid": integer, - "tid": integer, - "user": string, - "fd": string, - "type": string, - "device": string, - "size_off": integer, - "node": integer, - "name": string - } - ] +[ +{ +"command": string, +"pid": integer, +"tid": integer, +"user": string, +"fd": string, +"type": string, +"device": string, +"size_off": integer, +"node": integer, +"name": string +} +] -Examples: +**Examples**: - $ sudo lsof | jc --lsof -p - [ - { - "command": "systemd", - "pid": 1, - "tid": null, - "user": "root", - "fd": "cwd", - "type": "DIR", - "device": "253,0", - "size_off": 224, - "node": 64, - "name": "/" - }, - { - "command": "systemd", - "pid": 1, - "tid": null, - "user": "root", - "fd": "rtd", - "type": "DIR", - "device": "253,0", - "size_off": 224, - "node": 64, - "name": "/" - }, - { - "command": "systemd", - "pid": 1, - "tid": null, - "user": "root", - "fd": "txt", - "type": "REG", - "device": "253,0", - "size_off": 1624520, - "node": 50360451, - "name": "/usr/lib/systemd/systemd" - }, - ... - ] + + $ sudo lsof | jc --lsof -p + [ + { +- `"command"` - "systemd", +- `"pid"` - 1, +- `"tid"` - null, +- `"user"` - "root", +- `"fd"` - "cwd", +- `"type"` - "DIR", +- `"device"` - "253,0", +- `"size_off"` - 224, +- `"node"` - 64, +- `"name"` - "/" + }, + { +- `"command"` - "systemd", +- `"pid"` - 1, +- `"tid"` - null, +- `"user"` - "root", +- `"fd"` - "rtd", +- `"type"` - "DIR", +- `"device"` - "253,0", +- `"size_off"` - 224, +- `"node"` - 64, +- `"name"` - "/" + }, + { +- `"command"` - "systemd", +- `"pid"` - 1, +- `"tid"` - null, +- `"user"` - "root", +- `"fd"` - "txt", +- `"type"` - "REG", +- `"device"` - "253,0", +- `"size_off"` - 1624520, +- `"node"` - 50360451, +- `"name"` - "/usr/lib/systemd/systemd" + }, + ... + ] + + $ sudo lsof | jc --lsof -p -r + [ + { +- `"command"` - "systemd", +- `"pid"` - "1", +- `"tid"` - null, +- `"user"` - "root", +- `"fd"` - "cwd", +- `"type"` - "DIR", +- `"device"` - "8,2", +- `"size_off"` - "4096", +- `"node"` - "2", +- `"name"` - "/" + }, + { +- `"command"` - "systemd", +- `"pid"` - "1", +- `"tid"` - null, +- `"user"` - "root", +- `"fd"` - "rtd", +- `"type"` - "DIR", +- `"device"` - "8,2", +- `"size_off"` - "4096", +- `"node"` - "2", +- `"name"` - "/" + }, + { +- `"command"` - "systemd", +- `"pid"` - "1", +- `"tid"` - null, +- `"user"` - "root", +- `"fd"` - "txt", +- `"type"` - "REG", +- `"device"` - "8,2", +- `"size_off"` - "1595792", +- `"node"` - "668802", +- `"name"` - "/lib/systemd/systemd" + }, + ... + ] - $ sudo lsof | jc --lsof -p -r - [ - { - "command": "systemd", - "pid": "1", - "tid": null, - "user": "root", - "fd": "cwd", - "type": "DIR", - "device": "8,2", - "size_off": "4096", - "node": "2", - "name": "/" - }, - { - "command": "systemd", - "pid": "1", - "tid": null, - "user": "root", - "fd": "rtd", - "type": "DIR", - "device": "8,2", - "size_off": "4096", - "node": "2", - "name": "/" - }, - { - "command": "systemd", - "pid": "1", - "tid": null, - "user": "root", - "fd": "txt", - "type": "REG", - "device": "8,2", - "size_off": "1595792", - "node": "668802", - "name": "/lib/systemd/systemd" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/lsusb.md b/docs/parsers/lsusb.md index 73198739..512376cf 100644 --- a/docs/parsers/lsusb.md +++ b/docs/parsers/lsusb.md @@ -1,292 +1,304 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.lsusb + jc - JSON CLI output utility `lsusb` command output parser Supports the `-v` option or no options. Usage (cli): - $ lsusb -v | jc --lsusb +$ lsusb -v | jc --lsusb - or +or - $ jc lsusb -v +$ jc lsusb -v Usage (module): - import jc - result = jc.parse('lsusb', lsusb_command_output) +import jc +result = jc.parse('lsusb', lsusb_command_output) - or +or - import jc.parsers.lsusb - result = jc.parsers.lsusb.parse(lsusb_command_output) +import jc.parsers.lsusb +result = jc.parsers.lsusb.parse(lsusb_command_output) Schema: - Note: object keynames are assigned directly from the lsusb - output. If there are duplicate names in a section, only the - last one is converted. +Note: object keynames are assigned directly from the lsusb +output. If there are duplicate names in a section, only the +last one is converted. - [ - { - "bus": string, - "device": string, - "id": string, - "description": string, - "device_descriptor": { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - }, - "configuration_descriptor": { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - }, - "interface_association": { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - } - }, - "interface_descriptors": [ - { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - }, - "cdc_header": { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - } - }, - "cdc_call_management": { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - } - }, - "cdc_acm": { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - } - }, - "cdc_union": { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - } - }, - "endpoint_descriptors": [ - { - "": { - "value": string, - "description": string, - "attributes": [ - string - ] - } - } - ] - } - ] - } - }, - "hub_descriptor": { - "": { - "value": string, - "description": string, - "attributes": [ - string, - ] - }, - "hub_port_status": { - "": { - "value": string, - "attributes": [ - string - ] - } - } - }, - "device_status": { - "value": string, - "description": string - } - } - ] +[ +{ +"bus": string, +"device": string, +"id": string, +"description": string, +"device_descriptor": { +"": { +"value": string, +"description": string, +"attributes": [ +string +] +}, +"configuration_descriptor": { +"": { +"value": string, +"description": string, +"attributes": [ +string +] +}, +"interface_association": { +"": { +"value": string, +"description": string, +"attributes": [ +string +] +} +}, +"interface_descriptors": [ +{ +"": { +"value": string, +"description": string, +"attributes": [ +string +] +}, +"cdc_header": { +"": { +"value": string, +"description": string, +"attributes": [ +string +] +} +}, +"cdc_call_management": { +"": { +"value": string, +"description": string, +"attributes": [ +string +] +} +}, +"cdc_acm": { +"": { +"value": string, +"description": string, +"attributes": [ +string +] +} +}, +"cdc_union": { +"": { +"value": string, +"description": string, +"attributes": [ +string +] +} +}, +"endpoint_descriptors": [ +{ +"": { +"value": string, +"description": string, +"attributes": [ +string +] +} +} +] +} +] +} +}, +"hub_descriptor": { +"": { +"value": string, +"description": string, +"attributes": [ +string, +] +}, +"hub_port_status": { +"": { +"value": string, +"attributes": [ +string +] +} +} +}, +"device_status": { +"value": string, +"description": string +} +} +] -Examples: +**Examples**: - $ lsusb -v | jc --lsusb -p - [ - { - "bus": "002", - "device": "001", - "id": "1d6b:0001", - "description": "Linux Foundation 1.1 root hub", - "device_descriptor": { - "bLength": { - "value": "18" - }, - "bDescriptorType": { - "value": "1" - }, - "bcdUSB": { - "value": "1.10" - }, - ... - "bNumConfigurations": { - "value": "1" - }, - "configuration_descriptor": { - "bLength": { - "value": "9" - }, - ... - "iConfiguration": { - "value": "0" - }, - "bmAttributes": { - "value": "0xe0", - "attributes": [ - "Self Powered", - "Remote Wakeup" - ] - }, - "MaxPower": { - "description": "0mA" - }, - "interface_descriptors": [ - { - "bLength": { - "value": "9" - }, - ... - "bInterfaceProtocol": { - "value": "0", - "description": "Full speed (or root) hub" - }, - "iInterface": { - "value": "0" - }, - "endpoint_descriptors": [ - { - "bLength": { - "value": "7" - }, - ... - "bmAttributes": { - "value": "3", - "attributes": [ - "Transfer Type Interrupt", - "Synch Type None", - "Usage Type Data" - ] - }, - "wMaxPacketSize": { - "value": "0x0002", - "description": "1x 2 bytes" - }, - "bInterval": { - "value": "255" - } - } - ] - } - ] - } - }, - "hub_descriptor": { - "bLength": { - "value": "9" - }, - ... - "wHubCharacteristic": { - "value": "0x000a", - "attributes": [ - "No power switching (usb 1.0)", - "Per-port overcurrent protection" - ] - }, - ... - "hub_port_status": { - "Port 1": { - "value": "0000.0103", - "attributes": [ - "power", - "enable", - "connect" - ] - }, - "Port 2": { - "value": "0000.0103", - "attributes": [ - "power", - "enable", - "connect" - ] - } - } - }, - "device_status": { - "value": "0x0001", - "description": "Self Powered" - } - } - ] + + $ lsusb -v | jc --lsusb -p + [ + { +- `"bus"` - "002", +- `"device"` - "001", +- `"id"` - "1d6b:0001", +- `"description"` - "Linux Foundation 1.1 root hub", +- `"device_descriptor"` - { +- `"bLength"` - { +- `"value"` - "18" + }, +- `"bDescriptorType"` - { +- `"value"` - "1" + }, +- `"bcdUSB"` - { +- `"value"` - "1.10" + }, + ... +- `"bNumConfigurations"` - { +- `"value"` - "1" + }, +- `"configuration_descriptor"` - { +- `"bLength"` - { +- `"value"` - "9" + }, + ... +- `"iConfiguration"` - { +- `"value"` - "0" + }, +- `"bmAttributes"` - { +- `"value"` - "0xe0", +- `"attributes"` - [ + "Self Powered", + "Remote Wakeup" + ] + }, +- `"MaxPower"` - { +- `"description"` - "0mA" + }, +- `"interface_descriptors"` - [ + { +- `"bLength"` - { +- `"value"` - "9" + }, + ... +- `"bInterfaceProtocol"` - { +- `"value"` - "0", +- `"description"` - "Full speed (or root) hub" + }, +- `"iInterface"` - { +- `"value"` - "0" + }, +- `"endpoint_descriptors"` - [ + { +- `"bLength"` - { +- `"value"` - "7" + }, + ... +- `"bmAttributes"` - { +- `"value"` - "3", +- `"attributes"` - [ + "Transfer Type Interrupt", + "Synch Type None", + "Usage Type Data" + ] + }, +- `"wMaxPacketSize"` - { +- `"value"` - "0x0002", +- `"description"` - "1x 2 bytes" + }, +- `"bInterval"` - { +- `"value"` - "255" + } + } + ] + } + ] + } + }, +- `"hub_descriptor"` - { +- `"bLength"` - { +- `"value"` - "9" + }, + ... +- `"wHubCharacteristic"` - { +- `"value"` - "0x000a", +- `"attributes"` - [ + "No power switching (usb 1.0)", + "Per-port overcurrent protection" + ] + }, + ... +- `"hub_port_status"` - { + "Port 1": { +- `"value"` - "0000.0103", +- `"attributes"` - [ + "power", + "enable", + "connect" + ] + }, + "Port 2": { +- `"value"` - "0000.0103", +- `"attributes"` - [ + "power", + "enable", + "connect" + ] + } + } + }, +- `"device_status"` - { +- `"value"` - "0x0001", +- `"description"` - "Self Powered" + } + } + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/mount.md b/docs/parsers/mount.md index cf85d0f7..3f69771a 100644 --- a/docs/parsers/mount.md +++ b/docs/parsers/mount.md @@ -1,106 +1,118 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.mount + jc - JSON CLI output utility `mount` command output parser Usage (cli): - $ mount | jc --mount +$ mount | jc --mount - or +or - $ jc mount +$ jc mount Usage (module): - import jc - result = jc.parse('mount', mount_command_output) +import jc +result = jc.parse('mount', mount_command_output) - or +or - import jc.parsers.mount - result = jc.parsers.mount.parse(mount_command_output) +import jc.parsers.mount +result = jc.parsers.mount.parse(mount_command_output) Schema: - [ - { - "filesystem": string, - "mount_point": string, - "type": string, - "access": [ - string - ] - } - ] +[ +{ +"filesystem": string, +"mount_point": string, +"type": string, +"access": [ +string +] +} +] -Example: +**Example**: - $ mount | jc --mount -p - [ - { - "filesystem": "sysfs", - "mount_point": "/sys", - "type": "sysfs", - "access": [ - "rw", - "nosuid", - "nodev", - "noexec", - "relatime" - ] - }, - { - "filesystem": "proc", - "mount_point": "/proc", - "type": "proc", - "access": [ - "rw", - "nosuid", - "nodev", - "noexec", - "relatime" - ] - }, - { - "filesystem": "udev", - "mount_point": "/dev", - "type": "devtmpfs", - "access": [ - "rw", - "nosuid", - "relatime", - "size=977500k", - "nr_inodes=244375", - "mode=755" - ] - }, - ... - ] + + $ mount | jc --mount -p + [ + { +- `"filesystem"` - "sysfs", +- `"mount_point"` - "/sys", +- `"type"` - "sysfs", +- `"access"` - [ + "rw", + "nosuid", + "nodev", + "noexec", + "relatime" + ] + }, + { +- `"filesystem"` - "proc", +- `"mount_point"` - "/proc", +- `"type"` - "proc", +- `"access"` - [ + "rw", + "nosuid", + "nodev", + "noexec", + "relatime" + ] + }, + { +- `"filesystem"` - "udev", +- `"mount_point"` - "/dev", +- `"type"` - "devtmpfs", +- `"access"` - [ + "rw", + "nosuid", + "relatime", + "size=977500k", + "nr_inodes=244375", + "mode=755" + ] + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/netstat.md b/docs/parsers/netstat.md index fcd0173a..740ecd72 100644 --- a/docs/parsers/netstat.md +++ b/docs/parsers/netstat.md @@ -1,386 +1,398 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.netstat + jc - JSON CLI output utility `netstat` command output parser Caveats: - Use of multiple `l` options is not supported on OSX (e.g. `netstat -rlll`) - Use of the `A` option is not supported on OSX when using the `r` option - (e.g. `netstat -rA`) +(e.g. `netstat -rA`) Usage (cli): - $ netstat | jc --netstat +$ netstat | jc --netstat - or +or - $ jc netstat +$ jc netstat Usage (module): - import jc - result = jc.parse('netstat', netstat_command_output) +import jc +result = jc.parse('netstat', netstat_command_output) - or +or - import jc.parsers.netstat - result = jc.parsers.netstat.parse(netstat_command_output) +import jc.parsers.netstat +result = jc.parsers.netstat.parse(netstat_command_output) Schema: - [ - { - "proto": string, - "recv_q": integer, - "send_q": integer, - "transport_protocol" string, - "network_protocol": string, - "local_address": string, - "local_port": string, - "local_port_num": integer, - "foreign_address": string, - "foreign_port": string, - "foreign_port_num": integer, - "state": string, - "program_name": string, - "pid": integer, - "user": string, - "security_context": string, - "refcnt": integer, - "flags": string, - "type": string, - "inode": integer, - "path": string, - "kind": string, - "address": string, - "unix_inode": string, - "conn": string, - "refs": string, - "nextref": string, - "name": string, - "unit": integer, - "vendor": integer, - "class": integer, - "subcla": integer, - "unix_flags": integer, - "pcbcount": integer, - "rcvbuf": integer, - "sndbuf": integer, - "rxbytes": integer, - "txbytes": integer, - "destination": string, - "gateway": string, - "route_flags": string, - "route_flags_pretty": [ - string, - ] - "route_refs": integer, - "use": integer, - "mtu": integer, - "expire": string, - "genmask": string, - "mss": integer, - "window": integer, - "irtt": integer, - "iface": string, - "metric": integer, - "network": string, - "address": string, - "ipkts": integer, # - = null - "ierrs": integer, # - = null - "idrop": integer, # - = null - "opkts": integer, # - = null - "oerrs": integer, # - = null - "coll": integer, # - = null - "rx_ok": integer, - "rx_err": integer, - "rx_drp": integer, - "rx_ovr": integer, - "tx_ok": integer, - "tx_err": integer, - "tx_drp": integer, - "tx_ovr": integer, - "flg": string, - "ibytes": integer, - "obytes": integer, - "r_mbuf": integer, - "s_mbuf": integer, - "r_clus": integer, - "s_clus": integer, - "r_hiwa": integer, - "s_hiwa": integer, - "r_lowa": integer, - "s_lowa": integer, - "r_bcnt": integer, - "s_bcnt": integer, - "r_bmax": integer, - "s_bmax": integer, - "rexmit": integer, - "ooorcv": integer, - "0_win": integer, - "rexmt": float, - "persist": float, - "keep": float, - "2msl": float, - "delack": float, - "rcvtime": float, - } - ] +[ +{ +"proto": string, +"recv_q": integer, +"send_q": integer, +"transport_protocol" string, +"network_protocol": string, +"local_address": string, +"local_port": string, +"local_port_num": integer, +"foreign_address": string, +"foreign_port": string, +"foreign_port_num": integer, +"state": string, +"program_name": string, +"pid": integer, +"user": string, +"security_context": string, +"refcnt": integer, +"flags": string, +"type": string, +"inode": integer, +"path": string, +"kind": string, +"address": string, +"unix_inode": string, +"conn": string, +"refs": string, +"nextref": string, +"name": string, +"unit": integer, +"vendor": integer, +"class": integer, +"subcla": integer, +"unix_flags": integer, +"pcbcount": integer, +"rcvbuf": integer, +"sndbuf": integer, +"rxbytes": integer, +"txbytes": integer, +"destination": string, +"gateway": string, +"route_flags": string, +"route_flags_pretty": [ +string, +] +"route_refs": integer, +"use": integer, +"mtu": integer, +"expire": string, +"genmask": string, +"mss": integer, +"window": integer, +"irtt": integer, +"iface": string, +"metric": integer, +"network": string, +"address": string, +"ipkts": integer, # - = null +"ierrs": integer, # - = null +"idrop": integer, # - = null +"opkts": integer, # - = null +"oerrs": integer, # - = null +"coll": integer, # - = null +"rx_ok": integer, +"rx_err": integer, +"rx_drp": integer, +"rx_ovr": integer, +"tx_ok": integer, +"tx_err": integer, +"tx_drp": integer, +"tx_ovr": integer, +"flg": string, +"ibytes": integer, +"obytes": integer, +"r_mbuf": integer, +"s_mbuf": integer, +"r_clus": integer, +"s_clus": integer, +"r_hiwa": integer, +"s_hiwa": integer, +"r_lowa": integer, +"s_lowa": integer, +"r_bcnt": integer, +"s_bcnt": integer, +"r_bmax": integer, +"s_bmax": integer, +"rexmit": integer, +"ooorcv": integer, +"0_win": integer, +"rexmt": float, +"persist": float, +"keep": float, +"2msl": float, +"delack": float, +"rcvtime": float, +} +] -Examples: +**Examples**: - # netstat -apee | jc --netstat -p - [ - { - "proto": "tcp", - "recv_q": 0, - "send_q": 0, - "local_address": "localhost", - "foreign_address": "0.0.0.0", - "state": "LISTEN", - "user": "systemd-resolve", - "inode": 26958, - "program_name": "systemd-resolve", - "kind": "network", - "pid": 887, - "local_port": "domain", - "foreign_port": "*", - "transport_protocol": "tcp", - "network_protocol": "ipv4" - }, - { - "proto": "tcp", - "recv_q": 0, - "send_q": 0, - "local_address": "0.0.0.0", - "foreign_address": "0.0.0.0", - "state": "LISTEN", - "user": "root", - "inode": 30499, - "program_name": "sshd", - "kind": "network", - "pid": 1186, - "local_port": "ssh", - "foreign_port": "*", - "transport_protocol": "tcp", - "network_protocol": "ipv4" - }, - { - "proto": "tcp", - "recv_q": 0, - "send_q": 0, - "local_address": "localhost", - "foreign_address": "localhost", - "state": "ESTABLISHED", - "user": "root", - "inode": 46829, - "program_name": "sshd: root", - "kind": "network", - "pid": 2242, - "local_port": "ssh", - "foreign_port": "52186", - "transport_protocol": "tcp", - "network_protocol": "ipv4", - "foreign_port_num": 52186 - }, - { - "proto": "tcp", - "recv_q": 0, - "send_q": 0, - "local_address": "localhost", - "foreign_address": "localhost", - "state": "ESTABLISHED", - "user": "root", - "inode": 46828, - "program_name": "ssh", - "kind": "network", - "pid": 2241, - "local_port": "52186", - "foreign_port": "ssh", - "transport_protocol": "tcp", - "network_protocol": "ipv4", - "local_port_num": 52186 - }, - { - "proto": "tcp6", - "recv_q": 0, - "send_q": 0, - "local_address": "[::]", - "foreign_address": "[::]", - "state": "LISTEN", - "user": "root", - "inode": 30510, - "program_name": "sshd", - "kind": "network", - "pid": 1186, - "local_port": "ssh", - "foreign_port": "*", - "transport_protocol": "tcp", - "network_protocol": "ipv6" - }, - { - "proto": "udp", - "recv_q": 0, - "send_q": 0, - "local_address": "localhost", - "foreign_address": "0.0.0.0", - "state": null, - "user": "systemd-resolve", - "inode": 26957, - "program_name": "systemd-resolve", - "kind": "network", - "pid": 887, - "local_port": "domain", - "foreign_port": "*", - "transport_protocol": "udp", - "network_protocol": "ipv4" - }, - { - "proto": "raw6", - "recv_q": 0, - "send_q": 0, - "local_address": "[::]", - "foreign_address": "[::]", - "state": "7", - "user": "systemd-network", - "inode": 27001, - "program_name": "systemd-network", - "kind": "network", - "pid": 867, - "local_port": "ipv6-icmp", - "foreign_port": "*", - "transport_protocol": null, - "network_protocol": "ipv6" - }, - { - "proto": "unix", - "refcnt": 2, - "flags": null, - "type": "DGRAM", - "state": null, - "inode": 33322, - "program_name": "systemd", - "path": "/run/user/1000/systemd/notify", - "kind": "socket", - "pid": 1607 - }, - { - "proto": "unix", - "refcnt": 2, - "flags": "ACC", - "type": "SEQPACKET", - "state": "LISTENING", - "inode": 20835, - "program_name": "init", - "path": "/run/udev/control", - "kind": "socket", - "pid": 1 - }, - ... - ] + + # netstat -apee | jc --netstat -p + [ + { +- `"proto"` - "tcp", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "localhost", +- `"foreign_address"` - "0.0.0.0", +- `"state"` - "LISTEN", +- `"user"` - "systemd-resolve", +- `"inode"` - 26958, +- `"program_name"` - "systemd-resolve", +- `"kind"` - "network", +- `"pid"` - 887, +- `"local_port"` - "domain", +- `"foreign_port"` - "*", +- `"transport_protocol"` - "tcp", +- `"network_protocol"` - "ipv4" + }, + { +- `"proto"` - "tcp", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "0.0.0.0", +- `"foreign_address"` - "0.0.0.0", +- `"state"` - "LISTEN", +- `"user"` - "root", +- `"inode"` - 30499, +- `"program_name"` - "sshd", +- `"kind"` - "network", +- `"pid"` - 1186, +- `"local_port"` - "ssh", +- `"foreign_port"` - "*", +- `"transport_protocol"` - "tcp", +- `"network_protocol"` - "ipv4" + }, + { +- `"proto"` - "tcp", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "localhost", +- `"foreign_address"` - "localhost", +- `"state"` - "ESTABLISHED", +- `"user"` - "root", +- `"inode"` - 46829, +- `"program_name"` - "sshd: root", +- `"kind"` - "network", +- `"pid"` - 2242, +- `"local_port"` - "ssh", +- `"foreign_port"` - "52186", +- `"transport_protocol"` - "tcp", +- `"network_protocol"` - "ipv4", +- `"foreign_port_num"` - 52186 + }, + { +- `"proto"` - "tcp", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "localhost", +- `"foreign_address"` - "localhost", +- `"state"` - "ESTABLISHED", +- `"user"` - "root", +- `"inode"` - 46828, +- `"program_name"` - "ssh", +- `"kind"` - "network", +- `"pid"` - 2241, +- `"local_port"` - "52186", +- `"foreign_port"` - "ssh", +- `"transport_protocol"` - "tcp", +- `"network_protocol"` - "ipv4", +- `"local_port_num"` - 52186 + }, + { +- `"proto"` - "tcp6", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "[::]", +- `"foreign_address"` - "[::]", +- `"state"` - "LISTEN", +- `"user"` - "root", +- `"inode"` - 30510, +- `"program_name"` - "sshd", +- `"kind"` - "network", +- `"pid"` - 1186, +- `"local_port"` - "ssh", +- `"foreign_port"` - "*", +- `"transport_protocol"` - "tcp", +- `"network_protocol"` - "ipv6" + }, + { +- `"proto"` - "udp", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "localhost", +- `"foreign_address"` - "0.0.0.0", +- `"state"` - null, +- `"user"` - "systemd-resolve", +- `"inode"` - 26957, +- `"program_name"` - "systemd-resolve", +- `"kind"` - "network", +- `"pid"` - 887, +- `"local_port"` - "domain", +- `"foreign_port"` - "*", +- `"transport_protocol"` - "udp", +- `"network_protocol"` - "ipv4" + }, + { +- `"proto"` - "raw6", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "[::]", +- `"foreign_address"` - "[::]", +- `"state"` - "7", +- `"user"` - "systemd-network", +- `"inode"` - 27001, +- `"program_name"` - "systemd-network", +- `"kind"` - "network", +- `"pid"` - 867, +- `"local_port"` - "ipv6-icmp", +- `"foreign_port"` - "*", +- `"transport_protocol"` - null, +- `"network_protocol"` - "ipv6" + }, + { +- `"proto"` - "unix", +- `"refcnt"` - 2, +- `"flags"` - null, +- `"type"` - "DGRAM", +- `"state"` - null, +- `"inode"` - 33322, +- `"program_name"` - "systemd", +- `"path"` - "/run/user/1000/systemd/notify", +- `"kind"` - "socket", +- `"pid"` - 1607 + }, + { +- `"proto"` - "unix", +- `"refcnt"` - 2, +- `"flags"` - "ACC", +- `"type"` - "SEQPACKET", +- `"state"` - "LISTENING", +- `"inode"` - 20835, +- `"program_name"` - "init", +- `"path"` - "/run/udev/control", +- `"kind"` - "socket", +- `"pid"` - 1 + }, + ... + ] + + $ netstat -r | jc --netstat -p + [ + { +- `"destination"` - "default", +- `"gateway"` - "gateway", +- `"genmask"` - "0.0.0.0", +- `"route_flags"` - "UG", +- `"mss"` - 0, +- `"window"` - 0, +- `"irtt"` - 0, +- `"iface"` - "ens33", +- `"kind"` - "route", +- `"route_flags_pretty"` - [ + "UP", + "GATEWAY" + ] + }, + { +- `"destination"` - "172.17.0.0", +- `"gateway"` - "0.0.0.0", +- `"genmask"` - "255.255.0.0", +- `"route_flags"` - "U", +- `"mss"` - 0, +- `"window"` - 0, +- `"irtt"` - 0, +- `"iface"` - "docker0", +- `"kind"` - "route", +- `"route_flags_pretty"` - [ + "UP" + ] + }, + { +- `"destination"` - "192.168.71.0", +- `"gateway"` - "0.0.0.0", +- `"genmask"` - "255.255.255.0", +- `"route_flags"` - "U", +- `"mss"` - 0, +- `"window"` - 0, +- `"irtt"` - 0, +- `"iface"` - "ens33", +- `"kind"` - "route", +- `"route_flags_pretty"` - [ + "UP" + ] + } + ] + + $ netstat -i | jc --netstat -p + [ + { +- `"iface"` - "ens33", +- `"mtu"` - 1500, +- `"rx_ok"` - 476, +- `"rx_err"` - 0, +- `"rx_drp"` - 0, +- `"rx_ovr"` - 0, +- `"tx_ok"` - 312, +- `"tx_err"` - 0, +- `"tx_drp"` - 0, +- `"tx_ovr"` - 0, +- `"flg"` - "BMRU", +- `"kind"` - "interface" + }, + { +- `"iface"` - "lo", +- `"mtu"` - 65536, +- `"rx_ok"` - 0, +- `"rx_err"` - 0, +- `"rx_drp"` - 0, +- `"rx_ovr"` - 0, +- `"tx_ok"` - 0, +- `"tx_err"` - 0, +- `"tx_drp"` - 0, +- `"tx_ovr"` - 0, +- `"flg"` - "LRU", +- `"kind"` - "interface" + } + ] - $ netstat -r | jc --netstat -p - [ - { - "destination": "default", - "gateway": "gateway", - "genmask": "0.0.0.0", - "route_flags": "UG", - "mss": 0, - "window": 0, - "irtt": 0, - "iface": "ens33", - "kind": "route", - "route_flags_pretty": [ - "UP", - "GATEWAY" - ] - }, - { - "destination": "172.17.0.0", - "gateway": "0.0.0.0", - "genmask": "255.255.0.0", - "route_flags": "U", - "mss": 0, - "window": 0, - "irtt": 0, - "iface": "docker0", - "kind": "route", - "route_flags_pretty": [ - "UP" - ] - }, - { - "destination": "192.168.71.0", - "gateway": "0.0.0.0", - "genmask": "255.255.255.0", - "route_flags": "U", - "mss": 0, - "window": 0, - "irtt": 0, - "iface": "ens33", - "kind": "route", - "route_flags_pretty": [ - "UP" - ] - } - ] + - $ netstat -i | jc --netstat -p - [ - { - "iface": "ens33", - "mtu": 1500, - "rx_ok": 476, - "rx_err": 0, - "rx_drp": 0, - "rx_ovr": 0, - "tx_ok": 312, - "tx_err": 0, - "tx_drp": 0, - "tx_ovr": 0, - "flg": "BMRU", - "kind": "interface" - }, - { - "iface": "lo", - "mtu": 65536, - "rx_ok": 0, - "rx_err": 0, - "rx_drp": 0, - "rx_ovr": 0, - "tx_ok": 0, - "tx_err": 0, - "tx_drp": 0, - "tx_ovr": 0, - "flg": "LRU", - "kind": "interface" - } - ] +## info Objects - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/ntpq.md b/docs/parsers/ntpq.md index 71293dc4..47e19b30 100644 --- a/docs/parsers/ntpq.md +++ b/docs/parsers/ntpq.md @@ -1,237 +1,249 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ntpq + jc - JSON CLI output utility `ntpq -p` command output parser Usage (cli): - $ ntpq -p | jc --ntpq +$ ntpq -p | jc --ntpq - or +or - $ jc ntpq -p +$ jc ntpq -p Usage (module): - import jc - result = jc.parse('ntpq', ntpq_command_output) +import jc +result = jc.parse('ntpq', ntpq_command_output) - or +or - import jc.parsers.ntpq - result = jc.parsers.ntpq.parse(ntpq_command_output) +import jc.parsers.ntpq +result = jc.parsers.ntpq.parse(ntpq_command_output) Schema: - [ - { - "state": string, # space/~ converted to null - "remote": string, - "refid": string, - "st": integer, - "t": string, - "when": integer, # - converted to null - "poll": integer, - "reach": integer, - "delay": float, - "offset": float, - "jitter": float - }, - ] +[ +{ +"state": string, # space/~ converted to null +"remote": string, +"refid": string, +"st": integer, +"t": string, +"when": integer, # - converted to null +"poll": integer, +"reach": integer, +"delay": float, +"offset": float, +"jitter": float +}, +] -Examples: +**Examples**: - $ ntpq -p | jc --ntpq -p - [ - { - "remote": "44.190.6.254", - "refid": "127.67.113.92", - "st": 2, - "t": "u", - "when": 1, - "poll": 64, - "reach": 1, - "delay": 23.399, - "offset": -2.805, - "jitter": 2.131, - "state": null - }, - { - "remote": "ntp.wdc1.us.lea", - "refid": "130.133.1.10", - "st": 2, - "t": "u", - "when": null, - "poll": 64, - "reach": 1, - "delay": 93.053, - "offset": -0.807, - "jitter": 2.839, - "state": null - }, - { - "remote": "clock.team-cymr", - "refid": "204.9.54.119", - "st": 2, - "t": "u", - "when": null, - "poll": 64, - "reach": 1, - "delay": 70.337, - "offset": -2.909, - "jitter": 2.6, - "state": null - }, - { - "remote": "mirror1.sjc02.s", - "refid": "216.218.254.202", - "st": 2, - "t": "u", - "when": 2, - "poll": 64, - "reach": 1, - "delay": 29.325, - "offset": 1.044, - "jitter": 4.069, - "state": null, - } - ] + + $ ntpq -p | jc --ntpq -p + [ + { +- `"remote"` - "44.190.6.254", +- `"refid"` - "127.67.113.92", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - 1, +- `"poll"` - 64, +- `"reach"` - 1, +- `"delay"` - 23.399, +- `"offset"` - -2.805, +- `"jitter"` - 2.131, +- `"state"` - null + }, + { +- `"remote"` - "ntp.wdc1.us.lea", +- `"refid"` - "130.133.1.10", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - null, +- `"poll"` - 64, +- `"reach"` - 1, +- `"delay"` - 93.053, +- `"offset"` - -0.807, +- `"jitter"` - 2.839, +- `"state"` - null + }, + { +- `"remote"` - "clock.team-cymr", +- `"refid"` - "204.9.54.119", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - null, +- `"poll"` - 64, +- `"reach"` - 1, +- `"delay"` - 70.337, +- `"offset"` - -2.909, +- `"jitter"` - 2.6, +- `"state"` - null + }, + { +- `"remote"` - "mirror1.sjc02.s", +- `"refid"` - "216.218.254.202", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - 2, +- `"poll"` - 64, +- `"reach"` - 1, +- `"delay"` - 29.325, +- `"offset"` - 1.044, +- `"jitter"` - 4.069, +- `"state"` - null, + } + ] + + $ ntpq -pn| jc --ntpq -p + [ + { +- `"remote"` - "44.190.6.254", +- `"refid"` - "127.67.113.92", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - 66, +- `"poll"` - 64, +- `"reach"` - 377, +- `"delay"` - 22.69, +- `"offset"` - -0.392, +- `"jitter"` - 2.085, +- `"state"` - "+" + }, + { +- `"remote"` - "108.59.2.24", +- `"refid"` - "130.133.1.10", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - 63, +- `"poll"` - 64, +- `"reach"` - 377, +- `"delay"` - 90.805, +- `"offset"` - 2.84, +- `"jitter"` - 1.908, +- `"state"` - "-" + }, + { +- `"remote"` - "38.229.71.1", +- `"refid"` - "204.9.54.119", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - 64, +- `"poll"` - 64, +- `"reach"` - 377, +- `"delay"` - 68.699, +- `"offset"` - -0.61, +- `"jitter"` - 2.576, +- `"state"` - "+" + }, + { +- `"remote"` - "72.5.72.15", +- `"refid"` - "216.218.254.202", +- `"st"` - 2, +- `"t"` - "u", +- `"when"` - 63, +- `"poll"` - 64, +- `"reach"` - 377, +- `"delay"` - 22.654, +- `"offset"` - 0.231, +- `"jitter"` - 1.964, +- `"state"` - "*" + } + ] + + $ ntpq -pn| jc --ntpq -p -r + [ + { +- `"s"` - "+", +- `"remote"` - "44.190.6.254", +- `"refid"` - "127.67.113.92", +- `"st"` - "2", +- `"t"` - "u", +- `"when"` - "66", +- `"poll"` - "64", +- `"reach"` - "377", +- `"delay"` - "22.690", +- `"offset"` - "-0.392", +- `"jitter"` - "2.085" + }, + { +- `"s"` - "-", +- `"remote"` - "108.59.2.24", +- `"refid"` - "130.133.1.10", +- `"st"` - "2", +- `"t"` - "u", +- `"when"` - "63", +- `"poll"` - "64", +- `"reach"` - "377", +- `"delay"` - "90.805", +- `"offset"` - "2.840", +- `"jitter"` - "1.908" + }, + { +- `"s"` - "+", +- `"remote"` - "38.229.71.1", +- `"refid"` - "204.9.54.119", +- `"st"` - "2", +- `"t"` - "u", +- `"when"` - "64", +- `"poll"` - "64", +- `"reach"` - "377", +- `"delay"` - "68.699", +- `"offset"` - "-0.610", +- `"jitter"` - "2.576" + }, + { +- `"s"` - "*", +- `"remote"` - "72.5.72.15", +- `"refid"` - "216.218.254.202", +- `"st"` - "2", +- `"t"` - "u", +- `"when"` - "63", +- `"poll"` - "64", +- `"reach"` - "377", +- `"delay"` - "22.654", +- `"offset"` - "0.231", +- `"jitter"` - "1.964" + } + ] - $ ntpq -pn| jc --ntpq -p - [ - { - "remote": "44.190.6.254", - "refid": "127.67.113.92", - "st": 2, - "t": "u", - "when": 66, - "poll": 64, - "reach": 377, - "delay": 22.69, - "offset": -0.392, - "jitter": 2.085, - "state": "+" - }, - { - "remote": "108.59.2.24", - "refid": "130.133.1.10", - "st": 2, - "t": "u", - "when": 63, - "poll": 64, - "reach": 377, - "delay": 90.805, - "offset": 2.84, - "jitter": 1.908, - "state": "-" - }, - { - "remote": "38.229.71.1", - "refid": "204.9.54.119", - "st": 2, - "t": "u", - "when": 64, - "poll": 64, - "reach": 377, - "delay": 68.699, - "offset": -0.61, - "jitter": 2.576, - "state": "+" - }, - { - "remote": "72.5.72.15", - "refid": "216.218.254.202", - "st": 2, - "t": "u", - "when": 63, - "poll": 64, - "reach": 377, - "delay": 22.654, - "offset": 0.231, - "jitter": 1.964, - "state": "*" - } - ] + - $ ntpq -pn| jc --ntpq -p -r - [ - { - "s": "+", - "remote": "44.190.6.254", - "refid": "127.67.113.92", - "st": "2", - "t": "u", - "when": "66", - "poll": "64", - "reach": "377", - "delay": "22.690", - "offset": "-0.392", - "jitter": "2.085" - }, - { - "s": "-", - "remote": "108.59.2.24", - "refid": "130.133.1.10", - "st": "2", - "t": "u", - "when": "63", - "poll": "64", - "reach": "377", - "delay": "90.805", - "offset": "2.840", - "jitter": "1.908" - }, - { - "s": "+", - "remote": "38.229.71.1", - "refid": "204.9.54.119", - "st": "2", - "t": "u", - "when": "64", - "poll": "64", - "reach": "377", - "delay": "68.699", - "offset": "-0.610", - "jitter": "2.576" - }, - { - "s": "*", - "remote": "72.5.72.15", - "refid": "216.218.254.202", - "st": "2", - "t": "u", - "when": "63", - "poll": "64", - "reach": "377", - "delay": "22.654", - "offset": "0.231", - "jitter": "1.964" - } - ] +## info Objects - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, freebsd diff --git a/docs/parsers/passwd.md b/docs/parsers/passwd.md index 6253da68..8b2aab16 100644 --- a/docs/parsers/passwd.md +++ b/docs/parsers/passwd.md @@ -1,125 +1,137 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.passwd + jc - JSON CLI output utility `/etc/passwd` file Parser Usage (cli): - $ cat /etc/passwd | jc --passwd +$ cat /etc/passwd | jc --passwd Usage (module): - import jc - result = jc.parse('passwd', passwd_file_output) +import jc +result = jc.parse('passwd', passwd_file_output) - or +or - import jc.parsers.passwd - result = jc.parsers.passwd.parse(passwd_file_output) +import jc.parsers.passwd +result = jc.parsers.passwd.parse(passwd_file_output) Schema: - [ - { - "username": string, - "password": string, - "uid": integer, - "gid": integer, - "comment": string, - "home": string, - "shell": string - } - ] +[ +{ +"username": string, +"password": string, +"uid": integer, +"gid": integer, +"comment": string, +"home": string, +"shell": string +} +] -Examples: +**Examples**: - $ cat /etc/passwd | jc --passwd -p - [ - { - "username": "nobody", - "password": "*", - "uid": -2, - "gid": -2, - "comment": "Unprivileged User", - "home": "/var/empty", - "shell": "/usr/bin/false" - }, - { - "username": "root", - "password": "*", - "uid": 0, - "gid": 0, - "comment": "System Administrator", - "home": "/var/root", - "shell": "/bin/sh" - }, - { - "username": "daemon", - "password": "*", - "uid": 1, - "gid": 1, - "comment": "System Services", - "home": "/var/root", - "shell": "/usr/bin/false" - }, - ... - ] + + $ cat /etc/passwd | jc --passwd -p + [ + { +- `"username"` - "nobody", +- `"password"` - "*", +- `"uid"` - -2, +- `"gid"` - -2, +- `"comment"` - "Unprivileged User", +- `"home"` - "/var/empty", +- `"shell"` - "/usr/bin/false" + }, + { +- `"username"` - "root", +- `"password"` - "*", +- `"uid"` - 0, +- `"gid"` - 0, +- `"comment"` - "System Administrator", +- `"home"` - "/var/root", +- `"shell"` - "/bin/sh" + }, + { +- `"username"` - "daemon", +- `"password"` - "*", +- `"uid"` - 1, +- `"gid"` - 1, +- `"comment"` - "System Services", +- `"home"` - "/var/root", +- `"shell"` - "/usr/bin/false" + }, + ... + ] + + $ cat /etc/passwd | jc --passwd -p -r + [ + { +- `"username"` - "nobody", +- `"password"` - "*", +- `"uid"` - "-2", +- `"gid"` - "-2", +- `"comment"` - "Unprivileged User", +- `"home"` - "/var/empty", +- `"shell"` - "/usr/bin/false" + }, + { +- `"username"` - "root", +- `"password"` - "*", +- `"uid"` - "0", +- `"gid"` - "0", +- `"comment"` - "System Administrator", +- `"home"` - "/var/root", +- `"shell"` - "/bin/sh" + }, + { +- `"username"` - "daemon", +- `"password"` - "*", +- `"uid"` - "1", +- `"gid"` - "1", +- `"comment"` - "System Services", +- `"home"` - "/var/root", +- `"shell"` - "/usr/bin/false" + }, + ... + ] - $ cat /etc/passwd | jc --passwd -p -r - [ - { - "username": "nobody", - "password": "*", - "uid": "-2", - "gid": "-2", - "comment": "Unprivileged User", - "home": "/var/empty", - "shell": "/usr/bin/false" - }, - { - "username": "root", - "password": "*", - "uid": "0", - "gid": "0", - "comment": "System Administrator", - "home": "/var/root", - "shell": "/bin/sh" - }, - { - "username": "daemon", - "password": "*", - "uid": "1", - "gid": "1", - "comment": "System Services", - "home": "/var/root", - "shell": "/usr/bin/false" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/ping.md b/docs/parsers/ping.md index e20ca0c4..da271570 100644 --- a/docs/parsers/ping.md +++ b/docs/parsers/ping.md @@ -1,193 +1,205 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ping + jc - JSON CLI output utility `ping` command output parser Supports `ping` and `ping6` output. Usage (cli): - Note: Use the ping `-c` (count) option, otherwise data will not be - piped to `jc`. +Note: Use the ping `-c` (count) option, otherwise data will not be +piped to `jc`. - $ ping -c 3 1.2.3.4 | jc --ping +$ ping -c 3 1.2.3.4 | jc --ping - or +or - $ jc ping -c 3 1.2.3.4 +$ jc ping -c 3 1.2.3.4 Usage (module): - import jc - result = jc.parse('ping', ping_command_output) +import jc +result = jc.parse('ping', ping_command_output) - or +or - import jc.parsers.ping - result = jc.parsers.ping.parse(ping_command_output) +import jc.parsers.ping +result = jc.parsers.ping.parse(ping_command_output) Schema: - { - "source_ip": string, - "destination_ip": string, - "data_bytes": integer, - "pattern": string, # null if not set - "destination": string, - "packets_transmitted": integer, - "packets_received": integer, - "packet_loss_percent": float, - "duplicates": integer, - "round_trip_ms_min": float, - "round_trip_ms_avg": float, - "round_trip_ms_max": float, - "round_trip_ms_stddev": float, - "responses": [ - { - "type": string, # [0] - "unparsed_line": string, # [1] - "timestamp": float, - "bytes": integer, - "response_ip": string, - "icmp_seq": integer, - "ttl": integer, - "time_ms": float, - "duplicate": boolean, - "vr": integer, # [2] - "hl": integer, # [2] - "tos": integer, # [2] - "len": integer, # [2] - "id": integer, # [2] - "flg": integer, # [2] - "off": integer, # [2] - "pro": integer, # [2] - "cks": ingeger, # [2] - "src": string, - "dst": string - } - ] - } +{ +"source_ip": string, +"destination_ip": string, +"data_bytes": integer, +"pattern": string, # null if not set +"destination": string, +"packets_transmitted": integer, +"packets_received": integer, +"packet_loss_percent": float, +"duplicates": integer, +"round_trip_ms_min": float, +"round_trip_ms_avg": float, +"round_trip_ms_max": float, +"round_trip_ms_stddev": float, +"responses": [ +{ +"type": string, # [0] +"unparsed_line": string, # [1] +"timestamp": float, +"bytes": integer, +"response_ip": string, +"icmp_seq": integer, +"ttl": integer, +"time_ms": float, +"duplicate": boolean, +"vr": integer, # [2] +"hl": integer, # [2] +"tos": integer, # [2] +"len": integer, # [2] +"id": integer, # [2] +"flg": integer, # [2] +"off": integer, # [2] +"pro": integer, # [2] +"cks": ingeger, # [2] +"src": string, +"dst": string +} +] +} - [0] 'reply', 'timeout', 'unparsable_line', etc. See - `_error_type.type_map` for all options - [1] only if an 'unparsable_line' type - [2] hex value converted to decimal +[0] 'reply', 'timeout', 'unparsable_line', etc. See +`_error_type.type_map` for all options +[1] only if an 'unparsable_line' type +[2] hex value converted to decimal -Examples: +**Examples**: - $ ping -c 3 -p ff cnn.com | jc --ping -p - { - "destination_ip": "151.101.1.67", - "data_bytes": 56, - "pattern": "0xff", - "destination": "cnn.com", - "packets_transmitted": 3, - "packets_received": 3, - "packet_loss_percent": 0.0, - "duplicates": 0, - "round_trip_ms_min": 28.015, - "round_trip_ms_avg": 32.848, - "round_trip_ms_max": 39.376, - "round_trip_ms_stddev": 4.79, - "responses": [ - { - "type": "reply", - "bytes": 64, - "response_ip": "151.101.1.67", - "icmp_seq": 0, - "ttl": 59, - "time_ms": 28.015, - "duplicate": false - }, - { - "type": "reply", - "bytes": 64, - "response_ip": "151.101.1.67", - "icmp_seq": 1, - "ttl": 59, - "time_ms": 39.376, - "duplicate": false - }, - { - "type": "reply", - "bytes": 64, - "response_ip": "151.101.1.67", - "icmp_seq": 2, - "ttl": 59, - "time_ms": 31.153, - "duplicate": false - } - ] - } + + $ ping -c 3 -p ff cnn.com | jc --ping -p + { +- `"destination_ip"` - "151.101.1.67", +- `"data_bytes"` - 56, +- `"pattern"` - "0xff", +- `"destination"` - "cnn.com", +- `"packets_transmitted"` - 3, +- `"packets_received"` - 3, +- `"packet_loss_percent"` - 0.0, +- `"duplicates"` - 0, +- `"round_trip_ms_min"` - 28.015, +- `"round_trip_ms_avg"` - 32.848, +- `"round_trip_ms_max"` - 39.376, +- `"round_trip_ms_stddev"` - 4.79, +- `"responses"` - [ + { +- `"type"` - "reply", +- `"bytes"` - 64, +- `"response_ip"` - "151.101.1.67", +- `"icmp_seq"` - 0, +- `"ttl"` - 59, +- `"time_ms"` - 28.015, +- `"duplicate"` - false + }, + { +- `"type"` - "reply", +- `"bytes"` - 64, +- `"response_ip"` - "151.101.1.67", +- `"icmp_seq"` - 1, +- `"ttl"` - 59, +- `"time_ms"` - 39.376, +- `"duplicate"` - false + }, + { +- `"type"` - "reply", +- `"bytes"` - 64, +- `"response_ip"` - "151.101.1.67", +- `"icmp_seq"` - 2, +- `"ttl"` - 59, +- `"time_ms"` - 31.153, +- `"duplicate"` - false + } + ] + } + + $ ping -c 3 -p ff cnn.com | jc --ping -p -r + { +- `"destination_ip"` - "151.101.129.67", +- `"data_bytes"` - "56", +- `"pattern"` - "0xff", +- `"destination"` - "cnn.com", +- `"packets_transmitted"` - "3", +- `"packets_received"` - "3", +- `"packet_loss_percent"` - "0.0", +- `"duplicates"` - "0", +- `"round_trip_ms_min"` - "25.078", +- `"round_trip_ms_avg"` - "29.543", +- `"round_trip_ms_max"` - "32.553", +- `"round_trip_ms_stddev"` - "3.221", +- `"responses"` - [ + { +- `"type"` - "reply", +- `"bytes"` - "64", +- `"response_ip"` - "151.101.129.67", +- `"icmp_seq"` - "0", +- `"ttl"` - "59", +- `"time_ms"` - "25.078", +- `"duplicate"` - false + }, + { +- `"type"` - "reply", +- `"bytes"` - "64", +- `"response_ip"` - "151.101.129.67", +- `"icmp_seq"` - "1", +- `"ttl"` - "59", +- `"time_ms"` - "30.999", +- `"duplicate"` - false + }, + { +- `"type"` - "reply", +- `"bytes"` - "64", +- `"response_ip"` - "151.101.129.67", +- `"icmp_seq"` - "2", +- `"ttl"` - "59", +- `"time_ms"` - "32.553", +- `"duplicate"` - false + } + ] + } - $ ping -c 3 -p ff cnn.com | jc --ping -p -r - { - "destination_ip": "151.101.129.67", - "data_bytes": "56", - "pattern": "0xff", - "destination": "cnn.com", - "packets_transmitted": "3", - "packets_received": "3", - "packet_loss_percent": "0.0", - "duplicates": "0", - "round_trip_ms_min": "25.078", - "round_trip_ms_avg": "29.543", - "round_trip_ms_max": "32.553", - "round_trip_ms_stddev": "3.221", - "responses": [ - { - "type": "reply", - "bytes": "64", - "response_ip": "151.101.129.67", - "icmp_seq": "0", - "ttl": "59", - "time_ms": "25.078", - "duplicate": false - }, - { - "type": "reply", - "bytes": "64", - "response_ip": "151.101.129.67", - "icmp_seq": "1", - "ttl": "59", - "time_ms": "30.999", - "duplicate": false - }, - { - "type": "reply", - "bytes": "64", - "response_ip": "151.101.129.67", - "icmp_seq": "2", - "ttl": "59", - "time_ms": "32.553", - "duplicate": false - } - ] - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/ping_s.md b/docs/parsers/ping_s.md index 6d8913af..e95b9733 100644 --- a/docs/parsers/ping_s.md +++ b/docs/parsers/ping_s.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.ping\_s -# jc.parsers.ping_s jc - JSON CLI output utility `ping` command output streaming parser > This streaming parser outputs JSON Lines @@ -9,113 +11,125 @@ Supports `ping` and `ping6` output. Usage (cli): - $ ping | jc --ping-s +$ ping | jc --ping-s > Note: When piping `jc` converted `ping` output to other processes it may - appear the output is hanging due to the OS pipe buffers. This is because - `ping` output is too small to quickly fill up the buffer. Use the `-u` - option to unbuffer the `jc` output if you would like immediate output. - See the [readme](https://github.com/kellyjonbrazil/jc/tree/master#unbuffering-output) - for more information. +appear the output is hanging due to the OS pipe buffers. This is because +`ping` output is too small to quickly fill up the buffer. Use the `-u` +option to unbuffer the `jc` output if you would like immediate output. +See the [readme](https://github.com/kellyjonbrazil/jc/tree/master#unbuffering-output) +for more information. Usage (module): - import jc - # result is an iterable object (generator) - result = jc.parse('ping_s', ping_command_output.splitlines()) - for item in result: - # do something +import jc +# result is an iterable object (generator) +result = jc.parse('ping_s', ping_command_output.splitlines()) +for item in result: +# do something - or +or - import jc.parsers.ping_s - # result is an iterable object (generator) - result = jc.parsers.ping_s.parse(ping_command_output.splitlines()) - for item in result: - # do something +import jc.parsers.ping_s +# result is an iterable object (generator) +result = jc.parsers.ping_s.parse(ping_command_output.splitlines()) +for item in result: +# do something Schema: - { - "type": string, # [0] - "source_ip": string, - "destination_ip": string, - "sent_bytes": integer, - "pattern": string, # (null if not set) - "destination": string, - "timestamp": float, - "response_bytes": integer, - "response_ip": string, - "icmp_seq": integer, - "ttl": integer, - "time_ms": float, - "duplicate": boolean, - "packets_transmitted": integer, - "packets_received": integer, - "packet_loss_percent": float, - "duplicates": integer, - "round_trip_ms_min": float, - "round_trip_ms_avg": float, - "round_trip_ms_max": float, - "round_trip_ms_stddev": float, +{ +"type": string, # [0] +"source_ip": string, +"destination_ip": string, +"sent_bytes": integer, +"pattern": string, # (null if not set) +"destination": string, +"timestamp": float, +"response_bytes": integer, +"response_ip": string, +"icmp_seq": integer, +"ttl": integer, +"time_ms": float, +"duplicate": boolean, +"packets_transmitted": integer, +"packets_received": integer, +"packet_loss_percent": float, +"duplicates": integer, +"round_trip_ms_min": float, +"round_trip_ms_avg": float, +"round_trip_ms_max": float, +"round_trip_ms_stddev": float, - # Below object only exists if using -qq or ignore_exceptions=True +# Below object only exists if using -qq or ignore_exceptions=True - "_jc_meta": - { - "success": boolean, # false if error parsing - "error": string, # exists if "success" is false - "line": string # exists if "success" is false - } - } +"_jc_meta": +{ +"success": boolean, # false if error parsing +"error": string, # exists if "success" is false +"line": string # exists if "success" is false +} +} - [0] 'reply', 'timeout', 'summary', etc. See `_error_type.type_map` - for all options. +[0] 'reply', 'timeout', 'summary', etc. See `_error_type.type_map` +for all options. -Examples: +**Examples**: - $ ping 1.1.1.1 | jc --ping-s - {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":56,"patte...} - {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":56,"patte...} - {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":56,"patte...} - ... + + $ ping 1.1.1.1 | jc --ping-s + {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":56,"patte...} + {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":56,"patte...} + {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":56,"patte...} + ... + + $ ping 1.1.1.1 | jc --ping-s -r + {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":"56","patte...} + {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":"56","patte...} + {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":"56","patte...} + ... - $ ping 1.1.1.1 | jc --ping-s -r - {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":"56","patte...} - {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":"56","patte...} - {"type":"reply","destination_ip":"1.1.1.1","sent_bytes":"56","patte...} - ... + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False, ignore_exceptions=False) +def parse(data, raw=False, quiet=False, ignore_exceptions=False) ``` Main text parsing generator function. Returns an iterator object. -Parameters: +**Arguments**: - data: (iterable) line-based text data to parse - (e.g. sys.stdin or str.splitlines()) + +- `data` - (iterable) line-based text data to parse + (e.g. sys.stdin or str.splitlines()) + +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True +- `ignore_exceptions` - (boolean) ignore parsing exceptions if True + - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True - ignore_exceptions: (boolean) ignore parsing exceptions if True +**Yields**: -Yields: + + Dictionary. Raw or processed structured data. + - Dictionary. Raw or processed structured data. +**Returns**: -Returns: - - Iterator object + + Iterator object ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/pip_list.md b/docs/parsers/pip_list.md index d63c4afb..581ecdd8 100644 --- a/docs/parsers/pip_list.md +++ b/docs/parsers/pip_list.md @@ -1,78 +1,90 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.pip\_list -# jc.parsers.pip_list jc - JSON CLI output utility `pip-list` command output parser Usage (cli): - $ pip list | jc --pip-list +$ pip list | jc --pip-list - or +or - $ jc pip list +$ jc pip list Usage (module): - import jc - result = jc.parse('pip_list', pip_list_command_output) +import jc +result = jc.parse('pip_list', pip_list_command_output) - or +or - import jc.parsers.pip_list - result = jc.parsers.pip_list.parse(pip_list_command_output) +import jc.parsers.pip_list +result = jc.parsers.pip_list.parse(pip_list_command_output) Schema: - [ - { - "package": string, - "version": string, - "location": string - } - ] +[ +{ +"package": string, +"version": string, +"location": string +} +] -Examples: +**Examples**: - $ pip list | jc --pip-list -p - [ - { - "package": "ansible", - "version": "2.8.5" - }, - { - "package": "antlr4-python3-runtime", - "version": "4.7.2" - }, - { - "package": "asn1crypto", - "version": "0.24.0" - }, - ... - ] + + $ pip list | jc --pip-list -p + [ + { +- `"package"` - "ansible", +- `"version"` - "2.8.5" + }, + { +- `"package"` - "antlr4-python3-runtime", +- `"version"` - "4.7.2" + }, + { +- `"package"` - "asn1crypto", +- `"version"` - "0.24.0" + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/pip_show.md b/docs/parsers/pip_show.md index cc6c43c7..8b230b91 100644 --- a/docs/parsers/pip_show.md +++ b/docs/parsers/pip_show.md @@ -1,96 +1,108 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.pip\_show -# jc.parsers.pip_show jc - JSON CLI output utility `pip-show` command output parser Usage (cli): - $ pip show | jc --pip-show +$ pip show | jc --pip-show - or +or - $ jc pip show +$ jc pip show Usage (module): - import jc - result = jc.parse('pip_show', pip_show_command_output) +import jc +result = jc.parse('pip_show', pip_show_command_output) - or +or - import jc.parsers.pip_show - result = jc.parsers.pip_show.parse(pip_show_command_output) +import jc.parsers.pip_show +result = jc.parsers.pip_show.parse(pip_show_command_output) Schema: - [ - { - "name": string, - "version": string, - "summary": string, - "home_page": string, - "author": string, - "author_email": string, - "license": string, - "location": string, - "requires": string, - "required_by": string - } - ] +[ +{ +"name": string, +"version": string, +"summary": string, +"home_page": string, +"author": string, +"author_email": string, +"license": string, +"location": string, +"requires": string, +"required_by": string +} +] -Examples: +**Examples**: - $ pip show wrapt jc wheel | jc --pip-show -p - [ - { - "name": "wrapt", - "version": "1.11.2", - "summary": "Module for decorators, wrappers and monkey patching.", - "home_page": "https://github.com/GrahamDumpleton/wrapt", - "author": "Graham Dumpleton", - "author_email": "Graham.Dumpleton@gmail.com", - "license": "BSD", - "location": "/usr/local/lib/python3.7/site-packages", - "requires": null, - "required_by": "astroid" - }, - { - "name": "wheel", - "version": "0.33.4", - "summary": "A built-package format for Python.", - "home_page": "https://github.com/pypa/wheel", - "author": "Daniel Holth", - "author_email": "dholth@fastmail.fm", - "license": "MIT", - "location": "/usr/local/lib/python3.7/site-packages", - "requires": null, - "required_by": null - } - ] + + $ pip show wrapt jc wheel | jc --pip-show -p + [ + { +- `"name"` - "wrapt", +- `"version"` - "1.11.2", +- `"summary"` - "Module for decorators, wrappers and monkey patching.", +- `"home_page"` - "https://github.com/GrahamDumpleton/wrapt", +- `"author"` - "Graham Dumpleton", +- `"author_email"` - "Graham.Dumpleton@gmail.com", +- `"license"` - "BSD", +- `"location"` - "/usr/local/lib/python3.7/site-packages", +- `"requires"` - null, +- `"required_by"` - "astroid" + }, + { +- `"name"` - "wheel", +- `"version"` - "0.33.4", +- `"summary"` - "A built-package format for Python.", +- `"home_page"` - "https://github.com/pypa/wheel", +- `"author"` - "Daniel Holth", +- `"author_email"` - "dholth@fastmail.fm", +- `"license"` - "MIT", +- `"location"` - "/usr/local/lib/python3.7/site-packages", +- `"requires"` - null, +- `"required_by"` - null + } + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/ps.md b/docs/parsers/ps.md index 85f1cc8a..46adf0ee 100644 --- a/docs/parsers/ps.md +++ b/docs/parsers/ps.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ps + jc - JSON CLI output utility `ps` command output parser `ps` options supported: @@ -9,229 +11,239 @@ jc - JSON CLI output utility `ps` command output parser Usage (cli): - $ ps | jc --ps +$ ps | jc --ps - or +or - $ jc ps +$ jc ps Usage (module): - import jc - result = jc.parse('ps', ps_command_output) +import jc +result = jc.parse('ps', ps_command_output) - or +or - import jc.parsers.ps - result = jc.parsers.ps.parse(ps_command_output) +import jc.parsers.ps +result = jc.parsers.ps.parse(ps_command_output) Schema: - [ - { - "uid": string, - "pid": integer, - "ppid": integer, - "c": integer, - "stime": string, - "tty": string, # ? or ?? = Null - "tt": string, # ?? = Null - "time": string, - "cmd": string, - "user": string, - "cpu_percent": float, - "mem_percent": float, - "vsz": integer, - "rss": integer, - "stat": string, - "start": string, - "command": string - } - ] +[ +{ +"uid": string, +"pid": integer, +"ppid": integer, +"c": integer, +"stime": string, +"tty": string, # ? or ?? = Null +"tt": string, # ?? = Null +"time": string, +"cmd": string, +"user": string, +"cpu_percent": float, +"mem_percent": float, +"vsz": integer, +"rss": integer, +"stat": string, +"start": string, +"command": string +} +] -Examples: +**Examples**: - $ ps -ef | jc --ps -p - [ - { - "uid": "root", - "pid": 1, - "ppid": 0, - "c": 0, - "stime": "Nov01", - "tty": null, - "time": "00:00:11", - "cmd": "/usr/lib/systemd/systemd --switched-root --system --dese..." - }, - { - "uid": "root", - "pid": 2, - "ppid": 0, - "c": 0, - "stime": "Nov01", - "tty": null, - "time": "00:00:00", - "cmd": "[kthreadd]" - }, - { - "uid": "root", - "pid": 4, - "ppid": 2, - "c": 0, - "stime": "Nov01", - "tty": null, - "time": "00:00:00", - "cmd": "[kworker/0:0H]" - }, - ... - ] + + $ ps -ef | jc --ps -p + [ + { +- `"uid"` - "root", +- `"pid"` - 1, +- `"ppid"` - 0, +- `"c"` - 0, +- `"stime"` - "Nov01", +- `"tty"` - null, +- `"time"` - "00:00:11", +- `"cmd"` - "/usr/lib/systemd/systemd --switched-root --system --dese..." + }, + { +- `"uid"` - "root", +- `"pid"` - 2, +- `"ppid"` - 0, +- `"c"` - 0, +- `"stime"` - "Nov01", +- `"tty"` - null, +- `"time"` - "00:00:00", +- `"cmd"` - "[kthreadd]" + }, + { +- `"uid"` - "root", +- `"pid"` - 4, +- `"ppid"` - 2, +- `"c"` - 0, +- `"stime"` - "Nov01", +- `"tty"` - null, +- `"time"` - "00:00:00", +- `"cmd"` - "[kworker/0:0H]" + }, + ... + ] + + $ ps -ef | jc --ps -p -r + [ + { +- `"uid"` - "root", +- `"pid"` - "1", +- `"ppid"` - "0", +- `"c"` - "0", +- `"stime"` - "Nov01", +- `"tty"` - "?", +- `"time"` - "00:00:11", +- `"cmd"` - "/usr/lib/systemd/systemd --switched-root --system --dese..." + }, + { +- `"uid"` - "root", +- `"pid"` - "2", +- `"ppid"` - "0", +- `"c"` - "0", +- `"stime"` - "Nov01", +- `"tty"` - "?", +- `"time"` - "00:00:00", +- `"cmd"` - "[kthreadd]" + }, + { +- `"uid"` - "root", +- `"pid"` - "4", +- `"ppid"` - "2", +- `"c"` - "0", +- `"stime"` - "Nov01", +- `"tty"` - "?", +- `"time"` - "00:00:00", +- `"cmd"` - "[kworker/0:0H]" + }, + ... + ] + + $ ps axu | jc --ps -p + [ + { +- `"user"` - "root", +- `"pid"` - 1, +- `"cpu_percent"` - 0.0, +- `"mem_percent"` - 0.1, +- `"vsz"` - 128072, +- `"rss"` - 6784, +- `"tty"` - null, +- `"stat"` - "Ss", +- `"start"` - "Nov09", +- `"time"` - "0:08", +- `"command"` - "/usr/lib/systemd/systemd --switched-root --system --..." + }, + { +- `"user"` - "root", +- `"pid"` - 2, +- `"cpu_percent"` - 0.0, +- `"mem_percent"` - 0.0, +- `"vsz"` - 0, +- `"rss"` - 0, +- `"tty"` - null, +- `"stat"` - "S", +- `"start"` - "Nov09", +- `"time"` - "0:00", +- `"command"` - "[kthreadd]" + }, + { +- `"user"` - "root", +- `"pid"` - 4, +- `"cpu_percent"` - 0.0, +- `"mem_percent"` - 0.0, +- `"vsz"` - 0, +- `"rss"` - 0, +- `"tty"` - null, +- `"stat"` - "S<", +- `"start"` - "Nov09", +- `"time"` - "0:00", +- `"command"` - "[kworker/0:0H]" + }, + ... + ] + + $ ps axu | jc --ps -p -r + [ + { +- `"user"` - "root", +- `"pid"` - "1", +- `"cpu_percent"` - "0.0", +- `"mem_percent"` - "0.1", +- `"vsz"` - "128072", +- `"rss"` - "6784", +- `"tty"` - "?", +- `"stat"` - "Ss", +- `"start"` - "Nov09", +- `"time"` - "0:08", +- `"command"` - "/usr/lib/systemd/systemd --switched-root --system --..." + }, + { +- `"user"` - "root", +- `"pid"` - "2", +- `"cpu_percent"` - "0.0", +- `"mem_percent"` - "0.0", +- `"vsz"` - "0", +- `"rss"` - "0", +- `"tty"` - "?", +- `"stat"` - "S", +- `"start"` - "Nov09", +- `"time"` - "0:00", +- `"command"` - "[kthreadd]" + }, + { +- `"user"` - "root", +- `"pid"` - "4", +- `"cpu_percent"` - "0.0", +- `"mem_percent"` - "0.0", +- `"vsz"` - "0", +- `"rss"` - "0", +- `"tty"` - "?", +- `"stat"` - "S<", +- `"start"` - "Nov09", +- `"time"` - "0:00", +- `"command"` - "[kworker/0:0H]" + }, + ... + ] - $ ps -ef | jc --ps -p -r - [ - { - "uid": "root", - "pid": "1", - "ppid": "0", - "c": "0", - "stime": "Nov01", - "tty": "?", - "time": "00:00:11", - "cmd": "/usr/lib/systemd/systemd --switched-root --system --dese..." - }, - { - "uid": "root", - "pid": "2", - "ppid": "0", - "c": "0", - "stime": "Nov01", - "tty": "?", - "time": "00:00:00", - "cmd": "[kthreadd]" - }, - { - "uid": "root", - "pid": "4", - "ppid": "2", - "c": "0", - "stime": "Nov01", - "tty": "?", - "time": "00:00:00", - "cmd": "[kworker/0:0H]" - }, - ... - ] + - $ ps axu | jc --ps -p - [ - { - "user": "root", - "pid": 1, - "cpu_percent": 0.0, - "mem_percent": 0.1, - "vsz": 128072, - "rss": 6784, - "tty": null, - "stat": "Ss", - "start": "Nov09", - "time": "0:08", - "command": "/usr/lib/systemd/systemd --switched-root --system --..." - }, - { - "user": "root", - "pid": 2, - "cpu_percent": 0.0, - "mem_percent": 0.0, - "vsz": 0, - "rss": 0, - "tty": null, - "stat": "S", - "start": "Nov09", - "time": "0:00", - "command": "[kthreadd]" - }, - { - "user": "root", - "pid": 4, - "cpu_percent": 0.0, - "mem_percent": 0.0, - "vsz": 0, - "rss": 0, - "tty": null, - "stat": "S<", - "start": "Nov09", - "time": "0:00", - "command": "[kworker/0:0H]" - }, - ... - ] +## info Objects - $ ps axu | jc --ps -p -r - [ - { - "user": "root", - "pid": "1", - "cpu_percent": "0.0", - "mem_percent": "0.1", - "vsz": "128072", - "rss": "6784", - "tty": "?", - "stat": "Ss", - "start": "Nov09", - "time": "0:08", - "command": "/usr/lib/systemd/systemd --switched-root --system --..." - }, - { - "user": "root", - "pid": "2", - "cpu_percent": "0.0", - "mem_percent": "0.0", - "vsz": "0", - "rss": "0", - "tty": "?", - "stat": "S", - "start": "Nov09", - "time": "0:00", - "command": "[kthreadd]" - }, - { - "user": "root", - "pid": "4", - "cpu_percent": "0.0", - "mem_percent": "0.0", - "vsz": "0", - "rss": "0", - "tty": "?", - "stat": "S<", - "start": "Nov09", - "time": "0:00", - "command": "[kworker/0:0H]" - }, - ... - ] - - -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/route.md b/docs/parsers/route.md index 0615d264..1ca4eac2 100644 --- a/docs/parsers/route.md +++ b/docs/parsers/route.md @@ -1,139 +1,151 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.route + jc - JSON CLI output utility `route` command output parser Usage (cli): - $ route | jc --route +$ route | jc --route - or +or - $ jc route +$ jc route Usage (module): - import jc - result = jc.parse('route', route_command_output) +import jc +result = jc.parse('route', route_command_output) - or +or - import jc.parsers.route - result = jc.parsers.route.parse(route_command_output) +import jc.parsers.route +result = jc.parsers.route.parse(route_command_output) Schema: - [ - { - "destination": string, - "gateway": string, - "genmask": string, - "flags": string, - "flags_pretty": [ - string - ] - "metric": integer, - "ref": integer, - "use": integer, - "mss": integer, - "window": integer, - "irtt": integer, - "iface": string - } - ] +[ +{ +"destination": string, +"gateway": string, +"genmask": string, +"flags": string, +"flags_pretty": [ +string +] +"metric": integer, +"ref": integer, +"use": integer, +"mss": integer, +"window": integer, +"irtt": integer, +"iface": string +} +] -Examples: +**Examples**: - $ route -ee | jc --route -p - [ - { - "destination": "default", - "gateway": "_gateway", - "genmask": "0.0.0.0", - "flags": "UG", - "metric": 202, - "ref": 0, - "use": 0, - "iface": "ens33", - "mss": 0, - "window": 0, - "irtt": 0, - "flags_pretty": [ - "UP", - "GATEWAY" - ] - }, - { - "destination": "192.168.71.0", - "gateway": "0.0.0.0", - "genmask": "255.255.255.0", - "flags": "U", - "metric": 202, - "ref": 0, - "use": 0, - "iface": "ens33", - "mss": 0, - "window": 0, - "irtt": 0, - "flags_pretty": [ - "UP" - ] - } - ] + + $ route -ee | jc --route -p + [ + { +- `"destination"` - "default", +- `"gateway"` - "_gateway", +- `"genmask"` - "0.0.0.0", +- `"flags"` - "UG", +- `"metric"` - 202, +- `"ref"` - 0, +- `"use"` - 0, +- `"iface"` - "ens33", +- `"mss"` - 0, +- `"window"` - 0, +- `"irtt"` - 0, +- `"flags_pretty"` - [ + "UP", + "GATEWAY" + ] + }, + { +- `"destination"` - "192.168.71.0", +- `"gateway"` - "0.0.0.0", +- `"genmask"` - "255.255.255.0", +- `"flags"` - "U", +- `"metric"` - 202, +- `"ref"` - 0, +- `"use"` - 0, +- `"iface"` - "ens33", +- `"mss"` - 0, +- `"window"` - 0, +- `"irtt"` - 0, +- `"flags_pretty"` - [ + "UP" + ] + } + ] + + $ route -ee | jc --route -p -r + [ + { +- `"destination"` - "default", +- `"gateway"` - "_gateway", +- `"genmask"` - "0.0.0.0", +- `"flags"` - "UG", +- `"metric"` - "202", +- `"ref"` - "0", +- `"use"` - "0", +- `"iface"` - "ens33", +- `"mss"` - "0", +- `"window"` - "0", +- `"irtt"` - "0" + }, + { +- `"destination"` - "192.168.71.0", +- `"gateway"` - "0.0.0.0", +- `"genmask"` - "255.255.255.0", +- `"flags"` - "U", +- `"metric"` - "202", +- `"ref"` - "0", +- `"use"` - "0", +- `"iface"` - "ens33", +- `"mss"` - "0", +- `"window"` - "0", +- `"irtt"` - "0" + } + ] - $ route -ee | jc --route -p -r - [ - { - "destination": "default", - "gateway": "_gateway", - "genmask": "0.0.0.0", - "flags": "UG", - "metric": "202", - "ref": "0", - "use": "0", - "iface": "ens33", - "mss": "0", - "window": "0", - "irtt": "0" - }, - { - "destination": "192.168.71.0", - "gateway": "0.0.0.0", - "genmask": "255.255.255.0", - "flags": "U", - "metric": "202", - "ref": "0", - "use": "0", - "iface": "ens33", - "mss": "0", - "window": "0", - "irtt": "0" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/rpm_qi.md b/docs/parsers/rpm_qi.md index 5125ac7a..272b6495 100644 --- a/docs/parsers/rpm_qi.md +++ b/docs/parsers/rpm_qi.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.rpm\_qi -# jc.parsers.rpm_qi jc - JSON CLI output utility `rpm -qi` command output parser Works with `rpm -qi [package]` or `rpm -qia`. @@ -13,180 +15,190 @@ only available if the timezone field is UTC. Usage (cli): - $ rpm -qia | jc --rpm-qi +$ rpm -qia | jc --rpm-qi - or +or - $ jc rpm -qia +$ jc rpm -qia Usage (module): - import jc - result = jc.parse('rpm_qi', rpm_qi_command_output) +import jc +result = jc.parse('rpm_qi', rpm_qi_command_output) - or +or - import jc.parsers.rpm_qi - result = jc.parsers.rpm_qi.parse(rpm_qi_command_output) +import jc.parsers.rpm_qi +result = jc.parsers.rpm_qi.parse(rpm_qi_command_output) Schema: - [ - { - "name": string, - "epoch": integer, - "version": string, - "release": string, - "architecture": string, - "install_date": string, - "install_date_epoch": integer, # [0] - "install_date_epoch_utc": integer, # [1] - "group": string, - "size": integer, - "license": string, - "signature": string, - "source_rpm": string, - "build_date": string, - "build_epoch": integer, # [0] - "build_epoch_utc": integer, # [1] - "build_host": string, - "relocations": string, - "packager": string, - "vendor": string, - "url": string, - "summary": string, - "description": string - } - ] +[ +{ +"name": string, +"epoch": integer, +"version": string, +"release": string, +"architecture": string, +"install_date": string, +"install_date_epoch": integer, # [0] +"install_date_epoch_utc": integer, # [1] +"group": string, +"size": integer, +"license": string, +"signature": string, +"source_rpm": string, +"build_date": string, +"build_epoch": integer, # [0] +"build_epoch_utc": integer, # [1] +"build_host": string, +"relocations": string, +"packager": string, +"vendor": string, +"url": string, +"summary": string, +"description": string +} +] - [0] naive timestamp - [1] Aware timestamp if timezone is UTC +[0] naive timestamp +[1] Aware timestamp if timezone is UTC -Examples: +**Examples**: - $ rpm -qia | jc --rpm-qi -p - [ - { - "name": "make", - "epoch": 1, - "version": "3.82", - "release": "24.el7", - "architecture": "x86_64", - "install_date": "Wed 16 Oct 2019 09:21:42 AM PDT", - "group": "Development/Tools", - "size": 1160660, - "license": "GPLv2+", - "signature": "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...", - "source_rpm": "make-3.82-24.el7.src.rpm", - "build_date": "Thu 08 Aug 2019 05:47:25 PM PDT", - "build_host": "x86-01.bsys.centos.org", - "relocations": "(not relocatable)", - "packager": "CentOS BuildSystem ", - "vendor": "CentOS", - "url": "http://www.gnu.org/software/make/", - "summary": "A GNU tool which simplifies the build process for ...", - "description": "A GNU tool for controlling the generation of ex...", - "build_epoch": 1565311645, - "build_epoch_utc": null, - "install_date_epoch": 1571242902, - "install_date_epoch_utc": null - }, - { - "name": "kbd-legacy", - "version": "1.15.5", - "release": "15.el7", - "architecture": "noarch", - "install_date": "Thu 15 Aug 2019 10:53:08 AM PDT", - "group": "System Environment/Base", - "size": 503608, - "license": "GPLv2+", - "signature": "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...", - "source_rpm": "kbd-1.15.5-15.el7.src.rpm", - "build_date": "Tue 30 Oct 2018 03:40:00 PM PDT", - "build_host": "x86-01.bsys.centos.org", - "relocations": "(not relocatable)", - "packager": "CentOS BuildSystem ", - "vendor": "CentOS", - "url": "http://ftp.altlinux.org/pub/people/legion/kbd", - "summary": "Legacy data for kbd package", - "description": "The kbd-legacy package contains original keymap...", - "build_epoch": 1540939200, - "build_epoch_utc": null, - "install_date_epoch": 1565891588, - "install_date_epoch_utc": null - }, - ... - ] + + $ rpm -qia | jc --rpm-qi -p + [ + { +- `"name"` - "make", +- `"epoch"` - 1, +- `"version"` - "3.82", +- `"release"` - "24.el7", +- `"architecture"` - "x86_64", +- `"install_date"` - "Wed 16 Oct 2019 09:21:42 AM PDT", +- `"group"` - "Development/Tools", +- `"size"` - 1160660, +- `"license"` - "GPLv2+", +- `"signature"` - "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...", +- `"source_rpm"` - "make-3.82-24.el7.src.rpm", +- `"build_date"` - "Thu 08 Aug 2019 05:47:25 PM PDT", +- `"build_host"` - "x86-01.bsys.centos.org", +- `"relocations"` - "(not relocatable)", +- `"packager"` - "CentOS BuildSystem ", +- `"vendor"` - "CentOS", +- `"url"` - "http://www.gnu.org/software/make/", +- `"summary"` - "A GNU tool which simplifies the build process for ...", +- `"description"` - "A GNU tool for controlling the generation of ex...", +- `"build_epoch"` - 1565311645, +- `"build_epoch_utc"` - null, +- `"install_date_epoch"` - 1571242902, +- `"install_date_epoch_utc"` - null + }, + { +- `"name"` - "kbd-legacy", +- `"version"` - "1.15.5", +- `"release"` - "15.el7", +- `"architecture"` - "noarch", +- `"install_date"` - "Thu 15 Aug 2019 10:53:08 AM PDT", +- `"group"` - "System Environment/Base", +- `"size"` - 503608, +- `"license"` - "GPLv2+", +- `"signature"` - "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...", +- `"source_rpm"` - "kbd-1.15.5-15.el7.src.rpm", +- `"build_date"` - "Tue 30 Oct 2018 03:40:00 PM PDT", +- `"build_host"` - "x86-01.bsys.centos.org", +- `"relocations"` - "(not relocatable)", +- `"packager"` - "CentOS BuildSystem ", +- `"vendor"` - "CentOS", +- `"url"` - "http://ftp.altlinux.org/pub/people/legion/kbd", +- `"summary"` - "Legacy data for kbd package", +- `"description"` - "The kbd-legacy package contains original keymap...", +- `"build_epoch"` - 1540939200, +- `"build_epoch_utc"` - null, +- `"install_date_epoch"` - 1565891588, +- `"install_date_epoch_utc"` - null + }, + ... + ] + + $ rpm -qia | jc --rpm-qi -p -r + [ + { +- `"name"` - "make", +- `"epoch"` - "1", +- `"version"` - "3.82", +- `"release"` - "24.el7", +- `"architecture"` - "x86_64", +- `"install_date"` - "Wed 16 Oct 2019 09:21:42 AM PDT", +- `"group"` - "Development/Tools", +- `"size"` - "1160660", +- `"license"` - "GPLv2+", +- `"signature"` - "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...", +- `"source_rpm"` - "make-3.82-24.el7.src.rpm", +- `"build_date"` - "Thu 08 Aug 2019 05:47:25 PM PDT", +- `"build_host"` - "x86-01.bsys.centos.org", +- `"relocations"` - "(not relocatable)", +- `"packager"` - "CentOS BuildSystem ", +- `"vendor"` - "CentOS", +- `"url"` - "http://www.gnu.org/software/make/", +- `"summary"` - "A GNU tool which simplifies the build process for...", +- `"description"` - "A GNU tool for controlling the generation of exe..." + }, + { +- `"name"` - "kbd-legacy", +- `"version"` - "1.15.5", +- `"release"` - "15.el7", +- `"architecture"` - "noarch", +- `"install_date"` - "Thu 15 Aug 2019 10:53:08 AM PDT", +- `"group"` - "System Environment/Base", +- `"size"` - "503608", +- `"license"` - "GPLv2+", +- `"signature"` - "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...", +- `"source_rpm"` - "kbd-1.15.5-15.el7.src.rpm", +- `"build_date"` - "Tue 30 Oct 2018 03:40:00 PM PDT", +- `"build_host"` - "x86-01.bsys.centos.org", +- `"relocations"` - "(not relocatable)", +- `"packager"` - "CentOS BuildSystem ", +- `"vendor"` - "CentOS", +- `"url"` - "http://ftp.altlinux.org/pub/people/legion/kbd", +- `"summary"` - "Legacy data for kbd package", +- `"description"` - "The kbd-legacy package contains original keymaps..." + }, + ... + ] - $ rpm -qia | jc --rpm-qi -p -r - [ - { - "name": "make", - "epoch": "1", - "version": "3.82", - "release": "24.el7", - "architecture": "x86_64", - "install_date": "Wed 16 Oct 2019 09:21:42 AM PDT", - "group": "Development/Tools", - "size": "1160660", - "license": "GPLv2+", - "signature": "RSA/SHA256, Thu 22 Aug 2019 02:34:59 PM PDT, Key ...", - "source_rpm": "make-3.82-24.el7.src.rpm", - "build_date": "Thu 08 Aug 2019 05:47:25 PM PDT", - "build_host": "x86-01.bsys.centos.org", - "relocations": "(not relocatable)", - "packager": "CentOS BuildSystem ", - "vendor": "CentOS", - "url": "http://www.gnu.org/software/make/", - "summary": "A GNU tool which simplifies the build process for...", - "description": "A GNU tool for controlling the generation of exe..." - }, - { - "name": "kbd-legacy", - "version": "1.15.5", - "release": "15.el7", - "architecture": "noarch", - "install_date": "Thu 15 Aug 2019 10:53:08 AM PDT", - "group": "System Environment/Base", - "size": "503608", - "license": "GPLv2+", - "signature": "RSA/SHA256, Mon 12 Nov 2018 07:17:49 AM PST, Key ...", - "source_rpm": "kbd-1.15.5-15.el7.src.rpm", - "build_date": "Tue 30 Oct 2018 03:40:00 PM PDT", - "build_host": "x86-01.bsys.centos.org", - "relocations": "(not relocatable)", - "packager": "CentOS BuildSystem ", - "vendor": "CentOS", - "url": "http://ftp.altlinux.org/pub/people/legion/kbd", - "summary": "Legacy data for kbd package", - "description": "The kbd-legacy package contains original keymaps..." - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/sfdisk.md b/docs/parsers/sfdisk.md index 70464fc1..25d6b609 100644 --- a/docs/parsers/sfdisk.md +++ b/docs/parsers/sfdisk.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.sfdisk + jc - JSON CLI output utility `sfdisk` command output parser Supports the following `sfdisk` options: @@ -14,220 +16,230 @@ Supports the following `sfdisk` options: Usage (cli): - # sfdisk -l | jc --sfdisk +# sfdisk -l | jc --sfdisk - or +or - # jc sfdisk -l +# jc sfdisk -l Usage (module): - import jc - result = jc.parse('sfdisk', sfdisk_command_output) +import jc +result = jc.parse('sfdisk', sfdisk_command_output) - or +or - import jc.parsers.sfdisk - result = jc.parsers.sfdisk.parse(sfdisk_command_output) +import jc.parsers.sfdisk +result = jc.parsers.sfdisk.parse(sfdisk_command_output) Schema: - [ - { - "disk": string, - "disk_size": string, - "free_disk_size": string, - "bytes": integer, - "free_bytes": integer, - "sectors": integer, - "free_sectors": integer, - "cylinders": integer, - "heads": integer, - "sectors_per_track": integer, - "units": string, - "logical_sector_size": integer, - "physical_sector_size": integer, - "min_io_size": integer, - "optimal_io_size": integer, - "disk_label_type": string, - "disk_identifier": string, - "disk_model": string, - "partitions": [ - { - "device": string, - "boot": boolean, - "start": integer, - "end": integer, - "size": string, # [0] - "cyls": integer, - "mib": integer, - "blocks": integer, - "sectors": integer, - "id": string, - "system": string, - "type": string - } - ] - } - ] +[ +{ +"disk": string, +"disk_size": string, +"free_disk_size": string, +"bytes": integer, +"free_bytes": integer, +"sectors": integer, +"free_sectors": integer, +"cylinders": integer, +"heads": integer, +"sectors_per_track": integer, +"units": string, +"logical_sector_size": integer, +"physical_sector_size": integer, +"min_io_size": integer, +"optimal_io_size": integer, +"disk_label_type": string, +"disk_identifier": string, +"disk_model": string, +"partitions": [ +{ +"device": string, +"boot": boolean, +"start": integer, +"end": integer, +"size": string, # [0] +"cyls": integer, +"mib": integer, +"blocks": integer, +"sectors": integer, +"id": string, +"system": string, +"type": string +} +] +} +] - [0] will be integer when using deprecated -d sfdisk option +[0] will be integer when using deprecated -d sfdisk option -Examples: +**Examples**: - # sfdisk -l | jc --sfdisk -p - [ - { - "disk": "/dev/sda", - "cylinders": 2610, - "heads": 255, - "sectors_per_track": 63, - "units": "cylinders of 8225280 bytes, blocks of 1024 bytes, ...", - "partitions": [ - { - "device": "/dev/sda1", - "boot": true, - "start": 0, - "end": 130, - "cyls": 131, - "blocks": 1048576, - "id": "83", - "system": "Linux" - }, - { - "device": "/dev/sda2", - "boot": false, - "start": 130, - "end": 2610, - "cyls": 2481, - "blocks": 19921920, - "id": "8e", - "system": "Linux LVM" - }, - { - "device": "/dev/sda3", - "boot": false, - "start": 0, - "end": null, - "cyls": 0, - "blocks": 0, - "id": "0", - "system": "Empty" - }, - { - "device": "/dev/sda4", - "boot": false, - "start": 0, - "end": null, - "cyls": 0, - "blocks": 0, - "id": "0", - "system": "Empty" - } - ] - }, - { - "disk": "/dev/mapper/centos-root", - "cylinders": 2218, - "heads": 255, - "sectors_per_track": 63 - }, - { - "disk": "/dev/mapper/centos-swap", - "cylinders": 261, - "heads": 255, - "sectors_per_track": 63 - } - ] + + # sfdisk -l | jc --sfdisk -p + [ + { +- `"disk"` - "/dev/sda", +- `"cylinders"` - 2610, +- `"heads"` - 255, +- `"sectors_per_track"` - 63, +- `"units"` - "cylinders of 8225280 bytes, blocks of 1024 bytes, ...", +- `"partitions"` - [ + { +- `"device"` - "/dev/sda1", +- `"boot"` - true, +- `"start"` - 0, +- `"end"` - 130, +- `"cyls"` - 131, +- `"blocks"` - 1048576, +- `"id"` - "83", +- `"system"` - "Linux" + }, + { +- `"device"` - "/dev/sda2", +- `"boot"` - false, +- `"start"` - 130, +- `"end"` - 2610, +- `"cyls"` - 2481, +- `"blocks"` - 19921920, +- `"id"` - "8e", +- `"system"` - "Linux LVM" + }, + { +- `"device"` - "/dev/sda3", +- `"boot"` - false, +- `"start"` - 0, +- `"end"` - null, +- `"cyls"` - 0, +- `"blocks"` - 0, +- `"id"` - "0", +- `"system"` - "Empty" + }, + { +- `"device"` - "/dev/sda4", +- `"boot"` - false, +- `"start"` - 0, +- `"end"` - null, +- `"cyls"` - 0, +- `"blocks"` - 0, +- `"id"` - "0", +- `"system"` - "Empty" + } + ] + }, + { +- `"disk"` - "/dev/mapper/centos-root", +- `"cylinders"` - 2218, +- `"heads"` - 255, +- `"sectors_per_track"` - 63 + }, + { +- `"disk"` - "/dev/mapper/centos-swap", +- `"cylinders"` - 261, +- `"heads"` - 255, +- `"sectors_per_track"` - 63 + } + ] + + # sfdisk -l | jc --sfdisk -p -r + [ + { +- `"disk"` - "/dev/sda", +- `"cylinders"` - "2610", +- `"heads"` - "255", +- `"sectors_per_track"` - "63", +- `"units"` - "cylinders of 8225280 bytes, blocks of 1024 bytes, co...", +- `"partitions"` - [ + { +- `"device"` - "/dev/sda1", +- `"boot"` - "*", +- `"start"` - "0+", +- `"end"` - "130-", +- `"cyls"` - "131-", +- `"blocks"` - "1048576", +- `"id"` - "83", +- `"system"` - "Linux" + }, + { +- `"device"` - "/dev/sda2", +- `"boot"` - null, +- `"start"` - "130+", +- `"end"` - "2610-", +- `"cyls"` - "2481-", +- `"blocks"` - "19921920", +- `"id"` - "8e", +- `"system"` - "Linux LVM" + }, + { +- `"device"` - "/dev/sda3", +- `"boot"` - null, +- `"start"` - "0", +- `"end"` - "-", +- `"cyls"` - "0", +- `"blocks"` - "0", +- `"id"` - "0", +- `"system"` - "Empty" + }, + { +- `"device"` - "/dev/sda4", +- `"boot"` - null, +- `"start"` - "0", +- `"end"` - "-", +- `"cyls"` - "0", +- `"blocks"` - "0", +- `"id"` - "0", +- `"system"` - "Empty" + } + ] + }, + { +- `"disk"` - "/dev/mapper/centos-root", +- `"cylinders"` - "2218", +- `"heads"` - "255", +- `"sectors_per_track"` - "63" + }, + { +- `"disk"` - "/dev/mapper/centos-swap", +- `"cylinders"` - "261", +- `"heads"` - "255", +- `"sectors_per_track"` - "63" + } + ] - # sfdisk -l | jc --sfdisk -p -r - [ - { - "disk": "/dev/sda", - "cylinders": "2610", - "heads": "255", - "sectors_per_track": "63", - "units": "cylinders of 8225280 bytes, blocks of 1024 bytes, co...", - "partitions": [ - { - "device": "/dev/sda1", - "boot": "*", - "start": "0+", - "end": "130-", - "cyls": "131-", - "blocks": "1048576", - "id": "83", - "system": "Linux" - }, - { - "device": "/dev/sda2", - "boot": null, - "start": "130+", - "end": "2610-", - "cyls": "2481-", - "blocks": "19921920", - "id": "8e", - "system": "Linux LVM" - }, - { - "device": "/dev/sda3", - "boot": null, - "start": "0", - "end": "-", - "cyls": "0", - "blocks": "0", - "id": "0", - "system": "Empty" - }, - { - "device": "/dev/sda4", - "boot": null, - "start": "0", - "end": "-", - "cyls": "0", - "blocks": "0", - "id": "0", - "system": "Empty" - } - ] - }, - { - "disk": "/dev/mapper/centos-root", - "cylinders": "2218", - "heads": "255", - "sectors_per_track": "63" - }, - { - "disk": "/dev/mapper/centos-swap", - "cylinders": "261", - "heads": "255", - "sectors_per_track": "63" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/shadow.md b/docs/parsers/shadow.md index d3323439..90b98c2a 100644 --- a/docs/parsers/shadow.md +++ b/docs/parsers/shadow.md @@ -1,132 +1,144 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.shadow + jc - JSON CLI output utility `/etc/shadow` file parser Usage (cli): - $ sudo cat /etc/shadow | jc --shadow +$ sudo cat /etc/shadow | jc --shadow Usage (module): - import jc - result = jc.parse('shadow', shadow_file_output) +import jc +result = jc.parse('shadow', shadow_file_output) - or +or - import jc.parsers.shadow - result = jc.parsers.shadow.parse(shadow_file_output) +import jc.parsers.shadow +result = jc.parsers.shadow.parse(shadow_file_output) Schema: - [ - { - "username": string, - "password": string, - "last_changed": integer, - "minimum": integer, - "maximum": integer, - "warn": integer, - "inactive": integer, - "expire": integer - } - ] +[ +{ +"username": string, +"password": string, +"last_changed": integer, +"minimum": integer, +"maximum": integer, +"warn": integer, +"inactive": integer, +"expire": integer +} +] -Examples: +**Examples**: - $ sudo cat /etc/shadow | jc --shadow -p - [ - { - "username": "root", - "password": "*", - "last_changed": 18113, - "minimum": 0, - "maximum": 99999, - "warn": 7, - "inactive": null, - "expire": null - }, - { - "username": "daemon", - "password": "*", - "last_changed": 18113, - "minimum": 0, - "maximum": 99999, - "warn": 7, - "inactive": null, - "expire": null - }, - { - "username": "bin", - "password": "*", - "last_changed": 18113, - "minimum": 0, - "maximum": 99999, - "warn": 7, - "inactive": null, - "expire": null - }, - ... - ] + + $ sudo cat /etc/shadow | jc --shadow -p + [ + { +- `"username"` - "root", +- `"password"` - "*", +- `"last_changed"` - 18113, +- `"minimum"` - 0, +- `"maximum"` - 99999, +- `"warn"` - 7, +- `"inactive"` - null, +- `"expire"` - null + }, + { +- `"username"` - "daemon", +- `"password"` - "*", +- `"last_changed"` - 18113, +- `"minimum"` - 0, +- `"maximum"` - 99999, +- `"warn"` - 7, +- `"inactive"` - null, +- `"expire"` - null + }, + { +- `"username"` - "bin", +- `"password"` - "*", +- `"last_changed"` - 18113, +- `"minimum"` - 0, +- `"maximum"` - 99999, +- `"warn"` - 7, +- `"inactive"` - null, +- `"expire"` - null + }, + ... + ] + + $ sudo cat /etc/shadow | jc --shadow -p -r + [ + { +- `"username"` - "root", +- `"password"` - "*", +- `"last_changed"` - "18113", +- `"minimum"` - "0", +- `"maximum"` - "99999", +- `"warn"` - "7", +- `"inactive"` - "", +- `"expire"` - "" + }, + { +- `"username"` - "daemon", +- `"password"` - "*", +- `"last_changed"` - "18113", +- `"minimum"` - "0", +- `"maximum"` - "99999", +- `"warn"` - "7", +- `"inactive"` - "", +- `"expire"` - "" + }, + { +- `"username"` - "bin", +- `"password"` - "*", +- `"last_changed"` - "18113", +- `"minimum"` - "0", +- `"maximum"` - "99999", +- `"warn"` - "7", +- `"inactive"` - "", +- `"expire"` - "" + }, + ... + ] - $ sudo cat /etc/shadow | jc --shadow -p -r - [ - { - "username": "root", - "password": "*", - "last_changed": "18113", - "minimum": "0", - "maximum": "99999", - "warn": "7", - "inactive": "", - "expire": "" - }, - { - "username": "daemon", - "password": "*", - "last_changed": "18113", - "minimum": "0", - "maximum": "99999", - "warn": "7", - "inactive": "", - "expire": "" - }, - { - "username": "bin", - "password": "*", - "last_changed": "18113", - "minimum": "0", - "maximum": "99999", - "warn": "7", - "inactive": "", - "expire": "" - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, aix, freebsd diff --git a/docs/parsers/ss.md b/docs/parsers/ss.md index a41d9a9f..47cf4331 100644 --- a/docs/parsers/ss.md +++ b/docs/parsers/ss.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ss + jc - JSON CLI output utility `ss` command output parser Extended information options like -e and -p are not supported and may cause @@ -8,304 +10,314 @@ parsing irregularities. Usage (cli): - $ ss | jc --ss +$ ss | jc --ss - or +or - $ jc ss +$ jc ss Usage (module): - import jc - result = jc.parse('ss', ss_command_output) +import jc +result = jc.parse('ss', ss_command_output) - or +or - import jc.parsers.ss - result = jc.parsers.ss.parse(ss_command_output) +import jc.parsers.ss +result = jc.parsers.ss.parse(ss_command_output) Schema: - Information from https://www.cyberciti.biz/files/ss.html used to define - field names +Information from https://www.cyberciti.biz/files/ss.html used to define +field names - [ - { - "netid": string, - "state": string, - "recv_q": integer, - "send_q": integer, - "local_address": string, - "local_port": string, - "local_port_num": integer, - "peer_address": string, - "peer_port": string, - "peer_port_num": integer, - "interface": string, - "link_layer" string, - "channel": string, - "path": string, - "pid": integer - } - ] +[ +{ +"netid": string, +"state": string, +"recv_q": integer, +"send_q": integer, +"local_address": string, +"local_port": string, +"local_port_num": integer, +"peer_address": string, +"peer_port": string, +"peer_port_num": integer, +"interface": string, +"link_layer" string, +"channel": string, +"path": string, +"pid": integer +} +] -Examples: +**Examples**: - $ sudo ss -a | jc --ss -p - [ - { - "netid": "nl", - "state": "UNCONN", - "recv_q": 0, - "send_q": 0, - "peer_address": "*", - "channel": "rtnl:kernel" - }, - { - "netid": "nl", - "state": "UNCONN", - "recv_q": 0, - "send_q": 0, - "peer_address": "*", - "pid": 893, - "channel": "rtnl:systemd-resolve" - }, - ... - { - "netid": "p_raw", - "state": "UNCONN", - "recv_q": 0, - "send_q": 0, - "peer_address": "*", - "link_layer": "LLDP", - "interface": "ens33" - }, - { - "netid": "u_dgr", - "state": "UNCONN", - "recv_q": 0, - "send_q": 0, - "local_port": "93066", - "peer_address": "*", - "peer_port": "0", - "path": "/run/user/1000/systemd/notify" - }, - { - "netid": "u_seq", - "state": "LISTEN", - "recv_q": 0, - "send_q": 128, - "local_port": "20699", - "peer_address": "*", - "peer_port": "0", - "path": "/run/udev/control" - }, - ... - { - "netid": "icmp6", - "state": "UNCONN", - "recv_q": 0, - "send_q": 0, - "local_address": "*", - "local_port": "ipv6-icmp", - "peer_address": "*", - "peer_port": "*", - "interface": "ens33" - }, - { - "netid": "udp", - "state": "UNCONN", - "recv_q": 0, - "send_q": 0, - "local_address": "127.0.0.53", - "local_port": "domain", - "peer_address": "0.0.0.0", - "peer_port": "*", - "interface": "lo" - }, - { - "netid": "tcp", - "state": "LISTEN", - "recv_q": 0, - "send_q": 128, - "local_address": "127.0.0.53", - "local_port": "domain", - "peer_address": "0.0.0.0", - "peer_port": "*", - "interface": "lo" - }, - { - "netid": "tcp", - "state": "LISTEN", - "recv_q": 0, - "send_q": 128, - "local_address": "0.0.0.0", - "local_port": "ssh", - "peer_address": "0.0.0.0", - "peer_port": "*" - }, - { - "netid": "tcp", - "state": "LISTEN", - "recv_q": 0, - "send_q": 128, - "local_address": "[::]", - "local_port": "ssh", - "peer_address": "[::]", - "peer_port": "*" - }, - { - "netid": "v_str", - "state": "ESTAB", - "recv_q": 0, - "send_q": 0, - "local_address": "999900439", - "local_port": "1023", - "peer_address": "0", - "peer_port": "976", - "local_port_num": 1023, - "peer_port_num": 976 - } - ] + + $ sudo ss -a | jc --ss -p + [ + { +- `"netid"` - "nl", +- `"state"` - "UNCONN", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"peer_address"` - "*", +- `"channel"` - "rtnl:kernel" + }, + { +- `"netid"` - "nl", +- `"state"` - "UNCONN", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"peer_address"` - "*", +- `"pid"` - 893, +- `"channel"` - "rtnl:systemd-resolve" + }, + ... + { +- `"netid"` - "p_raw", +- `"state"` - "UNCONN", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"peer_address"` - "*", +- `"link_layer"` - "LLDP", +- `"interface"` - "ens33" + }, + { +- `"netid"` - "u_dgr", +- `"state"` - "UNCONN", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_port"` - "93066", +- `"peer_address"` - "*", +- `"peer_port"` - "0", +- `"path"` - "/run/user/1000/systemd/notify" + }, + { +- `"netid"` - "u_seq", +- `"state"` - "LISTEN", +- `"recv_q"` - 0, +- `"send_q"` - 128, +- `"local_port"` - "20699", +- `"peer_address"` - "*", +- `"peer_port"` - "0", +- `"path"` - "/run/udev/control" + }, + ... + { +- `"netid"` - "icmp6", +- `"state"` - "UNCONN", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "*", +- `"local_port"` - "ipv6-icmp", +- `"peer_address"` - "*", +- `"peer_port"` - "*", +- `"interface"` - "ens33" + }, + { +- `"netid"` - "udp", +- `"state"` - "UNCONN", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "127.0.0.53", +- `"local_port"` - "domain", +- `"peer_address"` - "0.0.0.0", +- `"peer_port"` - "*", +- `"interface"` - "lo" + }, + { +- `"netid"` - "tcp", +- `"state"` - "LISTEN", +- `"recv_q"` - 0, +- `"send_q"` - 128, +- `"local_address"` - "127.0.0.53", +- `"local_port"` - "domain", +- `"peer_address"` - "0.0.0.0", +- `"peer_port"` - "*", +- `"interface"` - "lo" + }, + { +- `"netid"` - "tcp", +- `"state"` - "LISTEN", +- `"recv_q"` - 0, +- `"send_q"` - 128, +- `"local_address"` - "0.0.0.0", +- `"local_port"` - "ssh", +- `"peer_address"` - "0.0.0.0", +- `"peer_port"` - "*" + }, + { +- `"netid"` - "tcp", +- `"state"` - "LISTEN", +- `"recv_q"` - 0, +- `"send_q"` - 128, +- `"local_address"` - "[::]", +- `"local_port"` - "ssh", +- `"peer_address"` - "[::]", +- `"peer_port"` - "*" + }, + { +- `"netid"` - "v_str", +- `"state"` - "ESTAB", +- `"recv_q"` - 0, +- `"send_q"` - 0, +- `"local_address"` - "999900439", +- `"local_port"` - "1023", +- `"peer_address"` - "0", +- `"peer_port"` - "976", +- `"local_port_num"` - 1023, +- `"peer_port_num"` - 976 + } + ] + + $ sudo ss -a | jc --ss -p -r + [ + { +- `"netid"` - "nl", +- `"state"` - "UNCONN", +- `"recv_q"` - "0", +- `"send_q"` - "0", +- `"peer_address"` - "*", +- `"channel"` - "rtnl:kernel" + }, + { +- `"netid"` - "nl", +- `"state"` - "UNCONN", +- `"recv_q"` - "0", +- `"send_q"` - "0", +- `"peer_address"` - "*", +- `"pid"` - "893", +- `"channel"` - "rtnl:systemd-resolve" + }, + ... + { +- `"netid"` - "p_raw", +- `"state"` - "UNCONN", +- `"recv_q"` - "0", +- `"send_q"` - "0", +- `"peer_address"` - "*", +- `"link_layer"` - "LLDP", +- `"interface"` - "ens33" + }, + { +- `"netid"` - "u_dgr", +- `"state"` - "UNCONN", +- `"recv_q"` - "0", +- `"send_q"` - "0", +- `"local_port"` - "93066", +- `"peer_address"` - "*", +- `"peer_port"` - "0", +- `"path"` - "/run/user/1000/systemd/notify" + }, + { +- `"netid"` - "u_seq", +- `"state"` - "LISTEN", +- `"recv_q"` - "0", +- `"send_q"` - "128", +- `"local_port"` - "20699", +- `"peer_address"` - "*", +- `"peer_port"` - "0", +- `"path"` - "/run/udev/control" + }, + ... + { +- `"netid"` - "icmp6", +- `"state"` - "UNCONN", +- `"recv_q"` - "0", +- `"send_q"` - "0", +- `"local_address"` - "*", +- `"local_port"` - "ipv6-icmp", +- `"peer_address"` - "*", +- `"peer_port"` - "*", +- `"interface"` - "ens33" + }, + { +- `"netid"` - "udp", +- `"state"` - "UNCONN", +- `"recv_q"` - "0", +- `"send_q"` - "0", +- `"local_address"` - "127.0.0.53", +- `"local_port"` - "domain", +- `"peer_address"` - "0.0.0.0", +- `"peer_port"` - "*", +- `"interface"` - "lo" + }, + { +- `"netid"` - "tcp", +- `"state"` - "LISTEN", +- `"recv_q"` - "0", +- `"send_q"` - "128", +- `"local_address"` - "127.0.0.53", +- `"local_port"` - "domain", +- `"peer_address"` - "0.0.0.0", +- `"peer_port"` - "*", +- `"interface"` - "lo" + }, + { +- `"netid"` - "tcp", +- `"state"` - "LISTEN", +- `"recv_q"` - "0", +- `"send_q"` - "128", +- `"local_address"` - "0.0.0.0", +- `"local_port"` - "ssh", +- `"peer_address"` - "0.0.0.0", +- `"peer_port"` - "*" + }, + { +- `"netid"` - "tcp", +- `"state"` - "LISTEN", +- `"recv_q"` - "0", +- `"send_q"` - "128", +- `"local_address"` - "[::]", +- `"local_port"` - "ssh", +- `"peer_address"` - "[::]", +- `"peer_port"` - "*" + }, + { +- `"netid"` - "v_str", +- `"state"` - "ESTAB", +- `"recv_q"` - "0", +- `"send_q"` - "0", +- `"local_address"` - "999900439", +- `"local_port"` - "1023", +- `"peer_address"` - "0", +- `"peer_port"` - "976" + } + ] - $ sudo ss -a | jc --ss -p -r - [ - { - "netid": "nl", - "state": "UNCONN", - "recv_q": "0", - "send_q": "0", - "peer_address": "*", - "channel": "rtnl:kernel" - }, - { - "netid": "nl", - "state": "UNCONN", - "recv_q": "0", - "send_q": "0", - "peer_address": "*", - "pid": "893", - "channel": "rtnl:systemd-resolve" - }, - ... - { - "netid": "p_raw", - "state": "UNCONN", - "recv_q": "0", - "send_q": "0", - "peer_address": "*", - "link_layer": "LLDP", - "interface": "ens33" - }, - { - "netid": "u_dgr", - "state": "UNCONN", - "recv_q": "0", - "send_q": "0", - "local_port": "93066", - "peer_address": "*", - "peer_port": "0", - "path": "/run/user/1000/systemd/notify" - }, - { - "netid": "u_seq", - "state": "LISTEN", - "recv_q": "0", - "send_q": "128", - "local_port": "20699", - "peer_address": "*", - "peer_port": "0", - "path": "/run/udev/control" - }, - ... - { - "netid": "icmp6", - "state": "UNCONN", - "recv_q": "0", - "send_q": "0", - "local_address": "*", - "local_port": "ipv6-icmp", - "peer_address": "*", - "peer_port": "*", - "interface": "ens33" - }, - { - "netid": "udp", - "state": "UNCONN", - "recv_q": "0", - "send_q": "0", - "local_address": "127.0.0.53", - "local_port": "domain", - "peer_address": "0.0.0.0", - "peer_port": "*", - "interface": "lo" - }, - { - "netid": "tcp", - "state": "LISTEN", - "recv_q": "0", - "send_q": "128", - "local_address": "127.0.0.53", - "local_port": "domain", - "peer_address": "0.0.0.0", - "peer_port": "*", - "interface": "lo" - }, - { - "netid": "tcp", - "state": "LISTEN", - "recv_q": "0", - "send_q": "128", - "local_address": "0.0.0.0", - "local_port": "ssh", - "peer_address": "0.0.0.0", - "peer_port": "*" - }, - { - "netid": "tcp", - "state": "LISTEN", - "recv_q": "0", - "send_q": "128", - "local_address": "[::]", - "local_port": "ssh", - "peer_address": "[::]", - "peer_port": "*" - }, - { - "netid": "v_str", - "state": "ESTAB", - "recv_q": "0", - "send_q": "0", - "local_address": "999900439", - "local_port": "1023", - "peer_address": "0", - "peer_port": "976" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/stat.md b/docs/parsers/stat.md index 1a1726c4..bd045022 100644 --- a/docs/parsers/stat.md +++ b/docs/parsers/stat.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.stat + jc - JSON CLI output utility `stat` command output parser The `xxx_epoch` calculated timestamp fields are naive. (i.e. based on the @@ -11,191 +13,201 @@ only available if the timezone field is UTC. Usage (cli): - $ stat * | jc --stat +$ stat * | jc --stat - or +or - $ jc stat * +$ jc stat * Usage (module): - import jc - result = jc.parse('stat', stat_command_output) +import jc +result = jc.parse('stat', stat_command_output) - or +or - import jc.parsers.stat - result = jc.parsers.stat.parse(stat_command_output) +import jc.parsers.stat +result = jc.parsers.stat.parse(stat_command_output) Schema: - [ - { - "file": string, - "link_to" string, - "size": integer, - "blocks": integer, - "io_blocks": integer, - "type": string, - "device": string, - "inode": integer, - "links": integer, - "access": string, - "flags": string, - "uid": integer, - "user": string, - "gid": integer, - "group": string, - "access_time": string, # - = null - "access_time_epoch": integer, # naive timestamp - "access_time_epoch_utc": integer, # timezone-aware timestamp - "modify_time": string, # - = null - "modify_time_epoch": integer, # naive timestamp - "modify_time_epoch_utc": integer, # timezone-aware timestamp - "change_time": string, # - = null - "change_time_epoch": integer, # naive timestamp - "change_time_epoch_utc": integer, # timezone-aware timestamp - "birth_time": string, # - = null - "birth_time_epoch": integer, # naive timestamp - "birth_time_epoch_utc": integer, # timezone-aware timestamp - "unix_device": integer, - "rdev": integer, - "block_size": integer, - "unix_flags": string - } - ] +[ +{ +"file": string, +"link_to" string, +"size": integer, +"blocks": integer, +"io_blocks": integer, +"type": string, +"device": string, +"inode": integer, +"links": integer, +"access": string, +"flags": string, +"uid": integer, +"user": string, +"gid": integer, +"group": string, +"access_time": string, # - = null +"access_time_epoch": integer, # naive timestamp +"access_time_epoch_utc": integer, # timezone-aware timestamp +"modify_time": string, # - = null +"modify_time_epoch": integer, # naive timestamp +"modify_time_epoch_utc": integer, # timezone-aware timestamp +"change_time": string, # - = null +"change_time_epoch": integer, # naive timestamp +"change_time_epoch_utc": integer, # timezone-aware timestamp +"birth_time": string, # - = null +"birth_time_epoch": integer, # naive timestamp +"birth_time_epoch_utc": integer, # timezone-aware timestamp +"unix_device": integer, +"rdev": integer, +"block_size": integer, +"unix_flags": string +} +] -Examples: +**Examples**: - $ stat /bin/* | jc --stat -p - [ - { - "file": "/bin/bash", - "size": 1113504, - "blocks": 2176, - "io_blocks": 4096, - "type": "regular file", - "device": "802h/2050d", - "inode": 131099, - "links": 1, - "access": "0755", - "flags": "-rwxr-xr-x", - "uid": 0, - "user": "root", - "gid": 0, - "group": "root", - "access_time": "2019-11-14 08:18:03.509681766 +0000", - "modify_time": "2019-06-06 22:28:15.000000000 +0000", - "change_time": "2019-08-12 17:21:29.521945390 +0000", - "birth_time": null, - "access_time_epoch": 1573748283, - "access_time_epoch_utc": 1573719483, - "modify_time_epoch": 1559885295, - "modify_time_epoch_utc": 1559860095, - "change_time_epoch": 1565655689, - "change_time_epoch_utc": 1565630489, - "birth_time_epoch": null, - "birth_time_epoch_utc": null - }, - { - "file": "/bin/btrfs", - "size": 716464, - "blocks": 1400, - "io_blocks": 4096, - "type": "regular file", - "device": "802h/2050d", - "inode": 131100, - "links": 1, - "access": "0755", - "flags": "-rwxr-xr-x", - "uid": 0, - "user": "root", - "gid": 0, - "group": "root", - "access_time": "2019-11-14 08:18:28.990834276 +0000", - "modify_time": "2018-03-12 23:04:27.000000000 +0000", - "change_time": "2019-08-12 17:21:29.545944399 +0000", - "birth_time": null, - "access_time_epoch": 1573748308, - "access_time_epoch_utc": 1573719508, - "modify_time_epoch": 1520921067, - "modify_time_epoch_utc": 1520895867, - "change_time_epoch": 1565655689, - "change_time_epoch_utc": 1565630489, - "birth_time_epoch": null, - "birth_time_epoch_utc": null - }, - ... - ] + + $ stat /bin/* | jc --stat -p + [ + { +- `"file"` - "/bin/bash", +- `"size"` - 1113504, +- `"blocks"` - 2176, +- `"io_blocks"` - 4096, +- `"type"` - "regular file", +- `"device"` - "802h/2050d", +- `"inode"` - 131099, +- `"links"` - 1, +- `"access"` - "0755", +- `"flags"` - "-rwxr-xr-x", +- `"uid"` - 0, +- `"user"` - "root", +- `"gid"` - 0, +- `"group"` - "root", +- `"access_time"` - "2019-11-14 08:18:03.509681766 +0000", +- `"modify_time"` - "2019-06-06 22:28:15.000000000 +0000", +- `"change_time"` - "2019-08-12 17:21:29.521945390 +0000", +- `"birth_time"` - null, +- `"access_time_epoch"` - 1573748283, +- `"access_time_epoch_utc"` - 1573719483, +- `"modify_time_epoch"` - 1559885295, +- `"modify_time_epoch_utc"` - 1559860095, +- `"change_time_epoch"` - 1565655689, +- `"change_time_epoch_utc"` - 1565630489, +- `"birth_time_epoch"` - null, +- `"birth_time_epoch_utc"` - null + }, + { +- `"file"` - "/bin/btrfs", +- `"size"` - 716464, +- `"blocks"` - 1400, +- `"io_blocks"` - 4096, +- `"type"` - "regular file", +- `"device"` - "802h/2050d", +- `"inode"` - 131100, +- `"links"` - 1, +- `"access"` - "0755", +- `"flags"` - "-rwxr-xr-x", +- `"uid"` - 0, +- `"user"` - "root", +- `"gid"` - 0, +- `"group"` - "root", +- `"access_time"` - "2019-11-14 08:18:28.990834276 +0000", +- `"modify_time"` - "2018-03-12 23:04:27.000000000 +0000", +- `"change_time"` - "2019-08-12 17:21:29.545944399 +0000", +- `"birth_time"` - null, +- `"access_time_epoch"` - 1573748308, +- `"access_time_epoch_utc"` - 1573719508, +- `"modify_time_epoch"` - 1520921067, +- `"modify_time_epoch_utc"` - 1520895867, +- `"change_time_epoch"` - 1565655689, +- `"change_time_epoch_utc"` - 1565630489, +- `"birth_time_epoch"` - null, +- `"birth_time_epoch_utc"` - null + }, + ... + ] + + $ stat /bin/* | jc --stat -p -r + [ + { +- `"file"` - "/bin/bash", +- `"size"` - "1113504", +- `"blocks"` - "2176", +- `"io_blocks"` - "4096", +- `"type"` - "regular file", +- `"device"` - "802h/2050d", +- `"inode"` - "131099", +- `"links"` - "1", +- `"access"` - "0755", +- `"flags"` - "-rwxr-xr-x", +- `"uid"` - "0", +- `"user"` - "root", +- `"gid"` - "0", +- `"group"` - "root", +- `"access_time"` - "2019-11-14 08:18:03.509681766 +0000", +- `"modify_time"` - "2019-06-06 22:28:15.000000000 +0000", +- `"change_time"` - "2019-08-12 17:21:29.521945390 +0000", +- `"birth_time"` - null + }, + { +- `"file"` - "/bin/btrfs", +- `"size"` - "716464", +- `"blocks"` - "1400", +- `"io_blocks"` - "4096", +- `"type"` - "regular file", +- `"device"` - "802h/2050d", +- `"inode"` - "131100", +- `"links"` - "1", +- `"access"` - "0755", +- `"flags"` - "-rwxr-xr-x", +- `"uid"` - "0", +- `"user"` - "root", +- `"gid"` - "0", +- `"group"` - "root", +- `"access_time"` - "2019-11-14 08:18:28.990834276 +0000", +- `"modify_time"` - "2018-03-12 23:04:27.000000000 +0000", +- `"change_time"` - "2019-08-12 17:21:29.545944399 +0000", +- `"birth_time"` - null + }, + ... + ] - $ stat /bin/* | jc --stat -p -r - [ - { - "file": "/bin/bash", - "size": "1113504", - "blocks": "2176", - "io_blocks": "4096", - "type": "regular file", - "device": "802h/2050d", - "inode": "131099", - "links": "1", - "access": "0755", - "flags": "-rwxr-xr-x", - "uid": "0", - "user": "root", - "gid": "0", - "group": "root", - "access_time": "2019-11-14 08:18:03.509681766 +0000", - "modify_time": "2019-06-06 22:28:15.000000000 +0000", - "change_time": "2019-08-12 17:21:29.521945390 +0000", - "birth_time": null - }, - { - "file": "/bin/btrfs", - "size": "716464", - "blocks": "1400", - "io_blocks": "4096", - "type": "regular file", - "device": "802h/2050d", - "inode": "131100", - "links": "1", - "access": "0755", - "flags": "-rwxr-xr-x", - "uid": "0", - "user": "root", - "gid": "0", - "group": "root", - "access_time": "2019-11-14 08:18:28.990834276 +0000", - "modify_time": "2018-03-12 23:04:27.000000000 +0000", - "change_time": "2019-08-12 17:21:29.545944399 +0000", - "birth_time": null - }, - ... - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/stat_s.md b/docs/parsers/stat_s.md index 9a442c21..cab1a5b3 100644 --- a/docs/parsers/stat_s.md +++ b/docs/parsers/stat_s.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.stat\_s -# jc.parsers.stat_s jc - JSON CLI output utility `stat` command output streaming parser > This streaming parser outputs JSON Lines @@ -13,107 +15,119 @@ only available if the timezone field is UTC. Usage (cli): - $ stat * | jc --stat-s +$ stat * | jc --stat-s Usage (module): - import jc - # result is an iterable object (generator) - result = jc.parse('stat_s', stat_command_output.splitlines()) - for item in result: - # do something +import jc +# result is an iterable object (generator) +result = jc.parse('stat_s', stat_command_output.splitlines()) +for item in result: +# do something - or +or - import jc.parsers.stat_s - # result is an iterable object (generator) - result = jc.parsers.stat_s.parse(stat_command_output.splitlines()) - for item in result: - # do something +import jc.parsers.stat_s +# result is an iterable object (generator) +result = jc.parsers.stat_s.parse(stat_command_output.splitlines()) +for item in result: +# do something Schema: - { - "file": string, - "link_to" string, - "size": integer, - "blocks": integer, - "io_blocks": integer, - "type": string, - "device": string, - "inode": integer, - "links": integer, - "access": string, - "flags": string, - "uid": integer, - "user": string, - "gid": integer, - "group": string, - "access_time": string, # - = null - "access_time_epoch": integer, # naive timestamp - "access_time_epoch_utc": integer, # timezone-aware timestamp - "modify_time": string, # - = null - "modify_time_epoch": integer, # naive timestamp - "modify_time_epoch_utc": integer, # timezone-aware timestamp - "change_time": string, # - = null - "change_time_epoch": integer, # naive timestamp - "change_time_epoch_utc": integer, # timezone-aware timestamp - "birth_time": string, # - = null - "birth_time_epoch": integer, # naive timestamp - "birth_time_epoch_utc": integer, # timezone-aware timestamp - "unix_device": integer, - "rdev": integer, - "block_size": integer, - "unix_flags": string, +{ +"file": string, +"link_to" string, +"size": integer, +"blocks": integer, +"io_blocks": integer, +"type": string, +"device": string, +"inode": integer, +"links": integer, +"access": string, +"flags": string, +"uid": integer, +"user": string, +"gid": integer, +"group": string, +"access_time": string, # - = null +"access_time_epoch": integer, # naive timestamp +"access_time_epoch_utc": integer, # timezone-aware timestamp +"modify_time": string, # - = null +"modify_time_epoch": integer, # naive timestamp +"modify_time_epoch_utc": integer, # timezone-aware timestamp +"change_time": string, # - = null +"change_time_epoch": integer, # naive timestamp +"change_time_epoch_utc": integer, # timezone-aware timestamp +"birth_time": string, # - = null +"birth_time_epoch": integer, # naive timestamp +"birth_time_epoch_utc": integer, # timezone-aware timestamp +"unix_device": integer, +"rdev": integer, +"block_size": integer, +"unix_flags": string, - # Below object only exists if using -qq or ignore_exceptions=True +# Below object only exists if using -qq or ignore_exceptions=True - "_jc_meta": - { - "success": boolean, # false if error parsing - "error": string, # exists if "success" is false - "line": string # exists if "success" is false - } - } +"_jc_meta": +{ +"success": boolean, # false if error parsing +"error": string, # exists if "success" is false +"line": string # exists if "success" is false +} +} -Examples: +**Examples**: - $ stat | jc --stat-s - {"file":"(stdin)","unix_device":1027739696,"inode":1155,"flags":"cr...} + + $ stat | jc --stat-s + {"file":"(stdin)","unix_device":1027739696,"inode":1155,"flags":"cr...} + + $ stat | jc --stat-s -r + {"file":"(stdin)","unix_device":"1027739696","inode":"1155","flag...} - $ stat | jc --stat-s -r - {"file":"(stdin)","unix_device":"1027739696","inode":"1155","flag...} + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False, ignore_exceptions=False) +def parse(data, raw=False, quiet=False, ignore_exceptions=False) ``` Main text parsing generator function. Returns an iterator object. -Parameters: +**Arguments**: - data: (iterable) line-based text data to parse - (e.g. sys.stdin or str.splitlines()) + +- `data` - (iterable) line-based text data to parse + (e.g. sys.stdin or str.splitlines()) + +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True +- `ignore_exceptions` - (boolean) ignore parsing exceptions if True + - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True - ignore_exceptions: (boolean) ignore parsing exceptions if True +**Yields**: -Yields: + + Dictionary. Raw or processed structured data. + - Dictionary. Raw or processed structured data. +**Returns**: -Returns: - - Iterator object + + Iterator object ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/sysctl.md b/docs/parsers/sysctl.md index f324bd35..e36f67c3 100644 --- a/docs/parsers/sysctl.md +++ b/docs/parsers/sysctl.md @@ -1,88 +1,100 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.sysctl + jc - JSON CLI output utility `sysctl -a` command output parser Note: Since `sysctl` output is not easily parsable only a very simple - key/value object will be output. An attempt is made to convert obvious - integers and floats. If no conversion is desired, use the `-r` - command-line argument or the `raw=True` argument in `parse()`. +key/value object will be output. An attempt is made to convert obvious +integers and floats. If no conversion is desired, use the `-r` +command-line argument or the `raw=True` argument in `parse()`. Usage (cli): - $ sysctl -a | jc --sysctl +$ sysctl -a | jc --sysctl - or +or - $ jc sysctl -a +$ jc sysctl -a Usage (module): - import jc - result = jc.parse('sysctl', sysctl_command_output) +import jc +result = jc.parse('sysctl', sysctl_command_output) - or +or - import jc.parsers.sysctl - result = jc.parsers.sysctl.parse(sysctl_command_output) +import jc.parsers.sysctl +result = jc.parsers.sysctl.parse(sysctl_command_output) Schema: - { - "key1": string/integer/float, # best guess based on value - "key2": string/integer/float, - "key3": string/integer/float - } +{ +"key1": string/integer/float, # best guess based on value +"key2": string/integer/float, +"key3": string/integer/float +} -Examples: +**Examples**: - $ sysctl -a | jc --sysctl -p - { - "user.cs_path": "/usr/bin:/bin:/usr/sbin:/sbin", - "user.bc_base_max": 99, - "user.bc_dim_max": 2048, - "user.bc_scale_max": 99, - "user.bc_string_max": 1000, - "user.coll_weights_max": 2, - "user.expr_nest_max": 32 - ... - } + + $ sysctl -a | jc --sysctl -p + { +- `"user.cs_path"` - "/usr/bin:/bin:/usr/sbin:/sbin", +- `"user.bc_base_max"` - 99, +- `"user.bc_dim_max"` - 2048, +- `"user.bc_scale_max"` - 99, +- `"user.bc_string_max"` - 1000, +- `"user.coll_weights_max"` - 2, +- `"user.expr_nest_max"` - 32 + ... + } + + $ sysctl -a | jc --sysctl -p -r + { +- `"user.cs_path"` - "/usr/bin:/bin:/usr/sbin:/sbin", +- `"user.bc_base_max"` - "99", +- `"user.bc_dim_max"` - "2048", +- `"user.bc_scale_max"` - "99", +- `"user.bc_string_max"` - "1000", +- `"user.coll_weights_max"` - "2", +- `"user.expr_nest_max"` - "32", + ... + } - $ sysctl -a | jc --sysctl -p -r - { - "user.cs_path": "/usr/bin:/bin:/usr/sbin:/sbin", - "user.bc_base_max": "99", - "user.bc_dim_max": "2048", - "user.bc_scale_max": "99", - "user.bc_string_max": "1000", - "user.coll_weights_max": "2", - "user.expr_nest_max": "32", - ... - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/systemctl.md b/docs/parsers/systemctl.md index cb953574..73bd5968 100644 --- a/docs/parsers/systemctl.md +++ b/docs/parsers/systemctl.md @@ -1,89 +1,101 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.systemctl + jc - JSON CLI output utility `systemctl` command output parser Usage (cli): - $ systemctl | jc --systemctl +$ systemctl | jc --systemctl - or +or - $ jc systemctl +$ jc systemctl Usage (module): - import jc - result = jc.parse('systemctl', systemctl_command_output) +import jc +result = jc.parse('systemctl', systemctl_command_output) - or +or - import jc.parsers.systemctl - result = jc.parsers.systemctl.parse(systemctl_command_output) +import jc.parsers.systemctl +result = jc.parsers.systemctl.parse(systemctl_command_output) Schema: - [ - { - "unit": string, - "load": string, - "active": string, - "sub": string, - "description": string - } - ] +[ +{ +"unit": string, +"load": string, +"active": string, +"sub": string, +"description": string +} +] -Examples: +**Examples**: - $ systemctl -a | jc --systemctl -p - [ - { - "unit": "proc-sys-fs-binfmt_misc.automount", - "load": "loaded", - "active": "active", - "sub": "waiting", - "description": "Arbitrary Executable File Formats File System ..." - }, - { - "unit": "dev-block-8:2.device", - "load": "loaded", - "active": "active", - "sub": "plugged", - "description": "LVM PV 3klkIj-w1qk-DkJi-0XBJ-y3o7-i2Ac-vHqWBM o..." - }, - { - "unit": "dev-cdrom.device", - "load": "loaded", - "active": "active", - "sub": "plugged", - "description": "VMware_Virtual_IDE_CDROM_Drive" - }, - ... - ] + + $ systemctl -a | jc --systemctl -p + [ + { +- `"unit"` - "proc-sys-fs-binfmt_misc.automount", +- `"load"` - "loaded", +- `"active"` - "active", +- `"sub"` - "waiting", +- `"description"` - "Arbitrary Executable File Formats File System ..." + }, + { +- `"unit"` - "dev-block-8:2.device", +- `"load"` - "loaded", +- `"active"` - "active", +- `"sub"` - "plugged", +- `"description"` - "LVM PV 3klkIj-w1qk-DkJi-0XBJ-y3o7-i2Ac-vHqWBM o..." + }, + { +- `"unit"` - "dev-cdrom.device", +- `"load"` - "loaded", +- `"active"` - "active", +- `"sub"` - "plugged", +- `"description"` - "VMware_Virtual_IDE_CDROM_Drive" + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/systemctl_lj.md b/docs/parsers/systemctl_lj.md index f6fd1f7a..8c4ed608 100644 --- a/docs/parsers/systemctl_lj.md +++ b/docs/parsers/systemctl_lj.md @@ -1,106 +1,118 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.systemctl\_lj -# jc.parsers.systemctl_lj jc - JSON CLI output utility `systemctl list-jobs` command output parser Usage (cli): - $ systemctl list-jobs | jc --systemctl-lj +$ systemctl list-jobs | jc --systemctl-lj - or +or - $ jc systemctl list-jobs +$ jc systemctl list-jobs Usage (module): - import jc - result = jc.parse('systemctl_lj', systemctl_lj_command_output) +import jc +result = jc.parse('systemctl_lj', systemctl_lj_command_output) - or +or - import jc.parsers.systemctl_lj - result = jc.parsers.systemctl_lj.parse(systemctl_lj_command_output) +import jc.parsers.systemctl_lj +result = jc.parsers.systemctl_lj.parse(systemctl_lj_command_output) Schema: - [ - { - "job": integer, - "unit": string, - "type": string, - "state": string - } - ] +[ +{ +"job": integer, +"unit": string, +"type": string, +"state": string +} +] -Examples: +**Examples**: - $ systemctl list-jobs| jc --systemctl-lj -p - [ - { - "job": 3543, - "unit": "nginxAfterGlusterfs.service", - "type": "start", - "state": "waiting" - }, - { - "job": 3545, - "unit": "glusterReadyForLocalhostMount.service", - "type": "start", - "state": "running" - }, - { - "job": 3506, - "unit": "nginx.service", - "type": "start", - "state": "waiting" - } - ] + + $ systemctl list-jobs| jc --systemctl-lj -p + [ + { +- `"job"` - 3543, +- `"unit"` - "nginxAfterGlusterfs.service", +- `"type"` - "start", +- `"state"` - "waiting" + }, + { +- `"job"` - 3545, +- `"unit"` - "glusterReadyForLocalhostMount.service", +- `"type"` - "start", +- `"state"` - "running" + }, + { +- `"job"` - 3506, +- `"unit"` - "nginx.service", +- `"type"` - "start", +- `"state"` - "waiting" + } + ] + + $ systemctl list-jobs| jc --systemctl-lj -p -r + [ + { +- `"job"` - "3543", +- `"unit"` - "nginxAfterGlusterfs.service", +- `"type"` - "start", +- `"state"` - "waiting" + }, + { +- `"job"` - "3545", +- `"unit"` - "glusterReadyForLocalhostMount.service", +- `"type"` - "start", +- `"state"` - "running" + }, + { +- `"job"` - "3506", +- `"unit"` - "nginx.service", +- `"type"` - "start", +- `"state"` - "waiting" + } + ] - $ systemctl list-jobs| jc --systemctl-lj -p -r - [ - { - "job": "3543", - "unit": "nginxAfterGlusterfs.service", - "type": "start", - "state": "waiting" - }, - { - "job": "3545", - "unit": "glusterReadyForLocalhostMount.service", - "type": "start", - "state": "running" - }, - { - "job": "3506", - "unit": "nginx.service", - "type": "start", - "state": "waiting" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/systemctl_ls.md b/docs/parsers/systemctl_ls.md index ce0bbd1c..90f55518 100644 --- a/docs/parsers/systemctl_ls.md +++ b/docs/parsers/systemctl_ls.md @@ -1,82 +1,94 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.systemctl\_ls -# jc.parsers.systemctl_ls jc - JSON CLI output utility `systemctl list-sockets` command output parser Usage (cli): - $ systemctl list-sockets | jc --systemctl-ls +$ systemctl list-sockets | jc --systemctl-ls - or +or - $ jc systemctl list-sockets +$ jc systemctl list-sockets Usage (module): - import jc - result = jc.parse('systemctl_ls', systemctl_ls_command_output) +import jc +result = jc.parse('systemctl_ls', systemctl_ls_command_output) - or +or - import jc.parsers.systemctl_ls - result = jc.parsers.systemctl_ls.parse(systemctl_ls_command_output) +import jc.parsers.systemctl_ls +result = jc.parsers.systemctl_ls.parse(systemctl_ls_command_output) Schema: - [ - { - "listen": string, - "unit": string, - "activates": string - } - ] +[ +{ +"listen": string, +"unit": string, +"activates": string +} +] -Examples: +**Examples**: - $ systemctl list-sockets | jc --systemctl-ls -p - [ - { - "listen": "/dev/log", - "unit": "systemd-journald.socket", - "activates": "systemd-journald.service" - }, - { - "listen": "/run/dbus/system_bus_socket", - "unit": "dbus.socket", - "activates": "dbus.service" - }, - { - "listen": "/run/dmeventd-client", - "unit": "dm-event.socket", - "activates": "dm-event.service" - }, - ... - ] + + $ systemctl list-sockets | jc --systemctl-ls -p + [ + { +- `"listen"` - "/dev/log", +- `"unit"` - "systemd-journald.socket", +- `"activates"` - "systemd-journald.service" + }, + { +- `"listen"` - "/run/dbus/system_bus_socket", +- `"unit"` - "dbus.socket", +- `"activates"` - "dbus.service" + }, + { +- `"listen"` - "/run/dmeventd-client", +- `"unit"` - "dm-event.socket", +- `"activates"` - "dm-event.service" + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/systemctl_luf.md b/docs/parsers/systemctl_luf.md index c13e2480..7c3635ed 100644 --- a/docs/parsers/systemctl_luf.md +++ b/docs/parsers/systemctl_luf.md @@ -1,78 +1,90 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.systemctl\_luf -# jc.parsers.systemctl_luf jc - JSON CLI output utility `systemctl list-unit-files` command output parser Usage (cli): - $ systemctl list-unit-files | jc --systemctl-luf +$ systemctl list-unit-files | jc --systemctl-luf - or +or - $ jc systemctl list-unit-files +$ jc systemctl list-unit-files Usage (module): - import jc - result = jc.parse('systemctl_luf', systemctl_luf_command_output) +import jc +result = jc.parse('systemctl_luf', systemctl_luf_command_output) - or +or - import jc.parsers.systemctl_luf - result = jc.parsers.systemctl_luf.parse(systemctl_luf_command_output) +import jc.parsers.systemctl_luf +result = jc.parsers.systemctl_luf.parse(systemctl_luf_command_output) Schema: - [ - { - "unit_file": string, - "state": string - } - ] +[ +{ +"unit_file": string, +"state": string +} +] -Examples: +**Examples**: - $ systemctl list-unit-files | jc --systemctl-luf -p - [ - { - "unit_file": "proc-sys-fs-binfmt_misc.automount", - "state": "static" - }, - { - "unit_file": "dev-hugepages.mount", - "state": "static" - }, - { - "unit_file": "dev-mqueue.mount", - "state": "static" - }, - ... - ] + + $ systemctl list-unit-files | jc --systemctl-luf -p + [ + { +- `"unit_file"` - "proc-sys-fs-binfmt_misc.automount", +- `"state"` - "static" + }, + { +- `"unit_file"` - "dev-hugepages.mount", +- `"state"` - "static" + }, + { +- `"unit_file"` - "dev-mqueue.mount", +- `"state"` - "static" + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/systeminfo.md b/docs/parsers/systeminfo.md index d6af59be..b682e0db 100644 --- a/docs/parsers/systeminfo.md +++ b/docs/parsers/systeminfo.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.systeminfo + jc - JSON CLI output utility `systeminfo` command output parser Blank or missing elements are set to `null`. @@ -15,228 +17,238 @@ the timezone field is UTC. Usage (cli): - $ systeminfo | jc --systeminfo +$ systeminfo | jc --systeminfo Usage (module): - import jc - result = jc.parse('systeminfo', systeminfo_command_output) +import jc +result = jc.parse('systeminfo', systeminfo_command_output) - or +or - import jc.parsers.systeminfo - result = jc.parsers.systeminfo.parse(systeminfo_command_output) +import jc.parsers.systeminfo +result = jc.parsers.systeminfo.parse(systeminfo_command_output) Schema: - { - "host_name": string, - "os_name": string, - "os_version": string, - "os_manufacturer": string, - "os_configuration": string, - "os_build_type": string, - "registered_owner": string, - "registered_organization": string, - "product_id": string, - "original_install_date": string, - "original_install_date_epoch": integer, # [0] - "original_install_date_epoch_utc": integer, # [1] - "system_boot_time": string, - "system_boot_time_epoch": integer, # [0] - "system_boot_time_epoch_utc": integer, # [1] - "system_manufacturer": string, - "system_model": string, - "system_type": string, - "processors": [ - string - ], - "bios_version": string, - "windows_directory": string, - "system_directory": string, - "boot_device": string, - "system_locale": string, - "input_locale": string, - "time_zone": string, - "total_physical_memory_mb": string, - "available_physical_memory_mb": integer, - "virtual_memory_max_size_mb": integer, - "virtual_memory_available_mb": integer, - "virtual_memory_in_use_mb": integer, - "page_file_locations": string, - "domain": string, - "logon_server": string, - "hotfixs": [ - string - ], - "network_cards": [ - { - "name": string, - "connection_name": string, - "status": string, - "dhcp_enabled": boolean, - "dhcp_server": string, - "ip_addresses": [ - string - ] - } - ], - "hyperv_requirements": { - "vm_monitor_mode_extensions": boolean, - "virtualization_enabled_in_firmware": boolean, - "second_level_address_translation": boolean, - "data_execution_prevention_available": boolean - } - } +{ +"host_name": string, +"os_name": string, +"os_version": string, +"os_manufacturer": string, +"os_configuration": string, +"os_build_type": string, +"registered_owner": string, +"registered_organization": string, +"product_id": string, +"original_install_date": string, +"original_install_date_epoch": integer, # [0] +"original_install_date_epoch_utc": integer, # [1] +"system_boot_time": string, +"system_boot_time_epoch": integer, # [0] +"system_boot_time_epoch_utc": integer, # [1] +"system_manufacturer": string, +"system_model": string, +"system_type": string, +"processors": [ +string +], +"bios_version": string, +"windows_directory": string, +"system_directory": string, +"boot_device": string, +"system_locale": string, +"input_locale": string, +"time_zone": string, +"total_physical_memory_mb": string, +"available_physical_memory_mb": integer, +"virtual_memory_max_size_mb": integer, +"virtual_memory_available_mb": integer, +"virtual_memory_in_use_mb": integer, +"page_file_locations": string, +"domain": string, +"logon_server": string, +"hotfixs": [ +string +], +"network_cards": [ +{ +"name": string, +"connection_name": string, +"status": string, +"dhcp_enabled": boolean, +"dhcp_server": string, +"ip_addresses": [ +string +] +} +], +"hyperv_requirements": { +"vm_monitor_mode_extensions": boolean, +"virtualization_enabled_in_firmware": boolean, +"second_level_address_translation": boolean, +"data_execution_prevention_available": boolean +} +} - [0] naive timestamp - [1] timezone-aware timestamp +[0] naive timestamp +[1] timezone-aware timestamp -Examples: +**Examples**: - $ systeminfo | jc --systeminfo -p - { - "host_name": "TESTLAPTOP", - "os_name": "Microsoft Windows 10 Enterprise", - "os_version": "10.0.17134 N/A Build 17134", - "os_manufacturer": "Microsoft Corporation", - "os_configuration": "Member Workstation", - "os_build_type": "Multiprocessor Free", - "registered_owner": "Test, Inc.", - "registered_organization": "Test, Inc.", - "product_id": "11111-11111-11111-AA111", - "original_install_date": "3/26/2019, 3:51:30 PM", - "system_boot_time": "3/30/2021, 6:13:59 AM", - "system_manufacturer": "Dell Inc.", - "system_model": "Precision 5530", - "system_type": "x64-based PC", - "processors": [ - "Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz" - ], - "bios_version": "Dell Inc. 1.16.2, 4/21/2020", - "windows_directory": "C:\WINDOWS", - "system_directory": "C:\WINDOWS\system32", - "boot_device": "\Device\HarddiskVolume2", - "system_locale": "en-us;English (United States)", - "input_locale": "en-us;English (United States)", - "time_zone": "(UTC+00:00) UTC", - "total_physical_memory_mb": 32503, - "available_physical_memory_mb": 19743, - "virtual_memory_max_size_mb": 37367, - "virtual_memory_available_mb": 22266, - "virtual_memory_in_use_mb": 15101, - "page_file_locations": "C:\pagefile.sys", - "domain": "test.com", - "logon_server": "\\TESTDC01", - "hotfixs": [ - "KB2693643", - "KB4601054" - ], - "network_cards": [ - { - "name": "Intel(R) Wireless-AC 9260 160MHz", - "connection_name": "Wi-Fi", - "status": null, - "dhcp_enabled": true, - "dhcp_server": "192.168.2.1", - "ip_addresses": [ - "192.168.2.219" - ] - } - ], - "hyperv_requirements": { - "vm_monitor_mode_extensions": true, - "virtualization_enabled_in_firmware": true, - "second_level_address_translation": false, - "data_execution_prevention_available": true - }, - "original_install_date_epoch": 1553640690, - "original_install_date_epoch_utc": 1553615490, - "system_boot_time_epoch": 1617110039, - "system_boot_time_epoch_utc": 1617084839 - } + + $ systeminfo | jc --systeminfo -p + { +- `"host_name"` - "TESTLAPTOP", +- `"os_name"` - "Microsoft Windows 10 Enterprise", +- `"os_version"` - "10.0.17134 N/A Build 17134", +- `"os_manufacturer"` - "Microsoft Corporation", +- `"os_configuration"` - "Member Workstation", +- `"os_build_type"` - "Multiprocessor Free", +- `"registered_owner"` - "Test, Inc.", +- `"registered_organization"` - "Test, Inc.", +- `"product_id"` - "11111-11111-11111-AA111", +- `"original_install_date"` - "3/26/2019, 3:51:30 PM", +- `"system_boot_time"` - "3/30/2021, 6:13:59 AM", +- `"system_manufacturer"` - "Dell Inc.", +- `"system_model"` - "Precision 5530", +- `"system_type"` - "x64-based PC", +- `"processors"` - [ + "Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz" + ], +- `"bios_version"` - "Dell Inc. 1.16.2, 4/21/2020", +- `"windows_directory"` - "C:\\WINDOWS", +- `"system_directory"` - "C:\\WINDOWS\\system32", +- `"boot_device"` - "\\Device\\HarddiskVolume2", +- `"system_locale"` - "en-us;English (United States)", +- `"input_locale"` - "en-us;English (United States)", +- `"time_zone"` - "(UTC+00:00) UTC", +- `"total_physical_memory_mb"` - 32503, +- `"available_physical_memory_mb"` - 19743, +- `"virtual_memory_max_size_mb"` - 37367, +- `"virtual_memory_available_mb"` - 22266, +- `"virtual_memory_in_use_mb"` - 15101, +- `"page_file_locations"` - "C:\\pagefile.sys", +- `"domain"` - "test.com", +- `"logon_server"` - "\\\\TESTDC01", +- `"hotfixs"` - [ + "KB2693643", + "KB4601054" + ], +- `"network_cards"` - [ + { +- `"name"` - "Intel(R) Wireless-AC 9260 160MHz", +- `"connection_name"` - "Wi-Fi", +- `"status"` - null, +- `"dhcp_enabled"` - true, +- `"dhcp_server"` - "192.168.2.1", +- `"ip_addresses"` - [ + "192.168.2.219" + ] + } + ], +- `"hyperv_requirements"` - { +- `"vm_monitor_mode_extensions"` - true, +- `"virtualization_enabled_in_firmware"` - true, +- `"second_level_address_translation"` - false, +- `"data_execution_prevention_available"` - true + }, +- `"original_install_date_epoch"` - 1553640690, +- `"original_install_date_epoch_utc"` - 1553615490, +- `"system_boot_time_epoch"` - 1617110039, +- `"system_boot_time_epoch_utc"` - 1617084839 + } + + $ systeminfo | jc --systeminfo -p -r + { +- `"host_name"` - "TESTLAPTOP", +- `"os_name"` - "Microsoft Windows 10 Enterprise", +- `"os_version"` - "10.0.17134 N/A Build 17134", +- `"os_manufacturer"` - "Microsoft Corporation", +- `"os_configuration"` - "Member Workstation", +- `"os_build_type"` - "Multiprocessor Free", +- `"registered_owner"` - "Test, Inc.", +- `"registered_organization"` - "Test, Inc.", +- `"product_id"` - "11111-11111-11111-AA111", +- `"original_install_date"` - "3/26/2019, 3:51:30 PM", +- `"system_boot_time"` - "3/30/2021, 6:13:59 AM", +- `"system_manufacturer"` - "Dell Inc.", +- `"system_model"` - "Precision 5530", +- `"system_type"` - "x64-based PC", +- `"processors"` - [ + "Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz" + ], +- `"bios_version"` - "Dell Inc. 1.16.2, 4/21/2020", +- `"windows_directory"` - "C:\\WINDOWS", +- `"system_directory"` - "C:\\WINDOWS\\system32", +- `"boot_device"` - "\\Device\\HarddiskVolume2", +- `"system_locale"` - "en-us;English (United States)", +- `"input_locale"` - "en-us;English (United States)", +- `"time_zone"` - "(UTC+00:00) UTC", +- `"total_physical_memory_mb"` - "32,503 MB", +- `"available_physical_memory_mb"` - "19,743 MB", +- `"virtual_memory_max_size_mb"` - "37,367 MB", +- `"virtual_memory_available_mb"` - "22,266 MB", +- `"virtual_memory_in_use_mb"` - "15,101 MB", +- `"page_file_locations"` - "C:\\pagefile.sys", +- `"domain"` - "test.com", +- `"logon_server"` - "\\\\TESTDC01", +- `"hotfixs"` - [ + "KB2693643", + "KB4601054" + ], +- `"network_cards"` - [ + { +- `"name"` - "Intel(R) Wireless-AC 9260 160MHz", +- `"connection_name"` - "Wi-Fi", +- `"status"` - "", +- `"dhcp_enabled"` - "Yes", +- `"dhcp_server"` - "192.168.2.1", +- `"ip_addresses"` - [ + "192.168.2.219" + ] + } + ], +- `"hyperv_requirements"` - { +- `"vm_monitor_mode_extensions"` - "Yes", +- `"virtualization_enabled_in_firmware"` - "Yes", +- `"second_level_address_translation"` - "No", +- `"data_execution_prevention_available"` - "Yes" + } + } - $ systeminfo | jc --systeminfo -p -r - { - "host_name": "TESTLAPTOP", - "os_name": "Microsoft Windows 10 Enterprise", - "os_version": "10.0.17134 N/A Build 17134", - "os_manufacturer": "Microsoft Corporation", - "os_configuration": "Member Workstation", - "os_build_type": "Multiprocessor Free", - "registered_owner": "Test, Inc.", - "registered_organization": "Test, Inc.", - "product_id": "11111-11111-11111-AA111", - "original_install_date": "3/26/2019, 3:51:30 PM", - "system_boot_time": "3/30/2021, 6:13:59 AM", - "system_manufacturer": "Dell Inc.", - "system_model": "Precision 5530", - "system_type": "x64-based PC", - "processors": [ - "Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz" - ], - "bios_version": "Dell Inc. 1.16.2, 4/21/2020", - "windows_directory": "C:\WINDOWS", - "system_directory": "C:\WINDOWS\system32", - "boot_device": "\Device\HarddiskVolume2", - "system_locale": "en-us;English (United States)", - "input_locale": "en-us;English (United States)", - "time_zone": "(UTC+00:00) UTC", - "total_physical_memory_mb": "32,503 MB", - "available_physical_memory_mb": "19,743 MB", - "virtual_memory_max_size_mb": "37,367 MB", - "virtual_memory_available_mb": "22,266 MB", - "virtual_memory_in_use_mb": "15,101 MB", - "page_file_locations": "C:\pagefile.sys", - "domain": "test.com", - "logon_server": "\\TESTDC01", - "hotfixs": [ - "KB2693643", - "KB4601054" - ], - "network_cards": [ - { - "name": "Intel(R) Wireless-AC 9260 160MHz", - "connection_name": "Wi-Fi", - "status": "", - "dhcp_enabled": "Yes", - "dhcp_server": "192.168.2.1", - "ip_addresses": [ - "192.168.2.219" - ] - } - ], - "hyperv_requirements": { - "vm_monitor_mode_extensions": "Yes", - "virtualization_enabled_in_firmware": "Yes", - "second_level_address_translation": "No", - "data_execution_prevention_available": "Yes" - } - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: win32 diff --git a/docs/parsers/time.md b/docs/parsers/time.md index 3a4c6bfa..47517b87 100644 --- a/docs/parsers/time.md +++ b/docs/parsers/time.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.time + jc - JSON CLI output utility `/usr/bin/time` command output parser Output from `/usr/bin/time` is sent to `STDERR`, so the `-o` option can be @@ -10,154 +12,164 @@ Alternatively, the output from `/usr/bin/time` can be redirected to `STDOUT` so `jc` can receive it. Note: `/usr/bin/time` is similar but different from the Bash builtin - `time` command. +`time` command. Usage (cli): - $ /usr/bin/time -o timefile.out sleep 2; cat timefile.out | \ - jc --time -p +$ /usr/bin/time -o timefile.out sleep 2; cat timefile.out | \\ +jc --time -p Usage (module): - import jc - result = jc.parse('time', time_command_output) +import jc +result = jc.parse('time', time_command_output) - or +or - import jc.parsers.time - result = jc.parsers.time.parse(time_command_output) +import jc.parsers.time +result = jc.parsers.time.parse(time_command_output) Schema: - Source: https://www.freebsd.org/cgi/man.cgi?query=getrusage - https://man7.org/linux/man-pages/man1/time.1.html +Source: https://www.freebsd.org/cgi/man.cgi?query=getrusage +https://man7.org/linux/man-pages/man1/time.1.html - { - "real_time": float, - "user_time": float, - "system_time": float, - "elapsed_time": string, - "elapsed_time_hours": integer, - "elapsed_time_minutes": integer, - "elapsed_time_seconds": integer, - "elapsed_time_centiseconds": integer, - "elapsed_time_total_seconds": float, - "cpu_percent": integer, # null if ? - "average_shared_text_size": integer, - "average_unshared_data_size": integer, - "average_unshared_stack_size": integer, - "average_shared_memory_size": integer, - "maximum_resident_set_size": integer, - "block_input_operations": integer, # [0] - "block_output_operations": integer, # [1] - "major_pagefaults": integer, - "minor_pagefaults": integer, - "swaps": integer, - "page_reclaims": integer, - "page_faults": integer, - "messages_sent": integer, - "messages_received": integer, - "signals_received": integer, - "voluntary_context_switches": integer, - "involuntary_context_switches": integer - "command_being_timed": string, - "average_stack_size": integer, - "average_total_size": integer, - "average_resident_set_size": integer, - "signals_delivered": integer, - "page_size": integer, - "exit_status": integer - } +{ +"real_time": float, +"user_time": float, +"system_time": float, +"elapsed_time": string, +"elapsed_time_hours": integer, +"elapsed_time_minutes": integer, +"elapsed_time_seconds": integer, +"elapsed_time_centiseconds": integer, +"elapsed_time_total_seconds": float, +"cpu_percent": integer, # null if ? +"average_shared_text_size": integer, +"average_unshared_data_size": integer, +"average_unshared_stack_size": integer, +"average_shared_memory_size": integer, +"maximum_resident_set_size": integer, +"block_input_operations": integer, # [0] +"block_output_operations": integer, # [1] +"major_pagefaults": integer, +"minor_pagefaults": integer, +"swaps": integer, +"page_reclaims": integer, +"page_faults": integer, +"messages_sent": integer, +"messages_received": integer, +"signals_received": integer, +"voluntary_context_switches": integer, +"involuntary_context_switches": integer +"command_being_timed": string, +"average_stack_size": integer, +"average_total_size": integer, +"average_resident_set_size": integer, +"signals_delivered": integer, +"page_size": integer, +"exit_status": integer +} - [0] aka File system inputs - [1] aka File system outputs +[0] aka File system inputs +[1] aka File system outputs -Examples: +**Examples**: - $ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \ - jc --time -p - { - "command_being_timed": "sleep 2", - "user_time": 0.0, - "system_time": 0.0, - "cpu_percent": 0, - "elapsed_time": "0:02.00", - "average_shared_text_size": 0, - "average_unshared_data_size": 0, - "average_stack_size": 0, - "average_total_size": 0, - "maximum_resident_set_size": 2084, - "average_resident_set_size": 0, - "major_pagefaults": 0, - "minor_pagefaults": 72, - "voluntary_context_switches": 2, - "involuntary_context_switches": 1, - "swaps": 0, - "block_input_operations": 0, - "block_output_operations": 0, - "messages_sent": 0, - "messages_received": 0, - "signals_delivered": 0, - "page_size": 4096, - "exit_status": 0, - "elapsed_time_hours": 0, - "elapsed_time_minutes": 0, - "elapsed_time_seconds": 2, - "elapsed_time_centiseconds": 50, - "elapsed_time_total_seconds": 2.5 - } + + $ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \\ + jc --time -p + { +- `"command_being_timed"` - "sleep 2", +- `"user_time"` - 0.0, +- `"system_time"` - 0.0, +- `"cpu_percent"` - 0, +- `"elapsed_time"` - "0:02.00", +- `"average_shared_text_size"` - 0, +- `"average_unshared_data_size"` - 0, +- `"average_stack_size"` - 0, +- `"average_total_size"` - 0, +- `"maximum_resident_set_size"` - 2084, +- `"average_resident_set_size"` - 0, +- `"major_pagefaults"` - 0, +- `"minor_pagefaults"` - 72, +- `"voluntary_context_switches"` - 2, +- `"involuntary_context_switches"` - 1, +- `"swaps"` - 0, +- `"block_input_operations"` - 0, +- `"block_output_operations"` - 0, +- `"messages_sent"` - 0, +- `"messages_received"` - 0, +- `"signals_delivered"` - 0, +- `"page_size"` - 4096, +- `"exit_status"` - 0, +- `"elapsed_time_hours"` - 0, +- `"elapsed_time_minutes"` - 0, +- `"elapsed_time_seconds"` - 2, +- `"elapsed_time_centiseconds"` - 50, +- `"elapsed_time_total_seconds"` - 2.5 + } + + $ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \\ + jc --time -p -r + { +- `"command_being_timed"` - "\"sleep 2\"", +- `"user_time"` - "0.00", +- `"system_time"` - "0.00", +- `"cpu_percent"` - "0", +- `"elapsed_time"` - "0:02.00", +- `"average_shared_text_size"` - "0", +- `"average_unshared_data_size"` - "0", +- `"average_stack_size"` - "0", +- `"average_total_size"` - "0", +- `"maximum_resident_set_size"` - "2084", +- `"average_resident_set_size"` - "0", +- `"major_pagefaults"` - "0", +- `"minor_pagefaults"` - "72", +- `"voluntary_context_switches"` - "2", +- `"involuntary_context_switches"` - "0", +- `"swaps"` - "0", +- `"block_input_operations"` - "0", +- `"block_output_operations"` - "0", +- `"messages_sent"` - "0", +- `"messages_received"` - "0", +- `"signals_delivered"` - "0", +- `"page_size"` - "4096", +- `"exit_status"` - "0" + } - $ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \ - jc --time -p -r - { - "command_being_timed": ""sleep 2"", - "user_time": "0.00", - "system_time": "0.00", - "cpu_percent": "0", - "elapsed_time": "0:02.00", - "average_shared_text_size": "0", - "average_unshared_data_size": "0", - "average_stack_size": "0", - "average_total_size": "0", - "maximum_resident_set_size": "2084", - "average_resident_set_size": "0", - "major_pagefaults": "0", - "minor_pagefaults": "72", - "voluntary_context_switches": "2", - "involuntary_context_switches": "0", - "swaps": "0", - "block_input_operations": "0", - "block_output_operations": "0", - "messages_sent": "0", - "messages_received": "0", - "signals_delivered": "0", - "page_size": "4096", - "exit_status": "0" - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/timedatectl.md b/docs/parsers/timedatectl.md index 2ee72708..080c6f12 100644 --- a/docs/parsers/timedatectl.md +++ b/docs/parsers/timedatectl.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.timedatectl + jc - JSON CLI output utility `timedatectl` command output parser The `epoch_utc` calculated timestamp field is timezone-aware and is only @@ -8,88 +10,98 @@ available if the `universal_time` field is available. Usage (cli): - $ timedatectl | jc --timedatectl +$ timedatectl | jc --timedatectl - or +or - $ jc timedatectl +$ jc timedatectl Usage (module): - import jc - result = jc.parse('timedatectl', timedatectl_command_output) +import jc +result = jc.parse('timedatectl', timedatectl_command_output) - or +or - import jc.parsers.timedatectl - result = jc.parsers.timedatectl.parse(timedatectl_command_output) +import jc.parsers.timedatectl +result = jc.parsers.timedatectl.parse(timedatectl_command_output) Schema: - { - "local_time": string, - "universal_time": string, - "epoch_utc": integer, # timezone-aware - "rtc_time": string, - "time_zone": string, - "ntp_enabled": boolean, - "ntp_synchronized": boolean, - "system_clock_synchronized": boolean, - "systemd-timesyncd.service_active": boolean, - "rtc_in_local_tz": boolean, - "dst_active": boolean - } +{ +"local_time": string, +"universal_time": string, +"epoch_utc": integer, # timezone-aware +"rtc_time": string, +"time_zone": string, +"ntp_enabled": boolean, +"ntp_synchronized": boolean, +"system_clock_synchronized": boolean, +"systemd-timesyncd.service_active": boolean, +"rtc_in_local_tz": boolean, +"dst_active": boolean +} -Examples: +**Examples**: - $ timedatectl | jc --timedatectl -p - { - "local_time": "Tue 2020-03-10 17:53:21 PDT", - "universal_time": "Wed 2020-03-11 00:53:21 UTC", - "rtc_time": "Wed 2020-03-11 00:53:21", - "time_zone": "America/Los_Angeles (PDT, -0700)", - "ntp_enabled": true, - "ntp_synchronized": true, - "rtc_in_local_tz": false, - "dst_active": true, - "epoch_utc": 1583888001 - } + + $ timedatectl | jc --timedatectl -p + { +- `"local_time"` - "Tue 2020-03-10 17:53:21 PDT", +- `"universal_time"` - "Wed 2020-03-11 00:53:21 UTC", +- `"rtc_time"` - "Wed 2020-03-11 00:53:21", +- `"time_zone"` - "America/Los_Angeles (PDT, -0700)", +- `"ntp_enabled"` - true, +- `"ntp_synchronized"` - true, +- `"rtc_in_local_tz"` - false, +- `"dst_active"` - true, +- `"epoch_utc"` - 1583888001 + } + + $ timedatectl | jc --timedatectl -p -r + { +- `"local_time"` - "Tue 2020-03-10 17:53:21 PDT", +- `"universal_time"` - "Wed 2020-03-11 00:53:21 UTC", +- `"rtc_time"` - "Wed 2020-03-11 00:53:21", +- `"time_zone"` - "America/Los_Angeles (PDT, -0700)", +- `"ntp_enabled"` - "yes", +- `"ntp_synchronized"` - "yes", +- `"rtc_in_local_tz"` - "no", +- `"dst_active"` - "yes" + } - $ timedatectl | jc --timedatectl -p -r - { - "local_time": "Tue 2020-03-10 17:53:21 PDT", - "universal_time": "Wed 2020-03-11 00:53:21 UTC", - "rtc_time": "Wed 2020-03-11 00:53:21", - "time_zone": "America/Los_Angeles (PDT, -0700)", - "ntp_enabled": "yes", - "ntp_synchronized": "yes", - "rtc_in_local_tz": "no", - "dst_active": "yes" - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/tracepath.md b/docs/parsers/tracepath.md index 96297c54..2ffb09f3 100644 --- a/docs/parsers/tracepath.md +++ b/docs/parsers/tracepath.md @@ -1,162 +1,174 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.tracepath + jc - JSON CLI output utility `tracepath` command output parser Supports `tracepath` and `tracepath6` output. Usage (cli): - $ tracepath 1.2.3.4 | jc --tracepath +$ tracepath 1.2.3.4 | jc --tracepath - or +or - $ jc tracepath 1.2.3.4 +$ jc tracepath 1.2.3.4 Usage (module): - import jc - result = jc.parse('tracepath', tracepath_command_output) +import jc +result = jc.parse('tracepath', tracepath_command_output) - or +or - import jc.parsers.tracepath - result = jc.parsers.tracepath.parse(tracepath_command_output) +import jc.parsers.tracepath +result = jc.parsers.tracepath.parse(tracepath_command_output) Schema: - { - "pmtu": integer, - "forward_hops": integer, - "return_hops": integer, - "hops": [ - { - "ttl": integer, - "guess": boolean, - "host": string, - "reply_ms": float, - "pmtu": integer, - "asymmetric_difference": integer, - "reached": boolean - } - ] - } +{ +"pmtu": integer, +"forward_hops": integer, +"return_hops": integer, +"hops": [ +{ +"ttl": integer, +"guess": boolean, +"host": string, +"reply_ms": float, +"pmtu": integer, +"asymmetric_difference": integer, +"reached": boolean +} +] +} -Examples: +**Examples**: - $ tracepath6 3ffe:2400:0:109::2 | jc --tracepath -p - { - "pmtu": 1480, - "forward_hops": 2, - "return_hops": 2, - "hops": [ - { - "ttl": 1, - "guess": true, - "host": "[LOCALHOST]", - "reply_ms": null, - "pmtu": 1500, - "asymmetric_difference": null, - "reached": false - }, - { - "ttl": 1, - "guess": false, - "host": "dust.inr.ac.ru", - "reply_ms": 0.411, - "pmtu": null, - "asymmetric_difference": null, - "reached": false - }, - { - "ttl": 2, - "guess": false, - "host": "dust.inr.ac.ru", - "reply_ms": 0.39, - "pmtu": 1480, - "asymmetric_difference": 1, - "reached": false - }, - { - "ttl": 2, - "guess": false, - "host": "3ffe:2400:0:109::2", - "reply_ms": 463.514, - "pmtu": null, - "asymmetric_difference": null, - "reached": true - } - ] - } + + $ tracepath6 3ffe:2400:0:109::2 | jc --tracepath -p + { +- `"pmtu"` - 1480, +- `"forward_hops"` - 2, +- `"return_hops"` - 2, +- `"hops"` - [ + { +- `"ttl"` - 1, +- `"guess"` - true, +- `"host"` - "[LOCALHOST]", +- `"reply_ms"` - null, +- `"pmtu"` - 1500, +- `"asymmetric_difference"` - null, +- `"reached"` - false + }, + { +- `"ttl"` - 1, +- `"guess"` - false, +- `"host"` - "dust.inr.ac.ru", +- `"reply_ms"` - 0.411, +- `"pmtu"` - null, +- `"asymmetric_difference"` - null, +- `"reached"` - false + }, + { +- `"ttl"` - 2, +- `"guess"` - false, +- `"host"` - "dust.inr.ac.ru", +- `"reply_ms"` - 0.39, +- `"pmtu"` - 1480, +- `"asymmetric_difference"` - 1, +- `"reached"` - false + }, + { +- `"ttl"` - 2, +- `"guess"` - false, +- `"host"` - "3ffe:2400:0:109::2", +- `"reply_ms"` - 463.514, +- `"pmtu"` - null, +- `"asymmetric_difference"` - null, +- `"reached"` - true + } + ] + } + + $ tracepath6 3ffe:2400:0:109::2 | jc --tracepath -p -r + { +- `"pmtu"` - "1480", +- `"forward_hops"` - "2", +- `"return_hops"` - "2", +- `"hops"` - [ + { +- `"ttl"` - "1", +- `"guess"` - true, +- `"host"` - "[LOCALHOST]", +- `"reply_ms"` - null, +- `"pmtu"` - "1500", +- `"asymmetric_difference"` - null, +- `"reached"` - false + }, + { +- `"ttl"` - "1", +- `"guess"` - false, +- `"host"` - "dust.inr.ac.ru", +- `"reply_ms"` - "0.411", +- `"pmtu"` - null, +- `"asymmetric_difference"` - null, +- `"reached"` - false + }, + { +- `"ttl"` - "2", +- `"guess"` - false, +- `"host"` - "dust.inr.ac.ru", +- `"reply_ms"` - "0.390", +- `"pmtu"` - "1480", +- `"asymmetric_difference"` - "1", +- `"reached"` - false + }, + { +- `"ttl"` - "2", +- `"guess"` - false, +- `"host"` - "3ffe:2400:0:109::2", +- `"reply_ms"` - "463.514", +- `"pmtu"` - null, +- `"asymmetric_difference"` - null, +- `"reached"` - true + } + ] + } - $ tracepath6 3ffe:2400:0:109::2 | jc --tracepath -p -r - { - "pmtu": "1480", - "forward_hops": "2", - "return_hops": "2", - "hops": [ - { - "ttl": "1", - "guess": true, - "host": "[LOCALHOST]", - "reply_ms": null, - "pmtu": "1500", - "asymmetric_difference": null, - "reached": false - }, - { - "ttl": "1", - "guess": false, - "host": "dust.inr.ac.ru", - "reply_ms": "0.411", - "pmtu": null, - "asymmetric_difference": null, - "reached": false - }, - { - "ttl": "2", - "guess": false, - "host": "dust.inr.ac.ru", - "reply_ms": "0.390", - "pmtu": "1480", - "asymmetric_difference": "1", - "reached": false - }, - { - "ttl": "2", - "guess": false, - "host": "3ffe:2400:0:109::2", - "reply_ms": "463.514", - "pmtu": null, - "asymmetric_difference": null, - "reached": true - } - ] - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/traceroute.md b/docs/parsers/traceroute.md index bf11c3c2..a77b62bf 100644 --- a/docs/parsers/traceroute.md +++ b/docs/parsers/traceroute.md @@ -1,151 +1,211 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.traceroute + jc - JSON CLI output utility `traceroute` command output parser Supports `traceroute` and `traceroute6` output. Note: On some operating systems you will need to redirect `STDERR` to - `STDOUT` for destination info since the header line is sent to - `STDERR`. A warning message will be printed to `STDERR` if the - header row is not found. +`STDOUT` for destination info since the header line is sent to +`STDERR`. A warning message will be printed to `STDERR` if the +header row is not found. - e.g. `$ traceroute 8.8.8.8 2>&1 | jc --traceroute` +e.g. `$ traceroute 8.8.8.8 2>&1 | jc --traceroute` Usage (cli): - $ traceroute 1.2.3.4 | jc --traceroute +$ traceroute 1.2.3.4 | jc --traceroute - or +or - $ jc traceroute 1.2.3.4 +$ jc traceroute 1.2.3.4 Usage (module): - import jc - result = jc.parse('traceroute', traceroute_command_output) +import jc +result = jc.parse('traceroute', traceroute_command_output) - or +or - import jc.parsers.traceroute - result = jc.parsers.traceroute.parse(traceroute_command_output) +import jc.parsers.traceroute +result = jc.parsers.traceroute.parse(traceroute_command_output) Schema: - { - "destination_ip": string, - "destination_name": string, - "hops": [ - { - "hop": integer, - "probes": [ - { - "annotation": string, - "asn": integer, - "ip": string, - "name": string, - "rtt": float - } - ] - } - ] - } +{ +"destination_ip": string, +"destination_name": string, +"hops": [ +{ +"hop": integer, +"probes": [ +{ +"annotation": string, +"asn": integer, +"ip": string, +"name": string, +"rtt": float +} +] +} +] +} -Examples: +**Examples**: - $ traceroute google.com | jc --traceroute -p - { - "destination_ip": "216.58.194.46", - "destination_name": "google.com", - "hops": [ - { - "hop": 1, - "probes": [ - { - "annotation": null, - "asn": null, - "ip": "216.230.231.141", - "name": "216-230-231-141.static.houston.tx.oplink.net", - "rtt": 198.574 - }, - { - "annotation": null, - "asn": null, - "ip": "216.230.231.141", - "name": "216-230-231-141.static.houston.tx.oplink.net", - "rtt": null - }, - { - "annotation": null, - "asn": null, - "ip": "216.230.231.141", - "name": "216-230-231-141.static.houston.tx.oplink.net", - "rtt": 198.65 - } - ] - }, - ... - ] - } + + $ traceroute google.com | jc --traceroute -p + { +- `"destination_ip"` - "216.58.194.46", +- `"destination_name"` - "google.com", +- `"hops"` - [ + { +- `"hop"` - 1, +- `"probes"` - [ + { +- `"annotation"` - null, +- `"asn"` - null, +- `"ip"` - "216.230.231.141", +- `"name"` - "216-230-231-141.static.houston.tx.oplink.net", +- `"rtt"` - 198.574 + }, + { +- `"annotation"` - null, +- `"asn"` - null, +- `"ip"` - "216.230.231.141", +- `"name"` - "216-230-231-141.static.houston.tx.oplink.net", +- `"rtt"` - null + }, + { +- `"annotation"` - null, +- `"asn"` - null, +- `"ip"` - "216.230.231.141", +- `"name"` - "216-230-231-141.static.houston.tx.oplink.net", +- `"rtt"` - 198.65 + } + ] + }, + ... + ] + } + + $ traceroute google.com | jc --traceroute -p -r + { +- `"destination_ip"` - "216.58.194.46", +- `"destination_name"` - "google.com", +- `"hops"` - [ + { +- `"hop"` - "1", +- `"probes"` - [ + { +- `"annotation"` - null, +- `"asn"` - null, +- `"ip"` - "216.230.231.141", +- `"name"` - "216-230-231-141.static.houston.tx.oplink.net", +- `"rtt"` - "198.574" + }, + { +- `"annotation"` - null, +- `"asn"` - null, +- `"ip"` - "216.230.231.141", +- `"name"` - "216-230-231-141.static.houston.tx.oplink.net", +- `"rtt"` - null + }, + { +- `"annotation"` - null, +- `"asn"` - null, +- `"ip"` - "216.230.231.141", +- `"name"` - "216-230-231-141.static.houston.tx.oplink.net", +- `"rtt"` - "198.650" + } + ] + }, + ... + ] + } - $ traceroute google.com | jc --traceroute -p -r - { - "destination_ip": "216.58.194.46", - "destination_name": "google.com", - "hops": [ - { - "hop": "1", - "probes": [ - { - "annotation": null, - "asn": null, - "ip": "216.230.231.141", - "name": "216-230-231-141.static.houston.tx.oplink.net", - "rtt": "198.574" - }, - { - "annotation": null, - "asn": null, - "ip": "216.230.231.141", - "name": "216-230-231-141.static.houston.tx.oplink.net", - "rtt": null - }, - { - "annotation": null, - "asn": null, - "ip": "216.230.231.141", - "name": "216-230-231-141.static.houston.tx.oplink.net", - "rtt": "198.650" - } - ] - }, - ... - ] - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### \_\_version\_\_ + +Copyright (C) 2015 Luis Benitez + +Parses the output of a traceroute execution into an AST (Abstract Syntax Tree). + +The MIT License (MIT) + +Copyright (c) 2014 Luis Benitez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +## \_Hop Objects + ```python -parse(data, raw=False, quiet=False) +class _Hop(object) +``` + + + +#### add\_probe + +```python +def add_probe(probe) +``` + +Adds a Probe instance to this hop's results. + + + +#### parse + +```python +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/ufw.md b/docs/parsers/ufw.md index 2651b6b4..1009576a 100644 --- a/docs/parsers/ufw.md +++ b/docs/parsers/ufw.md @@ -1,231 +1,243 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.ufw + jc - JSON CLI output utility `ufw status` command output parser Usage (cli): - $ ufw status | jc --ufw +$ ufw status | jc --ufw - or +or - $ jc ufw status +$ jc ufw status Usage (module): - import jc - result = jc.parse('ufw', ufw_command_output) +import jc +result = jc.parse('ufw', ufw_command_output) - or +or - import jc.parsers.ufw - result = jc.parsers.ufw.parse(ufw_command_output) +import jc.parsers.ufw +result = jc.parsers.ufw.parse(ufw_command_output) Schema: - { - "status": string, - "logging": string, - "logging_level": string, - "default": string, - "new_profiles": string, - "rules": [ - { - "action": string, - "action_direction": string, # null if blank - "index": integer, # null if blank - "network_protocol": string, - "to_ip": string, - "to_ip_prefix": integer, - "to_interface": string, - "to_transport": string, - "to_ports": [ - integer - ], - "to_port_ranges": [ - { - "start": integer, - "end": integer - } - ], - "to_service": string, # [0] - "from_ip": string, - "from_ip_prefix": integer, - "from_interface": string, - "from_transport": string, - "from_ports": [ - integer - ], - "from_port_ranges": [ - { - "start": integer, - "end": integer - } - ], - "from_service": string, # [1] - "comment": string # null if no comment - } - ] - } +{ +"status": string, +"logging": string, +"logging_level": string, +"default": string, +"new_profiles": string, +"rules": [ +{ +"action": string, +"action_direction": string, # null if blank +"index": integer, # null if blank +"network_protocol": string, +"to_ip": string, +"to_ip_prefix": integer, +"to_interface": string, +"to_transport": string, +"to_ports": [ +integer +], +"to_port_ranges": [ +{ +"start": integer, +"end": integer +} +], +"to_service": string, # [0] +"from_ip": string, +"from_ip_prefix": integer, +"from_interface": string, +"from_transport": string, +"from_ports": [ +integer +], +"from_port_ranges": [ +{ +"start": integer, +"end": integer +} +], +"from_service": string, # [1] +"comment": string # null if no comment +} +] +} - [0] null if any 'to' ports or port_ranges are set - [1] null if any 'from' ports or port_ranges are set +[0] null if any 'to' ports or port_ranges are set +[1] null if any 'from' ports or port_ranges are set -Examples: +**Examples**: - $ ufw status verbose | jc --ufw -p - { - "status": "active", - "logging": "on", - "logging_level": "low", - "default": "deny (incoming), allow (outgoing), disabled (routed)", - "new_profiles": "skip", - "rules": [ - { - "action": "ALLOW", - "action_direction": "IN", - "index": null, - "network_protocol": "ipv4", - "to_interface": "any", - "to_transport": "any", - "to_service": null, - "to_ports": [ - 22 - ], - "to_ip": "0.0.0.0", - "to_ip_prefix": 0, - "comment": null, - "from_ip": "0.0.0.0", - "from_ip_prefix": 0, - "from_interface": "any", - "from_transport": "any", - "from_port_ranges": [ - { - "start": 0, - "end": 65535 - } - ], - "from_service": null - }, - { - "action": "ALLOW", - "action_direction": "IN", - "index": null, - "network_protocol": "ipv4", - "to_interface": "any", - "to_transport": "tcp", - "to_service": null, - "to_ports": [ - 80, - 443 - ], - "to_ip": "0.0.0.0", - "to_ip_prefix": 0, - "comment": null, - "from_ip": "0.0.0.0", - "from_ip_prefix": 0, - "from_interface": "any", - "from_transport": "any", - "from_port_ranges": [ - { - "start": 0, - "end": 65535 - } - ], - "from_service": null - }, - ... - ] - } + + $ ufw status verbose | jc --ufw -p + { +- `"status"` - "active", +- `"logging"` - "on", +- `"logging_level"` - "low", +- `"default"` - "deny (incoming), allow (outgoing), disabled (routed)", +- `"new_profiles"` - "skip", +- `"rules"` - [ + { +- `"action"` - "ALLOW", +- `"action_direction"` - "IN", +- `"index"` - null, +- `"network_protocol"` - "ipv4", +- `"to_interface"` - "any", +- `"to_transport"` - "any", +- `"to_service"` - null, +- `"to_ports"` - [ + 22 + ], +- `"to_ip"` - "0.0.0.0", +- `"to_ip_prefix"` - 0, +- `"comment"` - null, +- `"from_ip"` - "0.0.0.0", +- `"from_ip_prefix"` - 0, +- `"from_interface"` - "any", +- `"from_transport"` - "any", +- `"from_port_ranges"` - [ + { +- `"start"` - 0, +- `"end"` - 65535 + } + ], +- `"from_service"` - null + }, + { +- `"action"` - "ALLOW", +- `"action_direction"` - "IN", +- `"index"` - null, +- `"network_protocol"` - "ipv4", +- `"to_interface"` - "any", +- `"to_transport"` - "tcp", +- `"to_service"` - null, +- `"to_ports"` - [ + 80, + 443 + ], +- `"to_ip"` - "0.0.0.0", +- `"to_ip_prefix"` - 0, +- `"comment"` - null, +- `"from_ip"` - "0.0.0.0", +- `"from_ip_prefix"` - 0, +- `"from_interface"` - "any", +- `"from_transport"` - "any", +- `"from_port_ranges"` - [ + { +- `"start"` - 0, +- `"end"` - 65535 + } + ], +- `"from_service"` - null + }, + ... + ] + } + + $ ufw status verbose | jc --ufw -p -r + { +- `"status"` - "active", +- `"logging"` - "on", +- `"logging_level"` - "low", +- `"default"` - "deny (incoming), allow (outgoing), disabled (routed)", +- `"new_profiles"` - "skip", +- `"rules"` - [ + { +- `"action"` - "ALLOW", +- `"action_direction"` - "IN", +- `"index"` - null, +- `"network_protocol"` - "ipv4", +- `"to_interface"` - "any", +- `"to_transport"` - "any", +- `"to_service"` - null, +- `"to_ports"` - [ + "22" + ], +- `"to_ip"` - "0.0.0.0", +- `"to_ip_prefix"` - "0", +- `"comment"` - null, +- `"from_ip"` - "0.0.0.0", +- `"from_ip_prefix"` - "0", +- `"from_interface"` - "any", +- `"from_transport"` - "any", +- `"from_port_ranges"` - [ + { +- `"start"` - "0", +- `"end"` - "65535" + } + ], +- `"from_service"` - null + }, + { +- `"action"` - "ALLOW", +- `"action_direction"` - "IN", +- `"index"` - null, +- `"network_protocol"` - "ipv4", +- `"to_interface"` - "any", +- `"to_transport"` - "tcp", +- `"to_service"` - null, +- `"to_ports"` - [ + "80", + "443" + ], +- `"to_ip"` - "0.0.0.0", +- `"to_ip_prefix"` - "0", +- `"comment"` - null, +- `"from_ip"` - "0.0.0.0", +- `"from_ip_prefix"` - "0", +- `"from_interface"` - "any", +- `"from_transport"` - "any", +- `"from_port_ranges"` - [ + { +- `"start"` - "0", +- `"end"` - "65535" + } + ], +- `"from_service"` - null + }, + ... + ] + } - $ ufw status verbose | jc --ufw -p -r - { - "status": "active", - "logging": "on", - "logging_level": "low", - "default": "deny (incoming), allow (outgoing), disabled (routed)", - "new_profiles": "skip", - "rules": [ - { - "action": "ALLOW", - "action_direction": "IN", - "index": null, - "network_protocol": "ipv4", - "to_interface": "any", - "to_transport": "any", - "to_service": null, - "to_ports": [ - "22" - ], - "to_ip": "0.0.0.0", - "to_ip_prefix": "0", - "comment": null, - "from_ip": "0.0.0.0", - "from_ip_prefix": "0", - "from_interface": "any", - "from_transport": "any", - "from_port_ranges": [ - { - "start": "0", - "end": "65535" - } - ], - "from_service": null - }, - { - "action": "ALLOW", - "action_direction": "IN", - "index": null, - "network_protocol": "ipv4", - "to_interface": "any", - "to_transport": "tcp", - "to_service": null, - "to_ports": [ - "80", - "443" - ], - "to_ip": "0.0.0.0", - "to_ip_prefix": "0", - "comment": null, - "from_ip": "0.0.0.0", - "from_ip_prefix": "0", - "from_interface": "any", - "from_transport": "any", - "from_port_ranges": [ - { - "start": "0", - "end": "65535" - } - ], - "from_service": null - }, - ... - ] - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/ufw_appinfo.md b/docs/parsers/ufw_appinfo.md index 85f46de4..54e819ca 100644 --- a/docs/parsers/ufw_appinfo.md +++ b/docs/parsers/ufw_appinfo.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.ufw\_appinfo -# jc.parsers.ufw_appinfo jc - JSON CLI output utility `ufw app info [application]` command output parser @@ -13,157 +15,167 @@ lists and ranges that remove duplicate ports and merge overlapping ranges. Usage (cli): - $ ufw app info OpenSSH | jc --ufw-appinfo +$ ufw app info OpenSSH | jc --ufw-appinfo - or +or - $ jc ufw app info OpenSSH +$ jc ufw app info OpenSSH Usage (module): - import jc - result = jc.parse('ufw_appinfo', ufw_appinfo_command_output) +import jc +result = jc.parse('ufw_appinfo', ufw_appinfo_command_output) - or +or - import jc.parsers.ufw_appinfo - result = jc.parsers.ufw_appinfo.parse(ufw_appinfo_command_output) +import jc.parsers.ufw_appinfo +result = jc.parsers.ufw_appinfo.parse(ufw_appinfo_command_output) Schema: - [ - { - "profile": string, - "title": string, - "description": string, - "tcp_list": [ - integer - ], - "tcp_ranges": [ - { - "start": integer, # [0] - "end": integer - } - ], - "udp_list": [ - integer - ], - "udp_ranges": [ - { - "start": integer, # [0] - "end": integer - } - ], - "normalized_tcp_list": [ - integers # [1] - ], - "normalized_tcp_ranges": [ - { - "start": integer, # [0] - "end": integers # [2] - } - ], - "normalized_udp_list": [ - integers # [1] - ], - "normalized_udp_ranges": [ - { - "start": integer, # [0] - "end": integers # [2] - } - ] - } - ] +[ +{ +"profile": string, +"title": string, +"description": string, +"tcp_list": [ +integer +], +"tcp_ranges": [ +{ +"start": integer, # [0] +"end": integer +} +], +"udp_list": [ +integer +], +"udp_ranges": [ +{ +"start": integer, # [0] +"end": integer +} +], +"normalized_tcp_list": [ +integers # [1] +], +"normalized_tcp_ranges": [ +{ +"start": integer, # [0] +"end": integers # [2] +} +], +"normalized_udp_list": [ +integers # [1] +], +"normalized_udp_ranges": [ +{ +"start": integer, # [0] +"end": integers # [2] +} +] +} +] - [0] 'any' is converted to start/end: 0/65535 - [1] duplicates and overlapping are removed - [2] overlapping are merged +[0] 'any' is converted to start/end: 0/65535 +[1] duplicates and overlapping are removed +[2] overlapping are merged -Examples: +**Examples**: - $ ufw app info MSN | jc --ufw-appinfo -p - [ - { - "profile": "MSN", - "title": "MSN Chat", - "description": "MSN chat protocol (with file transfer and voice)", - "tcp_list": [ - 1863, - 6901 - ], - "udp_list": [ - 1863, - 6901 - ], - "tcp_ranges": [ - { - "start": 6891, - "end": 6900 - } - ], - "normalized_tcp_list": [ - 1863, - 6901 - ], - "normalized_tcp_ranges": [ - { - "start": 6891, - "end": 6900 - } - ], - "normalized_udp_list": [ - 1863, - 6901 - ] - } - ] + + $ ufw app info MSN | jc --ufw-appinfo -p + [ + { +- `"profile"` - "MSN", +- `"title"` - "MSN Chat", +- `"description"` - "MSN chat protocol (with file transfer and voice)", +- `"tcp_list"` - [ + 1863, + 6901 + ], +- `"udp_list"` - [ + 1863, + 6901 + ], +- `"tcp_ranges"` - [ + { +- `"start"` - 6891, +- `"end"` - 6900 + } + ], +- `"normalized_tcp_list"` - [ + 1863, + 6901 + ], +- `"normalized_tcp_ranges"` - [ + { +- `"start"` - 6891, +- `"end"` - 6900 + } + ], +- `"normalized_udp_list"` - [ + 1863, + 6901 + ] + } + ] + + $ ufw app info MSN | jc --ufw-appinfo -p -r + [ + { +- `"profile"` - "MSN", +- `"title"` - "MSN Chat", +- `"description"` - "MSN chat protocol (with file transfer and voice)", +- `"tcp_list"` - [ + "1863", + "6901" + ], +- `"udp_list"` - [ + "1863", + "6901" + ], +- `"tcp_ranges"` - [ + { +- `"start"` - "6891", +- `"end"` - "6900" + } + ] + } + ] - $ ufw app info MSN | jc --ufw-appinfo -p -r - [ - { - "profile": "MSN", - "title": "MSN Chat", - "description": "MSN chat protocol (with file transfer and voice)", - "tcp_list": [ - "1863", - "6901" - ], - "udp_list": [ - "1863", - "6901" - ], - "tcp_ranges": [ - { - "start": "6891", - "end": "6900" - } - ] - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/uname.md b/docs/parsers/uname.md index f83c96ba..7c59dba9 100644 --- a/docs/parsers/uname.md +++ b/docs/parsers/uname.md @@ -1,78 +1,90 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.uname + jc - JSON CLI output utility `uname -a` command output parser Note: Must use `uname -a` Usage (cli): - $ uname -a | jc --uname +$ uname -a | jc --uname - or +or - $ jc uname -a +$ jc uname -a Usage (module): - import jc - result = jc.parse('uname', uname_command_output) +import jc +result = jc.parse('uname', uname_command_output) - or +or - import jc.parsers.uname - result = jc.parsers.uname.parse(uname_command_output) +import jc.parsers.uname +result = jc.parsers.uname.parse(uname_command_output) Schema: - { - "kernel_name": string, - "node_name": string, - "kernel_release": string, - "operating_system": string, - "hardware_platform": string, - "processor": string, - "machine": string, - "kernel_version": string - } +{ +"kernel_name": string, +"node_name": string, +"kernel_release": string, +"operating_system": string, +"hardware_platform": string, +"processor": string, +"machine": string, +"kernel_version": string +} -Example: +**Example**: - $ uname -a | jc --uname -p - { - "kernel_name": "Linux", - "node_name": "user-ubuntu", - "kernel_release": "4.15.0-65-generic", - "operating_system": "GNU/Linux", - "hardware_platform": "x86_64", - "processor": "x86_64", - "machine": "x86_64", - "kernel_version": "#74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019" - } + + $ uname -a | jc --uname -p + { +- `"kernel_name"` - "Linux", +- `"node_name"` - "user-ubuntu", +- `"kernel_release"` - "4.15.0-65-generic", +- `"operating_system"` - "GNU/Linux", +- `"hardware_platform"` - "x86_64", +- `"processor"` - "x86_64", +- `"machine"` - "x86_64", +- `"kernel_version"` - "`74`-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019" + } + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, freebsd diff --git a/docs/parsers/universal.md b/docs/parsers/universal.md index 1b25f899..d9b7682e 100644 --- a/docs/parsers/universal.md +++ b/docs/parsers/universal.md @@ -1,57 +1,70 @@ + # jc.parsers.universal + jc - JSON CLI output utility universal Parsers -## simple_table_parse + + +#### simple\_table\_parse + ```python -simple_table_parse(data) +def simple_table_parse(data) ``` Parse simple tables. The last column may contain data with spaces. -Parameters: +**Arguments**: - data: (list) Text data to parse that has been split into lines - via .splitlines(). Item 0 must be the header row. - Any spaces in header names should be changed to - underscore '_'. You should also ensure headers are - lowercase by using .lower(). + +- `data` - (list) Text data to parse that has been split into lines + via .splitlines(). Item 0 must be the header row. + Any spaces in header names should be changed to + underscore '_'. You should also ensure headers are + lowercase by using .lower(). + + Also, ensure there are no blank lines (list items) + in the data. + - Also, ensure there are no blank lines (list items) - in the data. +**Returns**: -Returns: + + List of Dictionaries - List of Dictionaries + +#### sparse\_table\_parse -## sparse_table_parse ```python -sparse_table_parse(data, delim='\u2063') +def sparse_table_parse(data, delim='\u2063') ``` Parse tables with missing column data or with spaces in column data. -Parameters: +**Arguments**: - data: (list) Text data to parse that has been split into lines - via .splitlines(). Item 0 must be the header row. - Any spaces in header names should be changed to - underscore '_'. You should also ensure headers are - lowercase by using .lower(). Do not change the - position of header names as the positions are used - to find the data. + +- `data` - (list) Text data to parse that has been split into lines + via .splitlines(). Item 0 must be the header row. + Any spaces in header names should be changed to + underscore '_'. You should also ensure headers are + lowercase by using .lower(). Do not change the + position of header names as the positions are used + to find the data. + + Also, ensure there are no blank lines (list items) + in the data. + +- `delim` - (string) Delimiter to use. By default `u\\2063` + (invisible separator) is used since it is unlikely + to ever be seen in terminal output. You can change + this for troubleshooting purposes or if there is a + delimiter conflict with your data. + - Also, ensure there are no blank lines (list items) - in the data. +**Returns**: - delim: (string) Delimiter to use. By default `u\2063` - (invisible separator) is used since it is unlikely - to ever be seen in terminal output. You can change - this for troubleshooting purposes or if there is a - delimiter conflict with your data. - -Returns: - - List of Dictionaries + + List of Dictionaries diff --git a/docs/parsers/upower.md b/docs/parsers/upower.md index 5c1651f1..a8b58381 100644 --- a/docs/parsers/upower.md +++ b/docs/parsers/upower.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.upower + jc - JSON CLI output utility `upower` command output parser The `updated_epoch` calculated timestamp field is naive. (i.e. based on the @@ -11,219 +13,229 @@ only available if the timezone field is UTC. Usage (cli): - $ upower -d | jc --upower +$ upower -d | jc --upower - or +or - $ jc upower -d +$ jc upower -d Usage (module): - import jc - result = jc.parse('upower', upower_command_output) +import jc +result = jc.parse('upower', upower_command_output) - or +or - import jc.parsers.upower - result = jc.parsers.upower.parse(upower_command_output) +import jc.parsers.upower +result = jc.parsers.upower.parse(upower_command_output) Schema: - [ - { - "type": string, - "device_name": string, - "native_path": string, - "power_supply": boolean, - "updated": string, - "updated_epoch": integer, # [0] - "updated_epoch_utc": integer, # [0] - "updated_seconds_ago": integer, - "has_history": boolean, - "has_statistics": boolean, - "detail": { - "type": string, - "warning_level": string, # null if none - "online": boolean, - "icon_name": string - "present": boolean, - "rechargeable": boolean, - "state": string, - "energy": float, - "energy_unit": string, - "energy_empty": float, - "energy_empty_unit": string, - "energy_full": float, - "energy_full_unit": string, - "energy_full_design": float, - "energy_full_design_unit": string, - "energy_rate": float, - "energy_rate_unit": string, - "voltage": float, - "voltage_unit": string, - "time_to_full": float, - "time_to_full_unit": string, - "percentage": float, - "capacity": float, - "technology": string - }, - "history_charge": [ - { - "time": integer, - "percent_charged": float, - "status": string - } - ], - "history_rate":[ - { - "time": integer, - "percent_charged": float, - "status": string - } - ], - "daemon_version": string, - "on_battery": boolean, - "lid_is_closed": boolean, - "lid_is_present": boolean, - "critical_action": string - } - ] +[ +{ +"type": string, +"device_name": string, +"native_path": string, +"power_supply": boolean, +"updated": string, +"updated_epoch": integer, # [0] +"updated_epoch_utc": integer, # [0] +"updated_seconds_ago": integer, +"has_history": boolean, +"has_statistics": boolean, +"detail": { +"type": string, +"warning_level": string, # null if none +"online": boolean, +"icon_name": string +"present": boolean, +"rechargeable": boolean, +"state": string, +"energy": float, +"energy_unit": string, +"energy_empty": float, +"energy_empty_unit": string, +"energy_full": float, +"energy_full_unit": string, +"energy_full_design": float, +"energy_full_design_unit": string, +"energy_rate": float, +"energy_rate_unit": string, +"voltage": float, +"voltage_unit": string, +"time_to_full": float, +"time_to_full_unit": string, +"percentage": float, +"capacity": float, +"technology": string +}, +"history_charge": [ +{ +"time": integer, +"percent_charged": float, +"status": string +} +], +"history_rate":[ +{ +"time": integer, +"percent_charged": float, +"status": string +} +], +"daemon_version": string, +"on_battery": boolean, +"lid_is_closed": boolean, +"lid_is_present": boolean, +"critical_action": string +} +] - [0] null if date-time conversion fails +[0] null if date-time conversion fails -Examples: +**Examples**: - $ upower -i /org/freedesktop/UPower/devices/battery | jc --upower -p - [ - { - "native_path": "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...", - "vendor": "NOTEBOOK", - "model": "BAT", - "serial": "0001", - "power_supply": true, - "updated": "Thu 11 Mar 2021 06:28:08 PM UTC", - "has_history": true, - "has_statistics": true, - "detail": { - "type": "battery", - "present": true, - "rechargeable": true, - "state": "charging", - "energy": 22.3998, - "energy_empty": 0.0, - "energy_full": 52.6473, - "energy_full_design": 62.16, - "energy_rate": 31.6905, - "voltage": 12.191, - "time_to_full": 57.3, - "percentage": 42.5469, - "capacity": 84.6964, - "technology": "lithium-ion", - "energy_unit": "Wh", - "energy_empty_unit": "Wh", - "energy_full_unit": "Wh", - "energy_full_design_unit": "Wh", - "energy_rate_unit": "W", - "voltage_unit": "V", - "time_to_full_unit": "minutes" - }, - "history_charge": [ - { - "time": 1328809335, - "percent_charged": 42.547, - "status": "charging" - }, - { - "time": 1328809305, - "percent_charged": 42.02, - "status": "charging" - } - ], - "history_rate": [ - { - "time": 1328809335, - "percent_charged": 31.691, - "status": "charging" - } - ], - "updated_seconds_ago": 441975, - "updated_epoch": 1615516088, - "updated_epoch_utc": 1615487288 - } - ] + + $ upower -i /org/freedesktop/UPower/devices/battery | jc --upower -p + [ + { +- `"native_path"` - "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...", +- `"vendor"` - "NOTEBOOK", +- `"model"` - "BAT", +- `"serial"` - "0001", +- `"power_supply"` - true, +- `"updated"` - "Thu 11 Mar 2021 06:28:08 PM UTC", +- `"has_history"` - true, +- `"has_statistics"` - true, +- `"detail"` - { +- `"type"` - "battery", +- `"present"` - true, +- `"rechargeable"` - true, +- `"state"` - "charging", +- `"energy"` - 22.3998, +- `"energy_empty"` - 0.0, +- `"energy_full"` - 52.6473, +- `"energy_full_design"` - 62.16, +- `"energy_rate"` - 31.6905, +- `"voltage"` - 12.191, +- `"time_to_full"` - 57.3, +- `"percentage"` - 42.5469, +- `"capacity"` - 84.6964, +- `"technology"` - "lithium-ion", +- `"energy_unit"` - "Wh", +- `"energy_empty_unit"` - "Wh", +- `"energy_full_unit"` - "Wh", +- `"energy_full_design_unit"` - "Wh", +- `"energy_rate_unit"` - "W", +- `"voltage_unit"` - "V", +- `"time_to_full_unit"` - "minutes" + }, +- `"history_charge"` - [ + { +- `"time"` - 1328809335, +- `"percent_charged"` - 42.547, +- `"status"` - "charging" + }, + { +- `"time"` - 1328809305, +- `"percent_charged"` - 42.02, +- `"status"` - "charging" + } + ], +- `"history_rate"` - [ + { +- `"time"` - 1328809335, +- `"percent_charged"` - 31.691, +- `"status"` - "charging" + } + ], +- `"updated_seconds_ago"` - 441975, +- `"updated_epoch"` - 1615516088, +- `"updated_epoch_utc"` - 1615487288 + } + ] + + $ upower -i /org/freedesktop/UPower/devices/battery | jc --upower -p -r + [ + { +- `"native_path"` - "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...", +- `"vendor"` - "NOTEBOOK", +- `"model"` - "BAT", +- `"serial"` - "0001", +- `"power_supply"` - "yes", +- `"updated"` - "Thu 11 Mar 2021 06:28:08 PM UTC (441975 seconds ago)", +- `"has_history"` - "yes", +- `"has_statistics"` - "yes", +- `"detail"` - { +- `"type"` - "battery", +- `"present"` - "yes", +- `"rechargeable"` - "yes", +- `"state"` - "charging", +- `"energy"` - "22.3998 Wh", +- `"energy_empty"` - "0 Wh", +- `"energy_full"` - "52.6473 Wh", +- `"energy_full_design"` - "62.16 Wh", +- `"energy_rate"` - "31.6905 W", +- `"voltage"` - "12.191 V", +- `"time_to_full"` - "57.3 minutes", +- `"percentage"` - "42.5469%", +- `"capacity"` - "84.6964%", +- `"technology"` - "lithium-ion" + }, +- `"history_charge"` - [ + { +- `"time"` - "1328809335", +- `"percent_charged"` - "42.547", +- `"status"` - "charging" + }, + { +- `"time"` - "1328809305", +- `"percent_charged"` - "42.020", +- `"status"` - "charging" + } + ], +- `"history_rate"` - [ + { +- `"time"` - "1328809335", +- `"percent_charged"` - "31.691", +- `"status"` - "charging" + } + ] + } + ] - $ upower -i /org/freedesktop/UPower/devices/battery | jc --upower -p -r - [ - { - "native_path": "/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/p...", - "vendor": "NOTEBOOK", - "model": "BAT", - "serial": "0001", - "power_supply": "yes", - "updated": "Thu 11 Mar 2021 06:28:08 PM UTC (441975 seconds ago)", - "has_history": "yes", - "has_statistics": "yes", - "detail": { - "type": "battery", - "present": "yes", - "rechargeable": "yes", - "state": "charging", - "energy": "22.3998 Wh", - "energy_empty": "0 Wh", - "energy_full": "52.6473 Wh", - "energy_full_design": "62.16 Wh", - "energy_rate": "31.6905 W", - "voltage": "12.191 V", - "time_to_full": "57.3 minutes", - "percentage": "42.5469%", - "capacity": "84.6964%", - "technology": "lithium-ion" - }, - "history_charge": [ - { - "time": "1328809335", - "percent_charged": "42.547", - "status": "charging" - }, - { - "time": "1328809305", - "percent_charged": "42.020", - "status": "charging" - } - ], - "history_rate": [ - { - "time": "1328809335", - "percent_charged": "31.691", - "status": "charging" - } - ] - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/uptime.md b/docs/parsers/uptime.md index 78d5e3e5..9b62983c 100644 --- a/docs/parsers/uptime.md +++ b/docs/parsers/uptime.md @@ -1,96 +1,108 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.uptime + jc - JSON CLI output utility `uptime` command output parser Usage (cli): - $ uptime | jc --uptime +$ uptime | jc --uptime - or +or - $ jc uptime +$ jc uptime Usage (module): - import jc - result = jc.parse('uptime', uptime_command_output) +import jc +result = jc.parse('uptime', uptime_command_output) - or +or - import jc.parsers.uptime - result = jc.parsers.uptime.parse(uptime_command_output) +import jc.parsers.uptime +result = jc.parsers.uptime.parse(uptime_command_output) Schema: - { - "time": string, - "time_hour": integer, - "time_minute": integer, - "time_second": integer, # null if not displayed - "uptime": string, - "uptime_days": integer, - "uptime_hours": integer, - "uptime_minutes": integer, - "uptime_total_seconds": integer, - "users": integer, - "load_1m": float, - "load_5m": float, - "load_15m": float - } +{ +"time": string, +"time_hour": integer, +"time_minute": integer, +"time_second": integer, # null if not displayed +"uptime": string, +"uptime_days": integer, +"uptime_hours": integer, +"uptime_minutes": integer, +"uptime_total_seconds": integer, +"users": integer, +"load_1m": float, +"load_5m": float, +"load_15m": float +} -Example: +**Example**: - $ uptime | jc --uptime -p - { - "time": "11:35", - "uptime": "3 days, 4:03", - "users": 5, - "load_1m": 1.88, - "load_5m": 2.0, - "load_15m": 1.94, - "time_hour": 11, - "time_minute": 35, - "time_second": null, - "uptime_days": 3, - "uptime_hours": 4, - "uptime_minutes": 3, - "uptime_total_seconds": 273780 - } + + $ uptime | jc --uptime -p + { +- `"time"` - "11:35", +- `"uptime"` - "3 days, 4:03", +- `"users"` - 5, +- `"load_1m"` - 1.88, +- `"load_5m"` - 2.0, +- `"load_15m"` - 1.94, +- `"time_hour"` - 11, +- `"time_minute"` - 35, +- `"time_second"` - null, +- `"uptime_days"` - 3, +- `"uptime_hours"` - 4, +- `"uptime_minutes"` - 3, +- `"uptime_total_seconds"` - 273780 + } + + $ uptime | jc --uptime -p -r + { +- `"time"` - "11:36", +- `"uptime"` - "3 days, 4:04", +- `"users"` - "5", +- `"load_1m"` - "1.88", +- `"load_5m"` - "1.99", +- `"load_15m"` - "1.94" + } - $ uptime | jc --uptime -p -r - { - "time": "11:36", - "uptime": "3 days, 4:04", - "users": "5", - "load_1m": "1.88", - "load_5m": "1.99", - "load_15m": "1.94" - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data + + Dictionary. Raw or processed structured data ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/vmstat.md b/docs/parsers/vmstat.md index efa9a99c..18b08ffa 100644 --- a/docs/parsers/vmstat.md +++ b/docs/parsers/vmstat.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.vmstat + jc - JSON CLI output utility `vmstat` command output parser Options supported: `-a`, `-w`, `-d`, `-t` @@ -13,145 +15,155 @@ available if the timezone field is UTC. Usage (cli): - $ vmstat | jc --vmstat +$ vmstat | jc --vmstat - or +or - $ jc vmstat +$ jc vmstat Usage (module): - import jc - result = jc.parse('vmstat', vmstat_command_output) +import jc +result = jc.parse('vmstat', vmstat_command_output) - or +or - import jc.parsers.vmstat - result = jc.parsers.vmstat.parse(vmstat_command_output) +import jc.parsers.vmstat +result = jc.parsers.vmstat.parse(vmstat_command_output) Schema: - [ - { - "runnable_procs": integer, - "uninterruptible_sleeping_procs": integer, - "virtual_mem_used": integer, - "free_mem": integer, - "buffer_mem": integer, - "cache_mem": integer, - "inactive_mem": integer, - "active_mem": integer, - "swap_in": integer, - "swap_out": integer, - "blocks_in": integer, - "blocks_out": integer, - "interrupts": integer, - "context_switches": integer, - "user_time": integer, - "system_time": integer, - "idle_time": integer, - "io_wait_time": integer, - "stolen_time": integer, - "disk": string, - "total_reads": integer, - "merged_reads": integer, - "sectors_read": integer, - "reading_ms": integer, - "total_writes": integer, - "merged_writes": integer, - "sectors_written": integer, - "writing_ms": integer, - "current_io": integer, - "io_seconds": integer, - "timestamp": string, - "timezone": string, - "epoch": integer, # [0] - "epoch_utc": integer # [1] - } - ] +[ +{ +"runnable_procs": integer, +"uninterruptible_sleeping_procs": integer, +"virtual_mem_used": integer, +"free_mem": integer, +"buffer_mem": integer, +"cache_mem": integer, +"inactive_mem": integer, +"active_mem": integer, +"swap_in": integer, +"swap_out": integer, +"blocks_in": integer, +"blocks_out": integer, +"interrupts": integer, +"context_switches": integer, +"user_time": integer, +"system_time": integer, +"idle_time": integer, +"io_wait_time": integer, +"stolen_time": integer, +"disk": string, +"total_reads": integer, +"merged_reads": integer, +"sectors_read": integer, +"reading_ms": integer, +"total_writes": integer, +"merged_writes": integer, +"sectors_written": integer, +"writing_ms": integer, +"current_io": integer, +"io_seconds": integer, +"timestamp": string, +"timezone": string, +"epoch": integer, # [0] +"epoch_utc": integer # [1] +} +] - [0] naive timestamp if -t flag is used - [1] aware timestamp if -t flag is used and UTC TZ +[0] naive timestamp if -t flag is used +[1] aware timestamp if -t flag is used and UTC TZ -Examples: +**Examples**: - $ vmstat | jc --vmstat -p - [ - { - "runnable_procs": 2, - "uninterruptible_sleeping_procs": 0, - "virtual_mem_used": 0, - "free_mem": 2794468, - "buffer_mem": 2108, - "cache_mem": 741208, - "inactive_mem": null, - "active_mem": null, - "swap_in": 0, - "swap_out": 0, - "blocks_in": 1, - "blocks_out": 3, - "interrupts": 29, - "context_switches": 57, - "user_time": 0, - "system_time": 0, - "idle_time": 99, - "io_wait_time": 0, - "stolen_time": 0, - "timestamp": null, - "timezone": null - } - ] + + $ vmstat | jc --vmstat -p + [ + { +- `"runnable_procs"` - 2, +- `"uninterruptible_sleeping_procs"` - 0, +- `"virtual_mem_used"` - 0, +- `"free_mem"` - 2794468, +- `"buffer_mem"` - 2108, +- `"cache_mem"` - 741208, +- `"inactive_mem"` - null, +- `"active_mem"` - null, +- `"swap_in"` - 0, +- `"swap_out"` - 0, +- `"blocks_in"` - 1, +- `"blocks_out"` - 3, +- `"interrupts"` - 29, +- `"context_switches"` - 57, +- `"user_time"` - 0, +- `"system_time"` - 0, +- `"idle_time"` - 99, +- `"io_wait_time"` - 0, +- `"stolen_time"` - 0, +- `"timestamp"` - null, +- `"timezone"` - null + } + ] + + $ vmstat | jc --vmstat -p -r + [ + { +- `"runnable_procs"` - "2", +- `"uninterruptible_sleeping_procs"` - "0", +- `"virtual_mem_used"` - "0", +- `"free_mem"` - "2794468", +- `"buffer_mem"` - "2108", +- `"cache_mem"` - "741208", +- `"inactive_mem"` - null, +- `"active_mem"` - null, +- `"swap_in"` - "0", +- `"swap_out"` - "0", +- `"blocks_in"` - "1", +- `"blocks_out"` - "3", +- `"interrupts"` - "29", +- `"context_switches"` - "57", +- `"user_time"` - "0", +- `"system_time"` - "0", +- `"idle_time"` - "99", +- `"io_wait_time"` - "0", +- `"stolen_time"` - "0", +- `"timestamp"` - null, +- `"timezone"` - null + } + ] - $ vmstat | jc --vmstat -p -r - [ - { - "runnable_procs": "2", - "uninterruptible_sleeping_procs": "0", - "virtual_mem_used": "0", - "free_mem": "2794468", - "buffer_mem": "2108", - "cache_mem": "741208", - "inactive_mem": null, - "active_mem": null, - "swap_in": "0", - "swap_out": "0", - "blocks_in": "1", - "blocks_out": "3", - "interrupts": "29", - "context_switches": "57", - "user_time": "0", - "system_time": "0", - "idle_time": "99", - "io_wait_time": "0", - "stolen_time": "0", - "timestamp": null, - "timezone": null - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux diff --git a/docs/parsers/vmstat_s.md b/docs/parsers/vmstat_s.md index 8c6532d7..f6e58020 100644 --- a/docs/parsers/vmstat_s.md +++ b/docs/parsers/vmstat_s.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + + +# jc.parsers.vmstat\_s -# jc.parsers.vmstat_s jc - JSON CLI output utility `vmstat` command output streaming parser > This streaming parser outputs JSON Lines @@ -15,7 +17,7 @@ available if the timezone field is UTC. Usage (cli): - $ vmstat | jc --vmstat-s +$ vmstat | jc --vmstat-s > Note: When piping `jc` converted `vmstat` output to other processes it may appear the output is hanging due to the OS pipe buffers. This is because @@ -26,113 +28,125 @@ for more information. Usage (module): - import jc - # result is an iterable object (generator) - result = jc.parse('vmstat_s', vmstat_command_output.splitlines()) - for item in result: - # do something +import jc +# result is an iterable object (generator) +result = jc.parse('vmstat_s', vmstat_command_output.splitlines()) +for item in result: +# do something - or +or - import jc.parsers.vmstat_s - # result is an iterable object (generator) - result = jc.parsers.vmstat_s.parse(vmstat_command_output.splitlines()) - for item in result: - # do something +import jc.parsers.vmstat_s +# result is an iterable object (generator) +result = jc.parsers.vmstat_s.parse(vmstat_command_output.splitlines()) +for item in result: +# do something Schema: - { - "runnable_procs": integer, - "uninterruptible_sleeping_procs": integer, - "virtual_mem_used": integer, - "free_mem": integer, - "buffer_mem": integer, - "cache_mem": integer, - "inactive_mem": integer, - "active_mem": integer, - "swap_in": integer, - "swap_out": integer, - "blocks_in": integer, - "blocks_out": integer, - "interrupts": integer, - "context_switches": integer, - "user_time": integer, - "system_time": integer, - "idle_time": integer, - "io_wait_time": integer, - "stolen_time": integer, - "disk": string, - "total_reads": integer, - "merged_reads": integer, - "sectors_read": integer, - "reading_ms": integer, - "total_writes": integer, - "merged_writes": integer, - "sectors_written": integer, - "writing_ms": integer, - "current_io": integer, - "io_seconds": integer, - "timestamp": string, - "timezone": string, - "epoch": integer, # [0] - "epoch_utc": integer # [1] +{ +"runnable_procs": integer, +"uninterruptible_sleeping_procs": integer, +"virtual_mem_used": integer, +"free_mem": integer, +"buffer_mem": integer, +"cache_mem": integer, +"inactive_mem": integer, +"active_mem": integer, +"swap_in": integer, +"swap_out": integer, +"blocks_in": integer, +"blocks_out": integer, +"interrupts": integer, +"context_switches": integer, +"user_time": integer, +"system_time": integer, +"idle_time": integer, +"io_wait_time": integer, +"stolen_time": integer, +"disk": string, +"total_reads": integer, +"merged_reads": integer, +"sectors_read": integer, +"reading_ms": integer, +"total_writes": integer, +"merged_writes": integer, +"sectors_written": integer, +"writing_ms": integer, +"current_io": integer, +"io_seconds": integer, +"timestamp": string, +"timezone": string, +"epoch": integer, # [0] +"epoch_utc": integer # [1] - # Below object only exists if using -qq or ignore_exceptions=True +# Below object only exists if using -qq or ignore_exceptions=True - "_jc_meta": - { - "success": boolean, # [2] - "error": string, # [3] - "line": string # [3] - } - } +"_jc_meta": +{ +"success": boolean, # [2] +"error": string, # [3] +"line": string # [3] +} +} - [0] naive timestamp if -t flag is used - [1] aware timestamp if -t flag is used and UTC TZ - [2] false if error parsing - [3] exists if "success" is false +[0] naive timestamp if -t flag is used +[1] aware timestamp if -t flag is used and UTC TZ +[2] false if error parsing +[3] exists if "success" is false -Examples: +**Examples**: - $ vmstat | jc --vmstat-s - {"runnable_procs":2,"uninterruptible_sleeping_procs":0,"virtual_mem...} - ... + + $ vmstat | jc --vmstat-s + {"runnable_procs":2,"uninterruptible_sleeping_procs":0,"virtual_mem...} + ... + + $ vmstat | jc --vmstat-s -r + {"runnable_procs":"2","uninterruptible_sleeping_procs":"0","virtua...} + ... - $ vmstat | jc --vmstat-s -r - {"runnable_procs":"2","uninterruptible_sleeping_procs":"0","virtua...} - ... + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False, ignore_exceptions=False) +def parse(data, raw=False, quiet=False, ignore_exceptions=False) ``` Main text parsing generator function. Returns an iterator object. -Parameters: +**Arguments**: - data: (iterable) line-based text data to parse - (e.g. sys.stdin or str.splitlines()) + +- `data` - (iterable) line-based text data to parse + (e.g. sys.stdin or str.splitlines()) + +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True +- `ignore_exceptions` - (boolean) ignore parsing exceptions if True + - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True - ignore_exceptions: (boolean) ignore parsing exceptions if True +**Yields**: -Yields: + + Dictionary. Raw or processed structured data. + - Dictionary. Raw or processed structured data. +**Returns**: -Returns: - - Iterator object + + Iterator object ## Parser Information Compatibility: linux diff --git a/docs/parsers/w.md b/docs/parsers/w.md index 8f3a8b6b..bb7d53f7 100644 --- a/docs/parsers/w.md +++ b/docs/parsers/w.md @@ -1,134 +1,146 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.w + jc - JSON CLI output utility `w` command output parser Usage (cli): - $ w | jc --w +$ w | jc --w - or +or - $ jc w +$ jc w Usage (module): - import jc - result = jc.parse('w', w_command_output) +import jc +result = jc.parse('w', w_command_output) - or +or - import jc.parsers.w - result = jc.parsers.w.parse(w_command_output) +import jc.parsers.w +result = jc.parsers.w.parse(w_command_output) Schema: - [ - { - "user": string, # '-' = null - "tty": string, # '-' = null - "from": string, # '-' = null - "login_at": string, # '-' = null - "idle": string, # '-' = null - "jcpu": string, - "pcpu": string, - "what": string # '-' = null - } - ] +[ +{ +"user": string, # '-' = null +"tty": string, # '-' = null +"from": string, # '-' = null +"login_at": string, # '-' = null +"idle": string, # '-' = null +"jcpu": string, +"pcpu": string, +"what": string # '-' = null +} +] -Examples: +**Examples**: - $ w | jc --w -p - [ - { - "user": "root", - "tty": "tty1", - "from": null, - "login_at": "07:49", - "idle": "1:15m", - "jcpu": "0.00s", - "pcpu": "0.00s", - "what": "-bash" - }, - { - "user": "root", - "tty": "ttyS0", - "from": null, - "login_at": "06:24", - "idle": "0.00s", - "jcpu": "0.43s", - "pcpu": "0.00s", - "what": "w" - }, - { - "user": "root", - "tty": "pts/0", - "from": "192.168.71.1", - "login_at": "06:29", - "idle": "2:35m", - "jcpu": "0.00s", - "pcpu": "0.00s", - "what": "-bash" - } - ] + + $ w | jc --w -p + [ + { +- `"user"` - "root", +- `"tty"` - "tty1", +- `"from"` - null, +- `"login_at"` - "07:49", +- `"idle"` - "1:15m", +- `"jcpu"` - "0.00s", +- `"pcpu"` - "0.00s", +- `"what"` - "-bash" + }, + { +- `"user"` - "root", +- `"tty"` - "ttyS0", +- `"from"` - null, +- `"login_at"` - "06:24", +- `"idle"` - "0.00s", +- `"jcpu"` - "0.43s", +- `"pcpu"` - "0.00s", +- `"what"` - "w" + }, + { +- `"user"` - "root", +- `"tty"` - "pts/0", +- `"from"` - "192.168.71.1", +- `"login_at"` - "06:29", +- `"idle"` - "2:35m", +- `"jcpu"` - "0.00s", +- `"pcpu"` - "0.00s", +- `"what"` - "-bash" + } + ] + + $ w | jc --w -p -r + [ + { +- `"user"` - "kbrazil", +- `"tty"` - "tty1", +- `"from"` - "-", +- `"login_at"` - "07:49", +- `"idle"` - "1:16m", +- `"jcpu"` - "0.00s", +- `"pcpu"` - "0.00s", +- `"what"` - "-bash" + }, + { +- `"user"` - "kbrazil", +- `"tty"` - "ttyS0", +- `"from"` - "-", +- `"login_at"` - "06:24", +- `"idle"` - "2.00s", +- `"jcpu"` - "0.46s", +- `"pcpu"` - "0.00s", +- `"what"` - "w" + }, + { +- `"user"` - "kbrazil", +- `"tty"` - "pts/0", +- `"from"` - "192.168.71.1", +- `"login_at"` - "06:29", +- `"idle"` - "2:36m", +- `"jcpu"` - "0.00s", +- `"pcpu"` - "0.00s", +- `"what"` - "-bash" + } + ] - $ w | jc --w -p -r - [ - { - "user": "kbrazil", - "tty": "tty1", - "from": "-", - "login_at": "07:49", - "idle": "1:16m", - "jcpu": "0.00s", - "pcpu": "0.00s", - "what": "-bash" - }, - { - "user": "kbrazil", - "tty": "ttyS0", - "from": "-", - "login_at": "06:24", - "idle": "2.00s", - "jcpu": "0.46s", - "pcpu": "0.00s", - "what": "w" - }, - { - "user": "kbrazil", - "tty": "pts/0", - "from": "192.168.71.1", - "login_at": "06:29", - "idle": "2:36m", - "jcpu": "0.00s", - "pcpu": "0.00s", - "what": "-bash" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/wc.md b/docs/parsers/wc.md index b7251bb5..5d1967e0 100644 --- a/docs/parsers/wc.md +++ b/docs/parsers/wc.md @@ -1,85 +1,97 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.wc + jc - JSON CLI output utility `wc` command output parser Usage (cli): - $ wc file.txt | jc --wc +$ wc file.txt | jc --wc - or +or - $ jc wc file.txt +$ jc wc file.txt Usage (module): - import jc - result = jc.parse('wc', wc_command_output) +import jc +result = jc.parse('wc', wc_command_output) - or +or - import jc.parsers.wc - result = jc.parsers.wc.parse(wc_command_output) +import jc.parsers.wc +result = jc.parsers.wc.parse(wc_command_output) Schema: - [ - { - "filename": string, - "lines": integer, - "words": integer, - "characters": integer - } - ] +[ +{ +"filename": string, +"lines": integer, +"words": integer, +"characters": integer +} +] -Examples: +**Examples**: - $ wc * | jc --wc -p - [ - { - "filename": "airport-I.json", - "lines": 1, - "words": 30, - "characters": 307 - }, - { - "filename": "airport-I.out", - "lines": 15, - "words": 33, - "characters": 348 - }, - { - "filename": "airport-s.json", - "lines": 1, - "words": 202, - "characters": 2152 - }, - ... - ] + + $ wc * | jc --wc -p + [ + { +- `"filename"` - "airport-I.json", +- `"lines"` - 1, +- `"words"` - 30, +- `"characters"` - 307 + }, + { +- `"filename"` - "airport-I.out", +- `"lines"` - 15, +- `"words"` - 33, +- `"characters"` - 348 + }, + { +- `"filename"` - "airport-s.json", +- `"lines"` - 1, +- `"words"` - 202, +- `"characters"` - 2152 + }, + ... + ] + + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/who.md b/docs/parsers/who.md index b8b6e211..1c3b8e85 100644 --- a/docs/parsers/who.md +++ b/docs/parsers/who.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.who + jc - JSON CLI output utility `who` command output parser Accepts any of the following who options (or no options): `-aTH` @@ -10,157 +12,167 @@ time of the system the parser is run on) Usage (cli): - $ who | jc --who +$ who | jc --who - or +or - $ jc who +$ jc who Usage (module): - import jc - result = jc.parse('who', who_command_output) +import jc +result = jc.parse('who', who_command_output) - or +or - import jc.parsers.who - result = jc.parsers.who.parse(who_command_output) +import jc.parsers.who +result = jc.parsers.who.parse(who_command_output) Schema: - [ - { - "user": string, - "event": string, - "writeable_tty": string, - "tty": string, - "time": string, - "epoch": integer, # [0] - "idle": string, - "pid": integer, - "from": string, - "comment": string - } - ] +[ +{ +"user": string, +"event": string, +"writeable_tty": string, +"tty": string, +"time": string, +"epoch": integer, # [0] +"idle": string, +"pid": integer, +"from": string, +"comment": string +} +] - [0] naive timestamp. null if time cannot be converted +[0] naive timestamp. null if time cannot be converted -Examples: +**Examples**: - $ who -a | jc --who -p - [ - { - "event": "reboot", - "time": "Feb 7 23:31", - "pid": 1, - "epoch": null - }, - { - "user": "joeuser", - "writeable_tty": "-", - "tty": "console", - "time": "Feb 7 23:32", - "idle": "old", - "pid": 105, - "epoch": null - }, - { - "user": "joeuser", - "writeable_tty": "+", - "tty": "ttys000", - "time": "Feb 13 16:44", - "idle": ".", - "pid": 51217, - "comment": "term=0 exit=0", - "epoch": null - }, - { - "user": "joeuser", - "writeable_tty": "?", - "tty": "ttys003", - "time": "Feb 28 08:59", - "idle": "01:36", - "pid": 41402, - "epoch": null - }, - { - "user": "joeuser", - "writeable_tty": "+", - "tty": "ttys004", - "time": "Mar 1 16:35", - "idle": ".", - "pid": 15679, - "from": "192.168.1.5", - "epoch": null - } - ] + + $ who -a | jc --who -p + [ + { +- `"event"` - "reboot", +- `"time"` - "Feb 7 23:31", +- `"pid"` - 1, +- `"epoch"` - null + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "-", +- `"tty"` - "console", +- `"time"` - "Feb 7 23:32", +- `"idle"` - "old", +- `"pid"` - 105, +- `"epoch"` - null + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "+", +- `"tty"` - "ttys000", +- `"time"` - "Feb 13 16:44", +- `"idle"` - ".", +- `"pid"` - 51217, +- `"comment"` - "term=0 exit=0", +- `"epoch"` - null + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "?", +- `"tty"` - "ttys003", +- `"time"` - "Feb 28 08:59", +- `"idle"` - "01:36", +- `"pid"` - 41402, +- `"epoch"` - null + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "+", +- `"tty"` - "ttys004", +- `"time"` - "Mar 1 16:35", +- `"idle"` - ".", +- `"pid"` - 15679, +- `"from"` - "192.168.1.5", +- `"epoch"` - null + } + ] + + $ who -a | jc --who -p -r + [ + { +- `"event"` - "reboot", +- `"time"` - "Feb 7 23:31", +- `"pid"` - "1" + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "-", +- `"tty"` - "console", +- `"time"` - "Feb 7 23:32", +- `"idle"` - "old", +- `"pid"` - "105" + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "+", +- `"tty"` - "ttys000", +- `"time"` - "Feb 13 16:44", +- `"idle"` - ".", +- `"pid"` - "51217", +- `"comment"` - "term=0 exit=0" + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "?", +- `"tty"` - "ttys003", +- `"time"` - "Feb 28 08:59", +- `"idle"` - "01:36", +- `"pid"` - "41402" + }, + { +- `"user"` - "joeuser", +- `"writeable_tty"` - "+", +- `"tty"` - "ttys004", +- `"time"` - "Mar 1 16:35", +- `"idle"` - ".", +- `"pid"` - "15679", +- `"from"` - "192.168.1.5" + } + ] - $ who -a | jc --who -p -r - [ - { - "event": "reboot", - "time": "Feb 7 23:31", - "pid": "1" - }, - { - "user": "joeuser", - "writeable_tty": "-", - "tty": "console", - "time": "Feb 7 23:32", - "idle": "old", - "pid": "105" - }, - { - "user": "joeuser", - "writeable_tty": "+", - "tty": "ttys000", - "time": "Feb 13 16:44", - "idle": ".", - "pid": "51217", - "comment": "term=0 exit=0" - }, - { - "user": "joeuser", - "writeable_tty": "?", - "tty": "ttys003", - "time": "Feb 28 08:59", - "idle": "01:36", - "pid": "41402" - }, - { - "user": "joeuser", - "writeable_tty": "+", - "tty": "ttys004", - "time": "Mar 1 16:35", - "idle": ".", - "pid": "15679", - "from": "192.168.1.5" - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd diff --git a/docs/parsers/xml.md b/docs/parsers/xml.md index 55f14bfa..03a87369 100644 --- a/docs/parsers/xml.md +++ b/docs/parsers/xml.md @@ -1,101 +1,113 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.xml + jc - JSON CLI output utility `XML` file parser Usage (cli): - $ cat foo.xml | jc --xml +$ cat foo.xml | jc --xml Usage (module): - import jc - result = jc.parse('xml', xml_file_output) +import jc +result = jc.parse('xml', xml_file_output) - or +or - import jc.parsers.xml - result = jc.parsers.xml.parse(xml_file_output) +import jc.parsers.xml +result = jc.parsers.xml.parse(xml_file_output) Schema: - XML Document converted to a Dictionary - See https://github.com/martinblech/xmltodict for details +XML Document converted to a Dictionary +See https://github.com/martinblech/xmltodict for details - { - "key1": string/object, - "key2": string/object - } +{ +"key1": string/object, +"key2": string/object +} -Examples: +**Examples**: - $ cat cd_catalog.xml - - - - Empire Burlesque - Bob Dylan - USA - Columbia - 10.90 - 1985 - - - Hide your heart - Bonnie Tyler - UK - CBS Records - 9.90 - 1988 - - ... + + $ cat cd_catalog.xml + + + + Empire Burlesque + Bob Dylan + USA + Columbia + 10.90 + 1985 + + + Hide your heart + Bonnie Tyler + UK + CBS Records + 9.90 + 1988 + + ... + + $ cat cd_catalog.xml | jc --xml -p + { +- `"CATALOG"` - { +- `"CD"` - [ + { +- `"TITLE"` - "Empire Burlesque", +- `"ARTIST"` - "Bob Dylan", +- `"COUNTRY"` - "USA", +- `"COMPANY"` - "Columbia", +- `"PRICE"` - "10.90", +- `"YEAR"` - "1985" + }, + { +- `"TITLE"` - "Hide your heart", +- `"ARTIST"` - "Bonnie Tyler", +- `"COUNTRY"` - "UK", +- `"COMPANY"` - "CBS Records", +- `"PRICE"` - "9.90", +- `"YEAR"` - "1988" + }, + ... + } - $ cat cd_catalog.xml | jc --xml -p - { - "CATALOG": { - "CD": [ - { - "TITLE": "Empire Burlesque", - "ARTIST": "Bob Dylan", - "COUNTRY": "USA", - "COMPANY": "Columbia", - "PRICE": "10.90", - "YEAR": "1985" - }, - { - "TITLE": "Hide your heart", - "ARTIST": "Bonnie Tyler", - "COUNTRY": "UK", - "COMPANY": "CBS Records", - "PRICE": "9.90", - "YEAR": "1988" - }, - ... - } + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - Dictionary. Raw or processed structured data. + + Dictionary. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/yaml.md b/docs/parsers/yaml.md index 9bb5fb20..683ebc66 100644 --- a/docs/parsers/yaml.md +++ b/docs/parsers/yaml.md @@ -1,115 +1,127 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.yaml + jc - JSON CLI output utility `YAML` file parser Usage (cli): - $ cat foo.yaml | jc --yaml +$ cat foo.yaml | jc --yaml Usage (module): - import jc - result = jc.parse('yaml', yaml_file_output) +import jc +result = jc.parse('yaml', yaml_file_output) - or +or - import jc.parsers.yaml - result = jc.parsers.yaml.parse(yaml_file_output) +import jc.parsers.yaml +result = jc.parsers.yaml.parse(yaml_file_output) Schema: - YAML Document converted to a Dictionary - See https://pypi.org/project/ruamel.yaml for details +YAML Document converted to a Dictionary +See https://pypi.org/project/ruamel.yaml for details - [ - { - "key1": string/int/float/boolean/null/array/object, - "key2": string/int/float/boolean/null/array/object - } - ] +[ +{ +"key1": string/int/float/boolean/null/array/object, +"key2": string/int/float/boolean/null/array/object +} +] -Examples: +**Examples**: - $ cat istio-mtls-permissive.yaml - apiVersion: "authentication.istio.io/v1alpha1" - kind: "Policy" - metadata: - name: "default" - namespace: "default" - spec: - peers: - - mtls: {} - --- - apiVersion: "networking.istio.io/v1alpha3" - kind: "DestinationRule" - metadata: - name: "default" - namespace: "default" - spec: - host: "*.default.svc.cluster.local" - trafficPolicy: - tls: - mode: ISTIO_MUTUAL + + $ cat istio-mtls-permissive.yaml +- `apiVersion` - "authentication.istio.io/v1alpha1" +- `kind` - "Policy" + metadata: +- `name` - "default" +- `namespace` - "default" + spec: + peers: + - mtls: {} + --- +- `apiVersion` - "networking.istio.io/v1alpha3" +- `kind` - "DestinationRule" + metadata: +- `name` - "default" +- `namespace` - "default" + spec: +- `host` - "*.default.svc.cluster.local" + trafficPolicy: + tls: +- `mode` - ISTIO_MUTUAL + + $ cat istio-mtls-permissive.yaml | jc --yaml -p + [ + { +- `"apiVersion"` - "authentication.istio.io/v1alpha1", +- `"kind"` - "Policy", +- `"metadata"` - { +- `"name"` - "default", +- `"namespace"` - "default" + }, +- `"spec"` - { +- `"peers"` - [ + { +- `"mtls"` - {} + } + ] + } + }, + { +- `"apiVersion"` - "networking.istio.io/v1alpha3", +- `"kind"` - "DestinationRule", +- `"metadata"` - { +- `"name"` - "default", +- `"namespace"` - "default" + }, +- `"spec"` - { +- `"host"` - "*.default.svc.cluster.local", +- `"trafficPolicy"` - { +- `"tls"` - { +- `"mode"` - "ISTIO_MUTUAL" + } + } + } + } + ] - $ cat istio-mtls-permissive.yaml | jc --yaml -p - [ - { - "apiVersion": "authentication.istio.io/v1alpha1", - "kind": "Policy", - "metadata": { - "name": "default", - "namespace": "default" - }, - "spec": { - "peers": [ - { - "mtls": {} - } - ] - } - }, - { - "apiVersion": "networking.istio.io/v1alpha3", - "kind": "DestinationRule", - "metadata": { - "name": "default", - "namespace": "default" - }, - "spec": { - "host": "*.default.svc.cluster.local", - "trafficPolicy": { - "tls": { - "mode": "ISTIO_MUTUAL" - } - } - } - } - ] + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries representing the YAML documents. + + List of Dictionaries representing the YAML documents. ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd diff --git a/docs/parsers/zipinfo.md b/docs/parsers/zipinfo.md index 1637a83b..db1508de 100644 --- a/docs/parsers/zipinfo.md +++ b/docs/parsers/zipinfo.md @@ -1,6 +1,8 @@ [Home](https://kellyjonbrazil.github.io/jc/) + # jc.parsers.zipinfo + jc - JSON CLI output utility `zipinfo` command output parser Options supported: @@ -10,101 +12,111 @@ Note: The default listing format. Usage (cli): - $ zipinfo | jc --zipinfo +$ zipinfo | jc --zipinfo - or +or - $ jc zipinfo +$ jc zipinfo Usage (module): - import jc - result = jc.parse('zipinfo', zipinfo_command_output) +import jc +result = jc.parse('zipinfo', zipinfo_command_output) - or +or - import jc.parsers.zipinfo - result = jc.parsers.zipinfo.parse(zipinfo_command_output) +import jc.parsers.zipinfo +result = jc.parsers.zipinfo.parse(zipinfo_command_output) Schema: - [ - { - "archive": string, - "size": integer, - "size_unit": string, - "number_entries": integer, - "number_files": integer, - "bytes_uncompressed": integer, - "bytes_compressed": integer, - "percent_compressed": float, - "files": [ - { - "flags": string, - "zipversion": string, - "zipunder": string - "filesize": integer, - "type": string, - "method": string, - "date": string, - "time": string, - "filename": string - } - ] - } - ] +[ +{ +"archive": string, +"size": integer, +"size_unit": string, +"number_entries": integer, +"number_files": integer, +"bytes_uncompressed": integer, +"bytes_compressed": integer, +"percent_compressed": float, +"files": [ +{ +"flags": string, +"zipversion": string, +"zipunder": string +"filesize": integer, +"type": string, +"method": string, +"date": string, +"time": string, +"filename": string +} +] +} +] -Examples: +**Examples**: - $ zipinfo log4j-core-2.16.0.jar | jc --zipinfo -p + + $ zipinfo log4j-core-2.16.0.jar | jc --zipinfo -p + + [ + { +- `"archive"` - "log4j-core-2.16.0.jar", +- `"size"` - 1789565, +- `"size_unit"` - "bytes", +- `"number_entries"` - 1218, +- `"number_files"` - 1218, +- `"bytes_uncompressed"` - 3974141, +- `"bytes_compressed"` - 1515455, +- `"percent_compressed"` - 61.9, +- `"files"` - [ + { +- `"flags"` - "-rw-r--r--", +- `"zipversion"` - "2.0", +- `"zipunder"` - "unx", +- `"filesize"` - 19810, +- `"type"` - "bl", +- `"method"` - "defN", +- `"date"` - "21-Dec-12", +- `"time"` - "23:35", +- `"filename"` - "META-INF/MANIFEST.MF" + }, + ... - [ - { - "archive": "log4j-core-2.16.0.jar", - "size": 1789565, - "size_unit": "bytes", - "number_entries": 1218, - "number_files": 1218, - "bytes_uncompressed": 3974141, - "bytes_compressed": 1515455, - "percent_compressed": 61.9, - "files": [ - { - "flags": "-rw-r--r--", - "zipversion": "2.0", - "zipunder": "unx", - "filesize": 19810, - "type": "bl", - "method": "defN", - "date": "21-Dec-12", - "time": "23:35", - "filename": "META-INF/MANIFEST.MF" - }, - ... + +## info Objects -## info ```python -info() +class info() ``` + Provides parser metadata (version, author, etc.) -## parse + + +#### parse + ```python -parse(data, raw=False, quiet=False) +def parse(data, raw=False, quiet=False) ``` Main text parsing function -Parameters: +**Arguments**: - data: (string) text data to parse - raw: (boolean) unprocessed output if True - quiet: (boolean) suppress warning messages if True + +- `data` - (string) text data to parse +- `raw` - (boolean) unprocessed output if True +- `quiet` - (boolean) suppress warning messages if True + -Returns: +**Returns**: - List of Dictionaries. Raw or processed structured data. + + List of Dictionaries. Raw or processed structured data. ## Parser Information Compatibility: linux, darwin diff --git a/docs/readme.md b/docs/readme.md index 2d2f1a79..aab68671 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,5 +1,7 @@ + # jc + JC - JSON CLI output utility * kellyjonbrazil@gmail.com diff --git a/docs/utils.md b/docs/utils.md index f79b5af2..c7a8bf92 100644 --- a/docs/utils.md +++ b/docs/utils.md @@ -1,194 +1,255 @@ + + +# jc.utils -# utils jc - JSON CLI output utility utils -## warning_message + + +#### warning\_message + ```python -warning_message(message_lines) +def warning_message(message_lines) ``` Prints warning message for non-fatal issues. The first line is prepended with 'jc: Warning - ' and subsequent lines are indented. Wraps text as needed based on the terminal width. -Parameters: +**Arguments**: - message: (list) list of string lines + +- `message` - (list) list of string lines + -Returns: +**Returns**: - None - just prints output to STDERR + + None - just prints output to STDERR + + +#### error\_message -## error_message ```python -error_message(message_lines) +def error_message(message_lines) ``` Prints an error message for fatal issues. The first line is prepended with 'jc: Error - ' and subsequent lines are indented. Wraps text as needed based on the terminal width. -Parameters: +**Arguments**: - message: (list) list of string lines + +- `message` - (list) list of string lines + -Returns: +**Returns**: - None - just prints output to STDERR + + None - just prints output to STDERR + + +#### compatibility -## compatibility ```python -compatibility(mod_name, compatible, quiet=False) +def compatibility(mod_name, compatible, quiet=False) ``` Checks for the parser's compatibility with the running OS platform. -Parameters: +**Arguments**: - mod_name: (string) __name__ of the calling module + +- `mod_name` - (string) __name__ of the calling module + +- `compatible` - (list) sys.platform name(s) compatible with + the parser. compatible options: + linux, darwin, cygwin, win32, aix, freebsd + +- `quiet` - (bool) supress compatibility message if True + - compatible: (list) sys.platform name(s) compatible with - the parser. compatible options: - linux, darwin, cygwin, win32, aix, freebsd +**Returns**: - quiet: (bool) supress compatibility message if True + + None - just prints output to STDERR -Returns: + - None - just prints output to STDERR +#### has\_data - -## has_data ```python -has_data(data) +def has_data(data) ``` Checks if the input contains data. If there are any non-whitespace characters then return True, else return False. -Parameters: +**Arguments**: - data: (string) input to check whether it contains data + +- `data` - (string) input to check whether it contains data + -Returns: +**Returns**: - Boolean True if input string (data) contains non-whitespace - characters, otherwise False + + Boolean True if input string (data) contains non-whitespace + characters, otherwise False + + +#### convert\_to\_int -## convert_to_int ```python -convert_to_int(value) +def convert_to_int(value) ``` Converts string and float input to int. Strips all non-numeric characters from strings. -Parameters: +**Arguments**: - value: (string/integer/float) Input value + +- `value` - (string/integer/float) Input value + -Returns: +**Returns**: - integer/None Integer if successful conversion, otherwise None + + integer/None Integer if successful conversion, otherwise None + + +#### convert\_to\_float -## convert_to_float ```python -convert_to_float(value) +def convert_to_float(value) ``` Converts string and int input to float. Strips all non-numeric characters from strings. -Parameters: +**Arguments**: - value: (string) Input value + +- `value` - (string) Input value + -Returns: +**Returns**: - float/None Float if successful conversion, otherwise None + + float/None Float if successful conversion, otherwise None + + +#### convert\_to\_bool -## convert_to_bool ```python -convert_to_bool(value) +def convert_to_bool(value) ``` Converts string, integer, or float input to boolean by checking for 'truthy' values. -Parameters: +**Arguments**: - value: (string/integer/float) Input value + +- `value` - (string/integer/float) Input value + -Returns: +**Returns**: - True/False False unless a 'truthy' number or string is found - ('y', 'yes', 'true', '1', 1, -1, etc.) + + True/False False unless a 'truthy' number or string is found + ('y', 'yes', 'true', '1', 1, -1, etc.) + + +#### stream\_success -## stream_success ```python -stream_success(output_line, ignore_exceptions) +def stream_success(output_line, ignore_exceptions) ``` + Add `_jc_meta` object to output line if `ignore_exceptions=True` -## stream_error + + +#### stream\_error + ```python -stream_error(e, ignore_exceptions, line) +def stream_error(e, ignore_exceptions, line) ``` Reraise the stream exception with annotation or print an error `_jc_meta` field if `ignore_exceptions=True`. + + +#### input\_type\_check -## input_type_check ```python -input_type_check(data) +def input_type_check(data) ``` + Ensure input data is a string -## streaming_input_type_check + + +#### streaming\_input\_type\_check + ```python -streaming_input_type_check(data) +def streaming_input_type_check(data) ``` + Ensure input data is an iterable, but not a string or bytes -## streaming_line_input_type_check + + +#### streaming\_line\_input\_type\_check + ```python -streaming_line_input_type_check(line) +def streaming_line_input_type_check(line) ``` + Ensure each line is a string -## timestamp + + +## timestamp Objects + ```python -timestamp(datetime_string) +class timestamp() ``` Input a date-time text string of several formats and convert to a naive or timezone-aware epoch timestamp in UTC. -Parameters: +**Arguments**: - datetime_string: (str) a string representation of a - date-time in several supported formats + +- `datetime_string` - (str) a string representation of a + date-time in several supported formats + -Attributes: +**Attributes**: - string (str) the input datetime string - - format (int) the format rule that was used to - decode the datetime string. None if - conversion fails - - naive (int) timestamp based on locally configured - timezone. None if conversion fails - - utc (int) aware timestamp only if UTC timezone - detected in datetime string. None if - conversion fails + + string (str) the input datetime string + + format (int) the format rule that was used to + decode the datetime string. None if + conversion fails + + naive (int) timestamp based on locally configured + timezone. None if conversion fails + + utc (int) aware timestamp only if UTC timezone + detected in datetime string. None if + conversion fails diff --git a/jc/cli.py b/jc/cli.py index ea82b0f4..452b2f83 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -521,6 +521,7 @@ def main(): utils.error_message([f'Parser issue with {parser_name}:', f'{e.__class__.__name__}: {e}', + 'Please ensure the locale is set to C (LANG=C) and you used the correct parser.', 'For details use the -d or -dd option. Use "jc -h" for help.']) sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT)) @@ -541,8 +542,9 @@ def main(): streaming_msg = 'Use the -qq option to ignore streaming parser errors.' utils.error_message([ - f'{parser_name} parser could not parse the input data. Did you use the correct parser?', + f'{parser_name} parser could not parse the input data.', f'{streaming_msg}', + 'Please ensure the locale is set to C (LANG=C) and you used the correct parser.', 'For details use the -d or -dd option. Use "jc -h" for help.' ]) sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT)) diff --git a/man/jc.1 b/man/jc.1 index c2b3b944..be00471e 100644 --- a/man/jc.1 +++ b/man/jc.1 @@ -1,4 +1,4 @@ -.TH jc 1 2022-01-23 1.18.1 "JSON CLI output utility" +.TH jc 1 2022-01-25 1.18.2 "JSON CLI output utility" .SH NAME jc \- JSONifies the output of many CLI tools and file-types .SH SYNOPSIS @@ -442,6 +442,16 @@ YAML file parser \fB--zipinfo\fP `zipinfo` command parser +.TP +.B +\fB--testing-two\fP +test parser 2 + +.TP +.B +\fB--testing\fP +test parser + .RE .PP