mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-19 00:17:51 +02:00
@ -1,11 +1,18 @@
|
|||||||
jc changelog
|
jc changelog
|
||||||
|
|
||||||
|
20210413 v1.15.1
|
||||||
|
- New feature to show parser documentation interactively with -h --parser_name
|
||||||
|
for example: $ jc -h --arp
|
||||||
|
- Add man page to pypi package for easier packaging in homebrew
|
||||||
|
- Update rpm-qi parser to add two calculated timestamp fields: install_date_epoch and install_date_epoch_utc
|
||||||
|
- Clean up documentation and autogenerate the Parser Information section from metadata
|
||||||
|
|
||||||
20210407 v1.15.0
|
20210407 v1.15.0
|
||||||
- Add acpi command parser tested on linux
|
- Add acpi command parser tested on linux
|
||||||
- Add upower command parser tested on linux
|
- Add upower command parser tested on linux
|
||||||
- Add /usr/bin/time command parser tested on linux and macOS
|
- Add /usr/bin/time command parser tested on linux and macOS
|
||||||
- Add dpkg -l command parser tested on linux
|
- Add dpkg -l command parser tested on linux
|
||||||
- Add rpm -qai command parser tested on linux
|
- Add rpm -qi command parser tested on linux
|
||||||
- Add finger command parser tested on linux and macOS
|
- Add finger command parser tested on linux and macOS
|
||||||
- Add dir command parser tested on Windows 10
|
- Add dir command parser tested on Windows 10
|
||||||
- Update date parser: complete rewrite (v2.0) providing many enhancements:
|
- Update date parser: complete rewrite (v2.0) providing many enhancements:
|
||||||
|
12
EXAMPLES.md
12
EXAMPLES.md
@ -2503,9 +2503,11 @@ rpm_qia | jc --rpm_qi -p # or: jc -p rpm -qia
|
|||||||
"vendor": "CentOS",
|
"vendor": "CentOS",
|
||||||
"url": "http://www.gnu.org/software/make/",
|
"url": "http://www.gnu.org/software/make/",
|
||||||
"summary": "A GNU tool which simplifies the build process for users",
|
"summary": "A GNU tool which simplifies the build process for users",
|
||||||
"description": "A GNU tool for controlling the generation of executables and other non-source...",
|
"description": "A GNU tool for controlling the generation of executables and other...",
|
||||||
"build_epoch": 1565311645,
|
"build_epoch": 1565311645,
|
||||||
"build_epoch_utc": null
|
"build_epoch_utc": null,
|
||||||
|
"install_date_epoch": 1571242902,
|
||||||
|
"install_date_epoch_utc": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "kbd-legacy",
|
"name": "kbd-legacy",
|
||||||
@ -2525,9 +2527,11 @@ rpm_qia | jc --rpm_qi -p # or: jc -p rpm -qia
|
|||||||
"vendor": "CentOS",
|
"vendor": "CentOS",
|
||||||
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
|
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
|
||||||
"summary": "Legacy data for kbd package",
|
"summary": "Legacy data for kbd package",
|
||||||
"description": "The kbd-legacy package contains original keymaps for kbd package. Please note...",
|
"description": "The kbd-legacy package contains original keymaps for kbd package...",
|
||||||
"build_epoch": 1540939200,
|
"build_epoch": 1540939200,
|
||||||
"build_epoch_utc": null
|
"build_epoch_utc": null,
|
||||||
|
"install_date_epoch": 1565891588,
|
||||||
|
"install_date_epoch_utc": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
1
MANIFEST.in
Normal file
1
MANIFEST.in
Normal file
@ -0,0 +1 @@
|
|||||||
|
include jc/man/jc.1.gz
|
@ -199,7 +199,7 @@ The JSON output can be compact (default) or pretty formatted with the `-p` optio
|
|||||||
### Options
|
### Options
|
||||||
- `-a` about `jc`. Prints information about `jc` and the parsers (in JSON, of course!)
|
- `-a` about `jc`. Prints information about `jc` and the parsers (in JSON, of course!)
|
||||||
- `-d` debug mode. Prints trace messages if parsing issues are encountered (use `-dd` for verbose debugging)
|
- `-d` debug mode. Prints trace messages if parsing issues are encountered (use `-dd` for verbose debugging)
|
||||||
- `-h` `jc` help
|
- `-h` `jc` help. Use `jc -h --parser_name` for parser documentation
|
||||||
- `-m` monochrome JSON output
|
- `-m` monochrome JSON output
|
||||||
- `-p` pretty format the JSON output
|
- `-p` pretty format the JSON output
|
||||||
- `-q` quiet mode. Suppresses parser warning messages
|
- `-q` quiet mode. Suppresses parser warning messages
|
||||||
|
27
docgen.sh
27
docgen.sh
@ -11,10 +11,27 @@ pydocmd simple utils+ > ../docs/utils.md
|
|||||||
# a bit of inception here... jc is being used to help
|
# a bit of inception here... jc is being used to help
|
||||||
# automate the generation of its own documentation. :)
|
# automate the generation of its own documentation. :)
|
||||||
|
|
||||||
parsers=$(jc -a | jq -r .parsers[].name)
|
# pull jc parser objects into a bash array from jq
|
||||||
|
parsers=()
|
||||||
for parser in $parsers
|
while read -r value
|
||||||
do
|
do
|
||||||
echo Building docs for: $parser
|
parsers+=("$value")
|
||||||
pydocmd simple jc.parsers.${parser}+ > ../docs/parsers/${parser}.md
|
done < <(jc -a | jq -c '.parsers[]')
|
||||||
|
|
||||||
|
# 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
|
done
|
||||||
|
@ -18,6 +18,22 @@ Usage (module):
|
|||||||
import jc.parsers.airport_s
|
import jc.parsers.airport_s
|
||||||
result = jc.parsers.airport_s.parse(airport_s_command_output)
|
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,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
$ airport -s | jc --airport-s -p
|
$ airport -s | jc --airport-s -p
|
||||||
@ -95,36 +111,7 @@ Examples:
|
|||||||
```python
|
```python
|
||||||
info()
|
info()
|
||||||
```
|
```
|
||||||
|
Provides parser metadata (version, author, etc.)
|
||||||
|
|
||||||
## process
|
|
||||||
```python
|
|
||||||
process(proc_data)
|
|
||||||
```
|
|
||||||
|
|
||||||
Final processing to conform to the schema.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
|
|
||||||
proc_data: (List of Dictionaries) raw structured data to process
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"ssid": string,
|
|
||||||
"bssid": string,
|
|
||||||
"rssi": integer,
|
|
||||||
"channel": string,
|
|
||||||
"ht": boolean,
|
|
||||||
"cc": string,
|
|
||||||
"security": [
|
|
||||||
string,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
## parse
|
## parse
|
||||||
```python
|
```python
|
||||||
@ -146,4 +133,4 @@ Returns:
|
|||||||
## Parser Information
|
## Parser Information
|
||||||
Compatibility: darwin
|
Compatibility: darwin
|
||||||
|
|
||||||
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
||||||
|
@ -5,9 +5,9 @@ jc - JSON CLI output utility `rpm -qi` command output parser
|
|||||||
|
|
||||||
Works with `rpm -qi [package]` or `rpm -qia`.
|
Works with `rpm -qi [package]` or `rpm -qia`.
|
||||||
|
|
||||||
The `build_epoch` calculated timestamp field is naive (i.e. based on the local time of the system the parser is run on)
|
The `..._epoch` calculated timestamp fields are naive (i.e. based on the local time of the system the parser is run on)
|
||||||
|
|
||||||
The `build_epoch_utc` calculated timestamp field is timezone-aware and is only available if the timezone field is UTC.
|
The `..._epoch_utc` calculated timestamp fields are timezone-aware and is only available if the timezone field is UTC.
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
@ -26,27 +26,29 @@ Schema:
|
|||||||
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": string,
|
"name": string,
|
||||||
"epoch": integer,
|
"epoch": integer,
|
||||||
"version": string,
|
"version": string,
|
||||||
"release": string,
|
"release": string,
|
||||||
"architecture": string,
|
"architecture": string,
|
||||||
"install_date": string,
|
"install_date": string,
|
||||||
"group": string,
|
"install_date_epoch": integer, # naive timestamp
|
||||||
"size": integer,
|
"install_date_epoch_utc": integer, # Aware timestamp if timezone is UTC
|
||||||
"license": string,
|
"group": string,
|
||||||
"signature": string,
|
"size": integer,
|
||||||
"source_rpm": string,
|
"license": string,
|
||||||
"build_date": string,
|
"signature": string,
|
||||||
"build_epoch": integer, # naive timestamp
|
"source_rpm": string,
|
||||||
"build_epoch_utc": integer, # Aware timestamp if timezone is UTC
|
"build_date": string,
|
||||||
"build_host": string,
|
"build_epoch": integer, # naive timestamp
|
||||||
"relocations": string,
|
"build_epoch_utc": integer, # Aware timestamp if timezone is UTC
|
||||||
"packager": string,
|
"build_host": string,
|
||||||
"vendor": string,
|
"relocations": string,
|
||||||
"url": string,
|
"packager": string,
|
||||||
"summary": string,
|
"vendor": string,
|
||||||
"description": string
|
"url": string,
|
||||||
|
"summary": string,
|
||||||
|
"description": string
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -73,9 +75,11 @@ Examples:
|
|||||||
"vendor": "CentOS",
|
"vendor": "CentOS",
|
||||||
"url": "http://www.gnu.org/software/make/",
|
"url": "http://www.gnu.org/software/make/",
|
||||||
"summary": "A GNU tool which simplifies the build process for users",
|
"summary": "A GNU tool which simplifies the build process for users",
|
||||||
"description": "A GNU tool for controlling the generation of executables and other non-source...",
|
"description": "A GNU tool for controlling the generation of executables and other...",
|
||||||
"build_epoch": 1565311645,
|
"build_epoch": 1565311645,
|
||||||
"build_epoch_utc": null
|
"build_epoch_utc": null,
|
||||||
|
"install_date_epoch": 1571242902,
|
||||||
|
"install_date_epoch_utc": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "kbd-legacy",
|
"name": "kbd-legacy",
|
||||||
@ -95,9 +99,11 @@ Examples:
|
|||||||
"vendor": "CentOS",
|
"vendor": "CentOS",
|
||||||
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
|
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
|
||||||
"summary": "Legacy data for kbd package",
|
"summary": "Legacy data for kbd package",
|
||||||
"description": "The kbd-legacy package contains original keymaps for kbd package. Please note...",
|
"description": "The kbd-legacy package contains original keymaps for kbd package...",
|
||||||
"build_epoch": 1540939200,
|
"build_epoch": 1540939200,
|
||||||
"build_epoch_utc": null
|
"build_epoch_utc": null,
|
||||||
|
"install_date_epoch": 1565891588,
|
||||||
|
"install_date_epoch_utc": null
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
@ -175,4 +181,4 @@ Returns:
|
|||||||
## Parser Information
|
## Parser Information
|
||||||
Compatibility: linux
|
Compatibility: linux
|
||||||
|
|
||||||
Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# jc.parsers.timedatectl
|
# jc.parsers.timedatectl
|
||||||
jc - JSON CLI output utility `timedatectl` command output parser
|
jc - JSON CLI output utility `timedatectl` command output parser
|
||||||
|
|
||||||
The `epoch_utc` calculated timestamp field is timezone-aware and is only available if the universal_time field is available.
|
The `epoch_utc` calculated timestamp field is timezone-aware and is only available if the `universal_time` field is available.
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ JC - JSON CLI output utility
|
|||||||
|
|
||||||
This package serializes the output of many standard unix command line tools to JSON format.
|
This package serializes the output of many standard unix command line tools to JSON format.
|
||||||
|
|
||||||
For documentation on each parser, see [docs/parsers](https://github.com/kellyjonbrazil/jc/tree/master/docs/parsers).
|
For documentation on each parser, see the [documentation site](https://kellyjonbrazil.github.io/jc/).
|
||||||
|
|
||||||
CLI Example:
|
CLI Example:
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
This package serializes the output of many standard unix command line tools to JSON format.
|
This package serializes the output of many standard unix command line tools to JSON format.
|
||||||
|
|
||||||
For documentation on each parser, see [docs/parsers](https://github.com/kellyjonbrazil/jc/tree/master/docs/parsers).
|
For documentation on each parser, see the [documentation site](https://kellyjonbrazil.github.io/jc/).
|
||||||
|
|
||||||
CLI Example:
|
CLI Example:
|
||||||
|
|
||||||
@ -69,4 +69,4 @@ Module Example:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
name = 'jc'
|
name = 'jc'
|
||||||
__version__ = '1.15.0'
|
__version__ = '1.15.1'
|
||||||
|
37
jc/cli.py
37
jc/cli.py
@ -320,7 +320,7 @@ def helptext():
|
|||||||
Options:
|
Options:
|
||||||
-a about jc
|
-a about jc
|
||||||
-d debug - show traceback (-dd for verbose traceback)
|
-d debug - show traceback (-dd for verbose traceback)
|
||||||
-h help
|
-h help (use -h --parser_name for parser documentation)
|
||||||
-m monochrome output
|
-m monochrome output
|
||||||
-p pretty print output
|
-p pretty print output
|
||||||
-q quiet - suppress parser warnings
|
-q quiet - suppress parser warnings
|
||||||
@ -333,9 +333,34 @@ def helptext():
|
|||||||
or using the magic syntax:
|
or using the magic syntax:
|
||||||
|
|
||||||
jc -p ls -al
|
jc -p ls -al
|
||||||
|
|
||||||
|
For parser documentation:
|
||||||
|
|
||||||
|
jc -h --ls
|
||||||
'''
|
'''
|
||||||
return textwrap.dedent(helptext_string)
|
return textwrap.dedent(helptext_string)
|
||||||
|
|
||||||
|
def help_doc(options):
|
||||||
|
"""
|
||||||
|
Returns the parser documentation if a parser is found in the arguments, otherwise
|
||||||
|
the general help text is returned.
|
||||||
|
"""
|
||||||
|
for arg in options:
|
||||||
|
parser_name = parser_shortname(arg)
|
||||||
|
|
||||||
|
if parser_name in parsers:
|
||||||
|
# load parser module just in time so we don't need to load all modules
|
||||||
|
parser = parser_module(arg)
|
||||||
|
compatible = ', '.join(parser.info.compatible)
|
||||||
|
doc_text = f'''{parser.__doc__}
|
||||||
|
Compatibility: {compatible}
|
||||||
|
|
||||||
|
Version {parser.info.version} by {parser.info.author} ({parser.info.author_email})
|
||||||
|
'''
|
||||||
|
|
||||||
|
return doc_text
|
||||||
|
|
||||||
|
return helptext()
|
||||||
|
|
||||||
def versiontext():
|
def versiontext():
|
||||||
"""Return the version text"""
|
"""Return the version text"""
|
||||||
@ -394,6 +419,10 @@ def generate_magic_command(args):
|
|||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
# if -h, -a, or -v found in options, then bail out
|
||||||
|
if 'h' in options or 'a' in options or 'v' in options:
|
||||||
|
return False, None
|
||||||
|
|
||||||
# all options popped and no command found - for case like 'jc -a'
|
# all options popped and no command found - for case like 'jc -a'
|
||||||
if len(args_given) == 0:
|
if len(args_given) == 0:
|
||||||
return False, None
|
return False, None
|
||||||
@ -447,11 +476,11 @@ def main():
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
jc_colors = os.getenv('JC_COLORS')
|
|
||||||
|
|
||||||
# try magic syntax first: e.g. jc -p ls -al
|
# try magic syntax first: e.g. jc -p ls -al
|
||||||
magic()
|
magic()
|
||||||
|
|
||||||
|
jc_colors = os.getenv('JC_COLORS')
|
||||||
|
|
||||||
options = []
|
options = []
|
||||||
|
|
||||||
# options
|
# options
|
||||||
@ -477,7 +506,7 @@ def main():
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if help_me:
|
if help_me:
|
||||||
print(helptext())
|
print(help_doc(sys.argv))
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if version_info:
|
if version_info:
|
||||||
|
BIN
jc/man/jc.1.gz
Normal file
BIN
jc/man/jc.1.gz
Normal file
Binary file not shown.
@ -13,9 +13,44 @@ Usage (module):
|
|||||||
import jc.parsers.acpi
|
import jc.parsers.acpi
|
||||||
result = jc.parsers.acpi.parse(acpi_command_output)
|
result = jc.parsers.acpi.parse(acpi_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -191,7 +226,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`acpi` command parser'
|
description = '`acpi` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -204,7 +240,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -214,44 +250,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
int_list = ['id', 'charge_percent', 'design_capacity_mah', 'last_full_capacity', 'last_full_capacity_percent']
|
int_list = ['id', 'charge_percent', 'design_capacity_mah', 'last_full_capacity', 'last_full_capacity_percent']
|
||||||
float_list = ['temperature']
|
float_list = ['temperature']
|
||||||
@ -406,4 +405,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,25 @@ Usage (module):
|
|||||||
import jc.parsers.airport
|
import jc.parsers.airport
|
||||||
result = jc.parsers.airport.parse(airport_command_output)
|
result = jc.parsers.airport.parse(airport_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'darwin'
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -63,7 +79,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`airport -I` command parser'
|
description = '`airport -I` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -77,7 +94,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -87,25 +104,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
# integer changes
|
# integer changes
|
||||||
int_list = ['agrctlrssi', 'agrextrssi', 'agrctlnoise', 'agrextnoise',
|
int_list = ['agrctlrssi', 'agrextrssi', 'agrctlnoise', 'agrextnoise',
|
||||||
@ -148,4 +147,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,21 @@ Usage (module):
|
|||||||
import jc.parsers.airport_s
|
import jc.parsers.airport_s
|
||||||
result = jc.parsers.airport_s.parse(airport_s_command_output)
|
result = jc.parsers.airport_s.parse(airport_s_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'darwin'
|
[
|
||||||
|
{
|
||||||
|
"ssid": string,
|
||||||
|
"bssid": string,
|
||||||
|
"rssi": integer,
|
||||||
|
"channel": string,
|
||||||
|
"ht": boolean,
|
||||||
|
"cc": string,
|
||||||
|
"security": [
|
||||||
|
string,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -96,7 +108,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`airport -s` command parser'
|
description = '`airport -s` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -110,7 +123,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -120,20 +133,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
[
|
|
||||||
{
|
|
||||||
"ssid": string,
|
|
||||||
"bssid": string,
|
|
||||||
"rssi": integer,
|
|
||||||
"channel": string,
|
|
||||||
"ht": boolean,
|
|
||||||
"cc": string,
|
|
||||||
"security": [
|
|
||||||
string,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
|
|
||||||
@ -193,4 +193,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,20 @@ Usage (module):
|
|||||||
import jc.parsers.arp
|
import jc.parsers.arp
|
||||||
result = jc.parsers.arp.parse(arp_command_output)
|
result = jc.parsers.arp.parse(arp_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'aix', 'freebsd', 'darwin'
|
[
|
||||||
|
{
|
||||||
|
"name": string,
|
||||||
|
"address": string,
|
||||||
|
"hwtype": string,
|
||||||
|
"hwaddress": string,
|
||||||
|
"flags_mask": string,
|
||||||
|
"iface": string,
|
||||||
|
"permanent": boolean,
|
||||||
|
"expires": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -106,7 +117,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.6'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.7'
|
||||||
description = '`arp` command parser'
|
description = '`arp` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -119,7 +131,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -129,20 +141,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema:
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": string,
|
|
||||||
"address": string,
|
|
||||||
"hwtype": string,
|
|
||||||
"hwaddress": string,
|
|
||||||
"flags_mask": string,
|
|
||||||
"iface": string,
|
|
||||||
"permanent": boolean,
|
|
||||||
"expires": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# in BSD style, change name to null if it is a question mark
|
# in BSD style, change name to null if it is a question mark
|
||||||
@ -212,7 +211,7 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
|
||||||
# detect if linux style was used
|
# detect if linux style was used
|
||||||
elif cleandata[0].startswith('Address'):
|
elif cleandata[0].startswith('Address'):
|
||||||
@ -239,4 +238,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,41 @@ Usage (module):
|
|||||||
import jc.parsers.blkid
|
import jc.parsers.blkid
|
||||||
result = jc.parsers.blkid.parse(blkid_command_output)
|
result = jc.parsers.blkid.parse(blkid_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -88,7 +120,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`blkid` command parser'
|
description = '`blkid` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -102,7 +135,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -112,41 +145,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
if 'devname' in entry:
|
if 'devname' in entry:
|
||||||
@ -225,4 +224,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,15 @@ Usage (module):
|
|||||||
import jc.parsers.cksum
|
import jc.parsers.cksum
|
||||||
result = jc.parsers.cksum.parse(cksum_command_output)
|
result = jc.parsers.cksum.parse(cksum_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"filename": string,
|
||||||
|
"checksum": integer,
|
||||||
|
"blocks": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -47,7 +53,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`cksum` and `sum` command parser'
|
description = '`cksum` and `sum` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -60,7 +67,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -70,15 +77,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"filename": string,
|
|
||||||
"checksum": integer,
|
|
||||||
"blocks": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@ -124,4 +123,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,36 @@ Usage (module):
|
|||||||
import jc.parsers.crontab
|
import jc.parsers.crontab
|
||||||
result = jc.parsers.crontab.parse(crontab_output)
|
result = jc.parsers.crontab.parse(crontab_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -143,7 +170,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.4'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.5'
|
||||||
description = '`crontab` command and file parser'
|
description = '`crontab` command and file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -157,7 +185,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -167,37 +195,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# put itmes in lists
|
# put itmes in lists
|
||||||
try:
|
try:
|
||||||
@ -280,4 +278,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -11,9 +11,37 @@ Usage (module):
|
|||||||
import jc.parsers.crontab_u
|
import jc.parsers.crontab_u
|
||||||
result = jc.parsers.crontab_u.parse(crontab_u_output)
|
result = jc.parsers.crontab_u.parse(crontab_u_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -132,15 +160,14 @@ Examples:
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import jc.utils
|
import jc.utils
|
||||||
import jc.parsers.universal
|
import jc.parsers.universal
|
||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.5'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.6'
|
||||||
description = '`crontab` file parser with user support'
|
description = '`crontab` file parser with user support'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -153,7 +180,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -163,38 +190,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# put itmes in lists
|
# put itmes in lists
|
||||||
try:
|
try:
|
||||||
@ -279,4 +275,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -11,9 +11,16 @@ Usage (module):
|
|||||||
import jc.parsers.csv
|
import jc.parsers.csv
|
||||||
result = jc.parsers.csv.parse(csv_output)
|
result = jc.parsers.csv.parse(csv_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
csv file converted to a Dictionary: https://docs.python.org/3/library/csv.html
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"column_name1": string,
|
||||||
|
"column_name2": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -67,7 +74,8 @@ import csv
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = 'CSV file parser'
|
description = 'CSV file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -80,7 +88,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -90,14 +98,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Each Dictionary represents a row in the csv file:
|
List of Dictionaries. Each Dictionary represents a row in the csv file.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
csv file converted to a Dictionary
|
|
||||||
https://docs.python.org/3/library/csv.html
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# No further processing
|
# No further processing
|
||||||
@ -143,4 +144,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,29 @@ Usage (module):
|
|||||||
import jc.parsers.date
|
import jc.parsers.date
|
||||||
result = jc.parsers.date.parse(date_command_output)
|
result = jc.parsers.date.parse(date_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
{
|
||||||
|
"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, # naive timestamp
|
||||||
|
"epoch_utc": integer, # timezone-aware timestamp. Only available if timezone field is UTC
|
||||||
|
"timezone_aware": boolean # if true, all fields are correctly based on UTC
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -51,7 +71,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '2.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '2.1'
|
||||||
description = '`date` command parser'
|
description = '`date` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -64,7 +85,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -74,28 +95,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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, # naive timestamp
|
|
||||||
"epoch_utc": integer, # timezone-aware timestamp. Only available if timezone field is UTC
|
|
||||||
"timezone_aware": boolean # if true, all fields are correctly based on UTC
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
# no further processing
|
# no further processing
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -188,4 +188,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,24 @@ Usage (module):
|
|||||||
import jc.parsers.df
|
import jc.parsers.df
|
||||||
result = jc.parsers.df.parse(df_command_output)
|
result = jc.parsers.df.parse(df_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -82,7 +97,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.5'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.6'
|
||||||
description = '`df` command parser'
|
description = '`df` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -95,7 +111,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -105,24 +121,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@ -208,4 +207,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,61 @@ Usage (module):
|
|||||||
import jc.parsers.dig
|
import jc.parsers.dig
|
||||||
result = jc.parsers.dig.parse(dig_command_output)
|
result = jc.parsers.dig.parse(dig_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"question": {
|
||||||
|
"name": string,
|
||||||
|
"class": string,
|
||||||
|
"type": string
|
||||||
|
},
|
||||||
|
"answer": [
|
||||||
|
{
|
||||||
|
"name": string,
|
||||||
|
"class": string,
|
||||||
|
"type": string,
|
||||||
|
"ttl": integer,
|
||||||
|
"data": string
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"authority": [
|
||||||
|
{
|
||||||
|
"name": string,
|
||||||
|
"class": string,
|
||||||
|
"type": string,
|
||||||
|
"ttl": integer,
|
||||||
|
"data": string
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query_time": integer, # in msec
|
||||||
|
"server": string,
|
||||||
|
"when": string,
|
||||||
|
"when_epoch": integer, # naive timestamp if when field is parsable, else null
|
||||||
|
"when_epoch_utc": integer, # timezone aware timestamp availabe for UTC, else null
|
||||||
|
"rcvd": integer
|
||||||
|
"size": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -343,7 +395,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.6'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.7'
|
||||||
description = '`dig` command parser'
|
description = '`dig` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -356,7 +409,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -366,61 +419,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"question": {
|
|
||||||
"name": string,
|
|
||||||
"class": string,
|
|
||||||
"type": string
|
|
||||||
},
|
|
||||||
"answer": [
|
|
||||||
{
|
|
||||||
"name": string,
|
|
||||||
"class": string,
|
|
||||||
"type": string,
|
|
||||||
"ttl": integer,
|
|
||||||
"data": string
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"authority": [
|
|
||||||
{
|
|
||||||
"name": string,
|
|
||||||
"class": string,
|
|
||||||
"type": string,
|
|
||||||
"ttl": integer,
|
|
||||||
"data": string
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"query_time": integer, # in msec
|
|
||||||
"server": string,
|
|
||||||
"when": string,
|
|
||||||
"when_epoch": integer, # naive timestamp if when field is parsable, else null
|
|
||||||
"when_epoch_utc": integer, # timezone aware timestamp availabe for UTC, else null
|
|
||||||
"rcvd": integer
|
|
||||||
"size": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@ -472,7 +471,7 @@ def process(proc_data):
|
|||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
def parse_header(header):
|
def _parse_header(header):
|
||||||
# ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 6140
|
# ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 6140
|
||||||
header = header.split()
|
header = header.split()
|
||||||
opcode = header[3].rstrip(',')
|
opcode = header[3].rstrip(',')
|
||||||
@ -484,7 +483,7 @@ def parse_header(header):
|
|||||||
'status': status}
|
'status': status}
|
||||||
|
|
||||||
|
|
||||||
def parse_flags_line(flagsline):
|
def _parse_flags_line(flagsline):
|
||||||
# ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
|
# ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
|
||||||
flagsline = flagsline.split(';')
|
flagsline = flagsline.split(';')
|
||||||
flags = flagsline.pop(0)
|
flags = flagsline.pop(0)
|
||||||
@ -508,7 +507,7 @@ def parse_flags_line(flagsline):
|
|||||||
'additional_num': additional_num}
|
'additional_num': additional_num}
|
||||||
|
|
||||||
|
|
||||||
def parse_question(question):
|
def _parse_question(question):
|
||||||
# ;www.cnn.com. IN A
|
# ;www.cnn.com. IN A
|
||||||
question = question.split()
|
question = question.split()
|
||||||
dns_name = question[0].lstrip(';')
|
dns_name = question[0].lstrip(';')
|
||||||
@ -520,7 +519,7 @@ def parse_question(question):
|
|||||||
'type': dns_type}
|
'type': dns_type}
|
||||||
|
|
||||||
|
|
||||||
def parse_authority(authority):
|
def _parse_authority(authority):
|
||||||
# cnn.com. 3600 IN NS ns-1086.awsdns-07.org.
|
# cnn.com. 3600 IN NS ns-1086.awsdns-07.org.
|
||||||
authority = authority.split()
|
authority = authority.split()
|
||||||
authority_name = authority[0]
|
authority_name = authority[0]
|
||||||
@ -536,7 +535,7 @@ def parse_authority(authority):
|
|||||||
'data': authority_data}
|
'data': authority_data}
|
||||||
|
|
||||||
|
|
||||||
def parse_answer(answer):
|
def _parse_answer(answer):
|
||||||
# www.cnn.com. 5 IN CNAME turner-tls.map.fastly.net.
|
# www.cnn.com. 5 IN CNAME turner-tls.map.fastly.net.
|
||||||
answer = answer.split(maxsplit=4)
|
answer = answer.split(maxsplit=4)
|
||||||
answer_name = answer[0]
|
answer_name = answer[0]
|
||||||
@ -556,7 +555,7 @@ def parse_answer(answer):
|
|||||||
'data': answer_data}
|
'data': answer_data}
|
||||||
|
|
||||||
|
|
||||||
def parse_axfr(axfr):
|
def _parse_axfr(axfr):
|
||||||
# ; <<>> DiG 9.11.14-3-Debian <<>> @81.4.108.41 axfr zonetransfer.me +nocookie
|
# ; <<>> DiG 9.11.14-3-Debian <<>> @81.4.108.41 axfr zonetransfer.me +nocookie
|
||||||
# ; (1 server found)
|
# ; (1 server found)
|
||||||
# ;; global options: +cmd
|
# ;; global options: +cmd
|
||||||
@ -617,17 +616,17 @@ def parse(data, raw=False, quiet=False):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if ';' not in line and axfr:
|
if ';' not in line and axfr:
|
||||||
axfr_list.append(parse_axfr(line))
|
axfr_list.append(_parse_axfr(line))
|
||||||
output_entry.update({'axfr': axfr_list})
|
output_entry.update({'axfr': axfr_list})
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith(';; ->>HEADER<<-'):
|
if line.startswith(';; ->>HEADER<<-'):
|
||||||
output_entry = {}
|
output_entry = {}
|
||||||
output_entry.update(parse_header(line))
|
output_entry.update(_parse_header(line))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith(';; flags:'):
|
if line.startswith(';; flags:'):
|
||||||
output_entry.update(parse_flags_line(line))
|
output_entry.update(_parse_flags_line(line))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith(';; QUESTION SECTION:'):
|
if line.startswith(';; QUESTION SECTION:'):
|
||||||
@ -638,7 +637,7 @@ def parse(data, raw=False, quiet=False):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if question:
|
if question:
|
||||||
output_entry['question'] = parse_question(line)
|
output_entry['question'] = _parse_question(line)
|
||||||
question = False
|
question = False
|
||||||
authority = False
|
authority = False
|
||||||
answer = False
|
answer = False
|
||||||
@ -654,7 +653,7 @@ def parse(data, raw=False, quiet=False):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if ';' not in line and authority:
|
if ';' not in line and authority:
|
||||||
authority_list.append(parse_authority(line))
|
authority_list.append(_parse_authority(line))
|
||||||
output_entry.update({'authority': authority_list})
|
output_entry.update({'authority': authority_list})
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -667,7 +666,7 @@ def parse(data, raw=False, quiet=False):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if ';' not in line and answer:
|
if ';' not in line and answer:
|
||||||
answer_list.append(parse_answer(line))
|
answer_list.append(_parse_answer(line))
|
||||||
output_entry.update({'answer': answer_list})
|
output_entry.update({'answer': answer_list})
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -704,4 +703,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -21,9 +21,19 @@ Usage (module):
|
|||||||
import jc.parsers.dir
|
import jc.parsers.dir
|
||||||
result = jc.parsers.dir.parse(dir_command_output)
|
result = jc.parsers.dir.parse(dir_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'win32'
|
[
|
||||||
|
{
|
||||||
|
"date": string,
|
||||||
|
"time": string,
|
||||||
|
"epoch": integer, # naive timestamp
|
||||||
|
"dir": boolean,
|
||||||
|
"size": integer,
|
||||||
|
"filename: string,
|
||||||
|
"parent": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -110,7 +120,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`dir` command parser'
|
description = '`dir` command parser'
|
||||||
author = 'Rasheed Elsaleh'
|
author = 'Rasheed Elsaleh'
|
||||||
author_email = 'rasheed@rebelliondefense.com'
|
author_email = 'rasheed@rebelliondefense.com'
|
||||||
@ -123,7 +134,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -133,19 +144,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"date": string,
|
|
||||||
"time": string,
|
|
||||||
"epoch": integer, # naive timestamp
|
|
||||||
"dir": boolean,
|
|
||||||
"size": integer,
|
|
||||||
"filename: string,
|
|
||||||
"parent": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# add timestamps
|
# add timestamps
|
||||||
@ -216,4 +215,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,22 @@ Usage (module):
|
|||||||
import jc.parsers.dmidecode
|
import jc.parsers.dmidecode
|
||||||
result = jc.parsers.dmidecode.parse(dmidecode_command_output)
|
result = jc.parsers.dmidecode.parse(dmidecode_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"handle": string,
|
||||||
|
"type": integer,
|
||||||
|
"bytes": integer,
|
||||||
|
"description": string,
|
||||||
|
"values": { (null if empty)
|
||||||
|
"lowercase_no_spaces_keys": string,
|
||||||
|
"multiline_key_values": [
|
||||||
|
string,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -111,7 +124,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`dmidecode` command parser'
|
description = '`dmidecode` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -125,7 +139,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -135,22 +149,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"handle": string,
|
|
||||||
"type": integer,
|
|
||||||
"bytes": integer,
|
|
||||||
"description": string,
|
|
||||||
"values": { (null if empty)
|
|
||||||
"lowercase_no_spaces_keys": string,
|
|
||||||
"multiline_key_values": [
|
|
||||||
string,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['type', 'bytes']
|
int_list = ['type', 'bytes']
|
||||||
@ -347,4 +346,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -14,12 +14,23 @@ Usage (cli):
|
|||||||
|
|
||||||
Usage (module):
|
Usage (module):
|
||||||
|
|
||||||
import jc.parsers.dpkg
|
import jc.parsers.dpkg_l
|
||||||
result = jc.parsers.dpkg.parse(dpkg_command_output)
|
result = jc.parsers.dpkg_l.parse(dpkg_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"codes": string,
|
||||||
|
"name": string,
|
||||||
|
"version": string,
|
||||||
|
"architecture": string,
|
||||||
|
"description": string,
|
||||||
|
"desired": string,
|
||||||
|
"status": string,
|
||||||
|
"error": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -119,7 +130,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`dpkg -l` command parser'
|
description = '`dpkg -l` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -133,7 +145,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -143,20 +155,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema:
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"codes": string,
|
|
||||||
"name": string,
|
|
||||||
"version": string,
|
|
||||||
"architecture": string,
|
|
||||||
"description": string,
|
|
||||||
"desired": string,
|
|
||||||
"status": string,
|
|
||||||
"error": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
if 'codes' in entry:
|
if 'codes' in entry:
|
||||||
@ -245,4 +244,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,14 @@ Usage (module):
|
|||||||
import jc.parsers.du
|
import jc.parsers.du
|
||||||
result = jc.parsers.du.parse(du_command_output)
|
result = jc.parsers.du.parse(du_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"size": integer,
|
||||||
|
"name": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -82,7 +87,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`du` command parser'
|
description = '`du` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -96,7 +102,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -106,14 +112,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"size": integer,
|
|
||||||
"name": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
int_list = ['size']
|
int_list = ['size']
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@ -158,4 +157,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,14 @@ Usage (module):
|
|||||||
import jc.parsers.env
|
import jc.parsers.env
|
||||||
result = jc.parsers.env.parse(env_command_output)
|
result = jc.parsers.env.parse(env_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"name": string,
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -63,7 +68,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`env` command parser'
|
description = '`env` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -76,7 +82,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -86,14 +92,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": string,
|
|
||||||
"value": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# rebuild output for added semantic information
|
# rebuild output for added semantic information
|
||||||
@ -139,4 +138,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,14 @@ Usage (module):
|
|||||||
import jc.parsers.file
|
import jc.parsers.file
|
||||||
result = jc.parsers.file.parse(file_command_output)
|
result = jc.parsers.file.parse(file_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'aix', 'freebsd', 'darwin'
|
[
|
||||||
|
{
|
||||||
|
"filename": string,
|
||||||
|
"type ": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -57,7 +62,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`file` command parser'
|
description = '`file` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -70,7 +76,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -80,14 +86,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"filename": string,
|
|
||||||
"type ": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
# No further processing
|
# No further processing
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -137,4 +136,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,23 @@ Usage (module):
|
|||||||
import jc.parsers.finger
|
import jc.parsers.finger
|
||||||
result = jc.parsers.finger.parse(finger_command_output)
|
result = jc.parsers.finger.parse(finger_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -77,7 +91,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`finger` command parser'
|
description = '`finger` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -91,7 +106,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -101,23 +116,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
if 'tty' in entry:
|
if 'tty' in entry:
|
||||||
@ -212,4 +211,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,15 @@ Usage (module):
|
|||||||
import jc.parsers.foo
|
import jc.parsers.foo
|
||||||
result = jc.parsers.foo.parse(foo_command_output)
|
result = jc.parsers.foo.parse(foo_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"foo": string,
|
||||||
|
"bar": boolean,
|
||||||
|
"baz": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -31,6 +37,7 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
version = '1.0'
|
version = '1.0'
|
||||||
description = '`foo` command parser'
|
description = '`foo` command parser'
|
||||||
author = 'John Doe'
|
author = 'John Doe'
|
||||||
@ -45,7 +52,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -55,15 +62,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"foo": string,
|
|
||||||
"bar": boolean,
|
|
||||||
"baz": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# rebuild output for added semantic information
|
# rebuild output for added semantic information
|
||||||
@ -98,4 +97,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,19 @@ Usage (module):
|
|||||||
import jc.parsers.free
|
import jc.parsers.free
|
||||||
result = jc.parsers.free.parse(free_command_output)
|
result = jc.parsers.free.parse(free_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"type": string,
|
||||||
|
"total": integer,
|
||||||
|
"used": integer,
|
||||||
|
"free": integer,
|
||||||
|
"shared": integer,
|
||||||
|
"buff_cache": integer,
|
||||||
|
"available": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -62,7 +72,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`free` command parser'
|
description = '`free` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -75,7 +86,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -85,19 +96,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": string,
|
|
||||||
"total": integer,
|
|
||||||
"used": integer,
|
|
||||||
"free": integer,
|
|
||||||
"shared": integer,
|
|
||||||
"buff_cache": integer,
|
|
||||||
"available": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@ -147,4 +146,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,18 @@ Usage (module):
|
|||||||
import jc.parsers.fstab
|
import jc.parsers.fstab
|
||||||
result = jc.parsers.fstab.parse(fstab_command_output)
|
result = jc.parsers.fstab.parse(fstab_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"fs_spec": string,
|
||||||
|
"fs_file": string,
|
||||||
|
"fs_vfstype": string,
|
||||||
|
"fs_mntops": string,
|
||||||
|
"fs_freq": integer,
|
||||||
|
"fs_passno": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -75,7 +84,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`/etc/fstab` file parser'
|
description = '`/etc/fstab` file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -87,7 +97,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -97,18 +107,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fs_spec": string,
|
|
||||||
"fs_file": string,
|
|
||||||
"fs_vfstype": string,
|
|
||||||
"fs_mntops": string,
|
|
||||||
"fs_freq": integer,
|
|
||||||
"fs_passno": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['fs_freq', 'fs_passno']
|
int_list = ['fs_freq', 'fs_passno']
|
||||||
@ -174,4 +173,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,18 @@ Usage (module):
|
|||||||
import jc.parsers.group
|
import jc.parsers.group
|
||||||
result = jc.parsers.group.parse(group_file_output)
|
result = jc.parsers.group.parse(group_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"group_name": string,
|
||||||
|
"password": string,
|
||||||
|
"gid": integer,
|
||||||
|
"members": [
|
||||||
|
string
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -99,7 +108,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`/etc/group` file parser'
|
description = '`/etc/group` file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -112,7 +122,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -122,18 +132,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"group_name": string,
|
|
||||||
"password": string,
|
|
||||||
"gid": integer,
|
|
||||||
"members": [
|
|
||||||
string
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['gid']
|
int_list = ['gid']
|
||||||
@ -193,4 +192,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,20 @@ Usage (module):
|
|||||||
import jc.parsers.gshadow
|
import jc.parsers.gshadow
|
||||||
result = jc.parsers.gshadow.parse(gshadow_file_output)
|
result = jc.parsers.gshadow.parse(gshadow_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"group_name": string,
|
||||||
|
"password": string,
|
||||||
|
"administrators": [
|
||||||
|
string
|
||||||
|
],
|
||||||
|
"members": [
|
||||||
|
string
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -65,7 +76,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`/etc/gshadow` file parser'
|
description = '`/etc/gshadow` file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -78,7 +90,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -88,20 +100,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"group_name": string,
|
|
||||||
"password": string,
|
|
||||||
"administrators": [
|
|
||||||
string
|
|
||||||
],
|
|
||||||
"members": [
|
|
||||||
string
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
if entry['administrators'] == ['']:
|
if entry['administrators'] == ['']:
|
||||||
@ -155,4 +154,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,14 @@ Usage (module):
|
|||||||
import jc.parsers.hash
|
import jc.parsers.hash
|
||||||
result = jc.parsers.hash.parse(hash_command_output)
|
result = jc.parsers.hash.parse(hash_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"command": string,
|
||||||
|
"hits": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -32,7 +37,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`hash` command parser'
|
description = '`hash` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -44,7 +50,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -54,14 +60,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"command": string,
|
|
||||||
"hits": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# change to int
|
# change to int
|
||||||
@ -105,4 +104,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -23,9 +23,14 @@ Usage (module):
|
|||||||
import jc.parsers.hashsum
|
import jc.parsers.hashsum
|
||||||
result = jc.parsers.hashsum.parse(md5sum_command_output)
|
result = jc.parsers.hashsum.parse(md5sum_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"filename": string,
|
||||||
|
"hash": string,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -62,7 +67,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = 'hashsum command parser (`md5sum`, `shasum`, etc.)'
|
description = 'hashsum command parser (`md5sum`, `shasum`, etc.)'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -76,7 +82,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -86,14 +92,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"filename": string,
|
|
||||||
"hash": string,
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# no further processing for this parser
|
# no further processing for this parser
|
||||||
@ -142,4 +141,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,56 @@ Usage (module):
|
|||||||
import jc.parsers.hciconfig
|
import jc.parsers.hciconfig
|
||||||
result = jc.parsers.hciconfig.parse(hciconfig_command_output)
|
result = jc.parsers.hciconfig.parse(hciconfig_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -269,7 +316,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`hciconfig` command parser'
|
description = '`hciconfig` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -283,7 +331,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -293,56 +341,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@ -526,4 +525,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -11,9 +11,14 @@ Usage (module):
|
|||||||
import jc.parsers.history
|
import jc.parsers.history
|
||||||
result = jc.parsers.history.parse(history_command_output)
|
result = jc.parsers.history.parse(history_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"line": integer,
|
||||||
|
"command": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -51,7 +56,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`history` command parser'
|
description = '`history` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -64,7 +70,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -74,14 +80,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"line": integer,
|
|
||||||
"command": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# rebuild output for added semantic information
|
# rebuild output for added semantic information
|
||||||
@ -132,4 +131,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,16 @@ Usage (module):
|
|||||||
import jc.parsers.hosts
|
import jc.parsers.hosts
|
||||||
result = jc.parsers.hosts.parse(hosts_file_output)
|
result = jc.parsers.hosts.parse(hosts_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"ip": string,
|
||||||
|
"hostname": [
|
||||||
|
string
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -66,7 +73,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`/etc/hosts` file parser'
|
description = '`/etc/hosts` file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -78,7 +86,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -88,16 +96,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"ip": string,
|
|
||||||
"hostname": [
|
|
||||||
string
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# no additional processing needed
|
# no additional processing needed
|
||||||
@ -157,4 +156,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,34 @@ Usage (module):
|
|||||||
import jc.parsers.id
|
import jc.parsers.id
|
||||||
result = jc.parsers.id.parse(id_command_output)
|
result = jc.parsers.id.parse(id_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -79,7 +104,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`id` command parser'
|
description = '`id` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -93,7 +119,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -103,34 +129,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
if 'uid' in proc_data:
|
if 'uid' in proc_data:
|
||||||
if 'id' in proc_data['uid']:
|
if 'id' in proc_data['uid']:
|
||||||
@ -221,4 +220,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,40 @@ Usage (module):
|
|||||||
import jc.parsers.ifconfig
|
import jc.parsers.ifconfig
|
||||||
result = jc.parsers.ifconfig.parse(ifconfig_command_output)
|
result = jc.parsers.ifconfig.parse(ifconfig_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'aix', 'freebsd', 'darwin'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -156,7 +187,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.8'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.9'
|
||||||
description = '`ifconfig` command parser'
|
description = '`ifconfig` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -170,7 +202,8 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
class IfconfigParser(object):
|
class _IfconfigParser(object):
|
||||||
|
"""ifconfig parser module written by threeheadedknight@protonmail.com"""
|
||||||
# Author: threeheadedknight@protonmail.com
|
# Author: threeheadedknight@protonmail.com
|
||||||
# Date created: 30.06.2018 17:03
|
# Date created: 30.06.2018 17:03
|
||||||
# Python Version: 3.7
|
# Python Version: 3.7
|
||||||
@ -374,7 +407,7 @@ class IfconfigParser(object):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def update_interface_details(interface):
|
def update_interface_details(interface):
|
||||||
for attr in IfconfigParser.attributes:
|
for attr in _IfconfigParser.attributes:
|
||||||
if attr not in interface:
|
if attr not in interface:
|
||||||
interface[attr] = None
|
interface[attr] = None
|
||||||
return namedtuple('Interface', interface.keys())(**interface)
|
return namedtuple('Interface', interface.keys())(**interface)
|
||||||
@ -384,7 +417,7 @@ class InterfaceNotFound(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -394,40 +427,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['flags', 'mtu', 'ipv6_mask', 'rx_packets', 'rx_bytes', 'rx_errors', 'rx_dropped', 'rx_overruns',
|
int_list = ['flags', 'mtu', 'ipv6_mask', 'rx_packets', 'rx_bytes', 'rx_errors', 'rx_dropped', 'rx_overruns',
|
||||||
@ -484,7 +484,7 @@ def parse(data, raw=False, quiet=False):
|
|||||||
|
|
||||||
if jc.utils.has_data(data):
|
if jc.utils.has_data(data):
|
||||||
|
|
||||||
parsed = IfconfigParser(console_output=data)
|
parsed = _IfconfigParser(console_output=data)
|
||||||
interfaces = parsed.get_interfaces()
|
interfaces = parsed.get_interfaces()
|
||||||
|
|
||||||
# convert ifconfigparser output to a dictionary
|
# convert ifconfigparser output to a dictionary
|
||||||
@ -496,4 +496,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,18 @@ Usage (module):
|
|||||||
import jc.parsers.ini
|
import jc.parsers.ini
|
||||||
result = jc.parsers.ini.parse(ini_file_output)
|
result = jc.parsers.ini.parse(ini_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
ini or key/value document converted to a dictionary - see configparser standard
|
||||||
|
library documentation for more details.
|
||||||
|
|
||||||
|
Note: Values starting and ending with quotation marks will have the marks removed.
|
||||||
|
If you would like to keep the quotation marks, use the -r or raw=True argument.
|
||||||
|
|
||||||
|
{
|
||||||
|
"key1": string,
|
||||||
|
"key2": string
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -56,7 +65,8 @@ import configparser
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = 'INI file parser'
|
description = 'INI file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -69,7 +79,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -79,15 +89,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary representing an ini or simple key/value pair document:
|
Dictionary representing an ini or simple key/value pair document.
|
||||||
|
|
||||||
{
|
|
||||||
ini or key/value document converted to a dictionary - see configparser standard
|
|
||||||
library documentation for more details.
|
|
||||||
|
|
||||||
Note: Values starting and ending with quotation marks will have the marks removed.
|
|
||||||
If you would like to keep the quotation marks, use the -r or raw=True argument.
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
# remove quotation marks from beginning and end of values
|
# remove quotation marks from beginning and end of values
|
||||||
for heading in proc_data:
|
for heading in proc_data:
|
||||||
@ -145,4 +147,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,28 @@ Usage (module):
|
|||||||
import jc.parsers.iptables
|
import jc.parsers.iptables
|
||||||
result = jc.parsers.iptables.parse(iptables_command_output)
|
result = jc.parsers.iptables.parse(iptables_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -143,7 +162,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.4'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.5'
|
||||||
description = '`iptables` command parser'
|
description = '`iptables` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -156,7 +176,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -166,28 +186,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
for rule in entry['rules']:
|
for rule in entry['rules']:
|
||||||
@ -289,4 +288,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,15 @@ Usage (module):
|
|||||||
import jc.parsers.iw-scan
|
import jc.parsers.iw-scan
|
||||||
result = jc.parsers.iw-scan.parse(iw-scan_command_output)
|
result = jc.parsers.iw-scan.parse(iw-scan_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"foo": string/integer/float, # best guess based on value
|
||||||
|
"bar": string/integer/float,
|
||||||
|
"baz": string/integer/float
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -114,7 +120,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '0.5'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '0.6'
|
||||||
description = '`iw dev [device] scan` command parser'
|
description = '`iw dev [device] scan` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -128,7 +135,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -138,14 +145,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
[
|
|
||||||
{
|
|
||||||
"foo": string/integer/float, # best guess based on value
|
|
||||||
"bar": string/integer/float,
|
|
||||||
"baz": string/integer/float
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# convert ints and floats for top-level keys
|
# convert ints and floats for top-level keys
|
||||||
@ -174,7 +174,7 @@ def process(proc_data):
|
|||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
def post_parse(data):
|
def _post_parse(data):
|
||||||
# remove empty items
|
# remove empty items
|
||||||
cleandata = []
|
cleandata = []
|
||||||
for ssid in data:
|
for ssid in data:
|
||||||
@ -276,7 +276,7 @@ def post_parse(data):
|
|||||||
item['vht_tx_highest_supported_mbps'] = item['vht_tx_highest_supported'].replace(' Mbps', '')
|
item['vht_tx_highest_supported_mbps'] = item['vht_tx_highest_supported'].replace(' Mbps', '')
|
||||||
del item['vht_tx_highest_supported']
|
del item['vht_tx_highest_supported']
|
||||||
|
|
||||||
return process(cleandata)
|
return _process(cleandata)
|
||||||
|
|
||||||
|
|
||||||
def parse(data, raw=False, quiet=False):
|
def parse(data, raw=False, quiet=False):
|
||||||
@ -331,4 +331,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return post_parse(raw_output)
|
return _post_parse(raw_output)
|
||||||
|
@ -15,9 +15,17 @@ Usage (module):
|
|||||||
import jc.parsers.jobs
|
import jc.parsers.jobs
|
||||||
result = jc.parsers.jobs.parse(jobs_command_output)
|
result = jc.parsers.jobs.parse(jobs_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"job_number": integer,
|
||||||
|
"pid": integer,
|
||||||
|
"history": string,
|
||||||
|
"status": string,
|
||||||
|
"command": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -86,7 +94,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`jobs` command parser'
|
description = '`jobs` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -99,7 +108,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -109,17 +118,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"job_number": integer,
|
|
||||||
"pid": integer,
|
|
||||||
"history": string,
|
|
||||||
"status": string,
|
|
||||||
"command": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['job_number', 'pid']
|
int_list = ['job_number', 'pid']
|
||||||
@ -208,4 +207,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -4,7 +4,6 @@ Supports files containing simple key/value pairs. Delimiter can be `=` or `:`. M
|
|||||||
|
|
||||||
Note: Values starting and ending with quotation marks will have the marks removed. If you would like to keep the quotation marks, use the `-r` command-line argument or the `raw=True` argument in `parse()`.
|
Note: Values starting and ending with quotation marks will have the marks removed. If you would like to keep the quotation marks, use the `-r` command-line argument or the `raw=True` argument in `parse()`.
|
||||||
|
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
$ cat foo.txt | jc --kv
|
$ cat foo.txt | jc --kv
|
||||||
@ -14,9 +13,14 @@ Usage (module):
|
|||||||
import jc.parsers.kv
|
import jc.parsers.kv
|
||||||
result = jc.parsers.kv.parse(kv_file_output)
|
result = jc.parsers.kv.parse(kv_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
key/value document converted to a dictionary - see configparser standard library documentation for more details.
|
||||||
|
|
||||||
|
{
|
||||||
|
"key1": string,
|
||||||
|
"key2": string
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -42,7 +46,8 @@ Examples:
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = 'Key/Value file parser'
|
description = 'Key/Value file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
|
@ -17,9 +17,21 @@ Usage (module):
|
|||||||
import jc.parsers.last
|
import jc.parsers.last
|
||||||
result = jc.parsers.last.parse(last_command_output)
|
result = jc.parsers.last.parse(last_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"user": string,
|
||||||
|
"tty": string,
|
||||||
|
"hostname": string,
|
||||||
|
"login": string,
|
||||||
|
"logout": string,
|
||||||
|
"duration": string,
|
||||||
|
"login_epoch": integer, # (naive) available with last -F option
|
||||||
|
"logout_epoch": integer, # (naive) available with last -F option
|
||||||
|
"duration_seconds": integer # available with last -F option
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -91,7 +103,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.5'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.6'
|
||||||
description = '`last` and `lastb` command parser'
|
description = '`last` and `lastb` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -105,7 +118,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -115,21 +128,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"user": string,
|
|
||||||
"tty": string,
|
|
||||||
"hostname": string,
|
|
||||||
"login": string,
|
|
||||||
"logout": string,
|
|
||||||
"duration": string,
|
|
||||||
"login_epoch": integer, # (naive) available with last -F option
|
|
||||||
"logout_epoch": integer, # (naive) available with last -F option
|
|
||||||
"duration_seconds": integer # available with last -F option
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
if 'user' in entry and entry['user'] == 'boot_time':
|
if 'user' in entry and entry['user'] == 'boot_time':
|
||||||
@ -253,4 +252,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
104
jc/parsers/ls.py
104
jc/parsers/ls.py
@ -24,9 +24,22 @@ Usage (module):
|
|||||||
import jc.parsers.ls
|
import jc.parsers.ls
|
||||||
result = jc.parsers.ls.parse(ls_command_output)
|
result = jc.parsers.ls.parse(ls_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"filename": string,
|
||||||
|
"flags": string,
|
||||||
|
"links": integer,
|
||||||
|
"parent": string,
|
||||||
|
"owner": string,
|
||||||
|
"group": string,
|
||||||
|
"size": integer,
|
||||||
|
"date": string,
|
||||||
|
"epoch": integer, # naive timestamp if date field exists and can be converted
|
||||||
|
"epoch_utc": integer # timezone aware timestamp if date field is in UTC and can be converted
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -38,12 +51,6 @@ Examples:
|
|||||||
{
|
{
|
||||||
"filename": "arch"
|
"filename": "arch"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"filename": "awk"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "base64"
|
|
||||||
},
|
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -68,15 +75,6 @@ Examples:
|
|||||||
"size": 62744,
|
"size": 62744,
|
||||||
"date": "Aug 8 16:14"
|
"date": "Aug 8 16:14"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"filename": "arch",
|
|
||||||
"flags": "-rwxr-xr-x.",
|
|
||||||
"links": 1,
|
|
||||||
"owner": "root",
|
|
||||||
"group": "root",
|
|
||||||
"size": 33080,
|
|
||||||
"date": "Aug 19 23:25"
|
|
||||||
},
|
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -101,63 +99,16 @@ Examples:
|
|||||||
"size": "33080",
|
"size": "33080",
|
||||||
"date": "Aug 19 23:25"
|
"date": "Aug 19 23:25"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"filename": "awk",
|
|
||||||
"link_to": "gawk",
|
|
||||||
"flags": "lrwxrwxrwx.",
|
|
||||||
"links": "1",
|
|
||||||
"owner": "root",
|
|
||||||
"group": "root",
|
|
||||||
"size": "4",
|
|
||||||
"date": "Aug 15 10:53"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "base64",
|
|
||||||
"flags": "-rwxr-xr-x.",
|
|
||||||
"links": "1",
|
|
||||||
"owner": "root",
|
|
||||||
"group": "root",
|
|
||||||
"size": "37360",
|
|
||||||
"date": "Aug 19 23:25"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "basename",
|
|
||||||
"flags": "-rwxr-xr-x.",
|
|
||||||
"links": "1",
|
|
||||||
"owner": "root",
|
|
||||||
"group": "root",
|
|
||||||
"size": "29032",
|
|
||||||
"date": "Aug 19 23:25"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "bash",
|
|
||||||
"flags": "-rwxr-xr-x.",
|
|
||||||
"links": "1",
|
|
||||||
"owner": "root",
|
|
||||||
"group": "root",
|
|
||||||
"size": "964600",
|
|
||||||
"date": "Aug 8 05:06"
|
|
||||||
},
|
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
|
|
||||||
$ ls -l /usr/bin | jc --ls | jq '.[] | select(.size > 50000000)'
|
|
||||||
{
|
|
||||||
"filename": "emacs",
|
|
||||||
"flags": "-r-xr-xr-x",
|
|
||||||
"links": 1,
|
|
||||||
"owner": "root",
|
|
||||||
"group": "wheel",
|
|
||||||
"size": 117164432,
|
|
||||||
"date": "May 3 2019"
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
import re
|
import re
|
||||||
import jc.utils
|
import jc.utils
|
||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.7'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.8'
|
||||||
description = '`ls` command parser'
|
description = '`ls` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -170,7 +121,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -180,22 +131,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"filename": string,
|
|
||||||
"flags": string,
|
|
||||||
"links": integer,
|
|
||||||
"parent": string,
|
|
||||||
"owner": string,
|
|
||||||
"group": string,
|
|
||||||
"size": integer,
|
|
||||||
"date": string,
|
|
||||||
"epoch": integer, # naive timestamp if date field exists and can be converted
|
|
||||||
"epoch_utc": integer # timezone aware timestamp if date field is in UTC and can be converted
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['links', 'size']
|
int_list = ['links', 'size']
|
||||||
@ -337,4 +273,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,52 @@ Usage (module):
|
|||||||
import jc.parsers.lsblk
|
import jc.parsers.lsblk
|
||||||
result = jc.parsers.lsblk.parse(lsblk_command_output)
|
result = jc.parsers.lsblk.parse(lsblk_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -225,7 +268,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.5'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.6'
|
||||||
description = '`lsblk` command parser'
|
description = '`lsblk` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -238,7 +282,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -248,52 +292,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# boolean changes
|
# boolean changes
|
||||||
@ -357,4 +356,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,18 @@ Usage (module):
|
|||||||
import jc.parsers.lsmod
|
import jc.parsers.lsmod
|
||||||
result = jc.parsers.lsmod.parse(lsmod_command_output)
|
result = jc.parsers.lsmod.parse(lsmod_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"module": string,
|
||||||
|
"size": integer,
|
||||||
|
"used": integer,
|
||||||
|
"by": [
|
||||||
|
string
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -116,7 +125,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`lsmod` command parser'
|
description = '`lsmod` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -129,7 +139,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -139,18 +149,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"module": string,
|
|
||||||
"size": integer,
|
|
||||||
"used": integer,
|
|
||||||
"by": [
|
|
||||||
string
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# integer changes
|
# integer changes
|
||||||
@ -199,4 +198,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,22 @@ Usage (module):
|
|||||||
import jc.parsers.lsof
|
import jc.parsers.lsof
|
||||||
result = jc.parsers.lsof.parse(lsof_command_output)
|
result = jc.parsers.lsof.parse(lsof_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"command": string,
|
||||||
|
"pid": integer,
|
||||||
|
"tid": integer,
|
||||||
|
"user": string,
|
||||||
|
"fd": string,
|
||||||
|
"type": string,
|
||||||
|
"device": string,
|
||||||
|
"size_off": integer,
|
||||||
|
"node": integer,
|
||||||
|
"name": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -106,7 +119,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`lsof` command parser'
|
description = '`lsof` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -119,7 +133,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -129,22 +143,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"command": string,
|
|
||||||
"pid": integer,
|
|
||||||
"tid": integer,
|
|
||||||
"user": string,
|
|
||||||
"fd": string,
|
|
||||||
"type": string,
|
|
||||||
"device": string,
|
|
||||||
"size_off": integer,
|
|
||||||
"node": integer,
|
|
||||||
"name": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# integer changes
|
# integer changes
|
||||||
@ -191,4 +190,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,18 @@ Usage (module):
|
|||||||
import jc.parsers.mount
|
import jc.parsers.mount
|
||||||
result = jc.parsers.mount.parse(mount_command_output)
|
result = jc.parsers.mount.parse(mount_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"filesystem": string,
|
||||||
|
"mount_point": string,
|
||||||
|
"type": string,
|
||||||
|
"access": [
|
||||||
|
string
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -65,7 +74,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.5'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.6'
|
||||||
description = '`mount` command parser'
|
description = '`mount` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -78,7 +88,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -88,24 +98,13 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"filesystem": string,
|
|
||||||
"mount_point": string,
|
|
||||||
"type": string,
|
|
||||||
"access": [
|
|
||||||
string
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
# nothing to process
|
# nothing to process
|
||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
def osx_parse(data):
|
def _osx_parse(data):
|
||||||
output = []
|
output = []
|
||||||
|
|
||||||
for entry in data:
|
for entry in data:
|
||||||
@ -130,7 +129,7 @@ def osx_parse(data):
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
def linux_parse(data):
|
def _linux_parse(data):
|
||||||
output = []
|
output = []
|
||||||
|
|
||||||
for entry in data:
|
for entry in data:
|
||||||
@ -175,12 +174,12 @@ def parse(data, raw=False, quiet=False):
|
|||||||
|
|
||||||
# check for OSX output
|
# check for OSX output
|
||||||
if ' type ' not in cleandata[0]:
|
if ' type ' not in cleandata[0]:
|
||||||
raw_output = osx_parse(cleandata)
|
raw_output = _osx_parse(cleandata)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raw_output = linux_parse(cleandata)
|
raw_output = _linux_parse(cleandata)
|
||||||
|
|
||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,106 @@ Usage (module):
|
|||||||
import jc.parsers.netstat
|
import jc.parsers.netstat
|
||||||
result = jc.parsers.netstat.parse(netstat_command_output)
|
result = jc.parsers.netstat.parse(netstat_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -255,7 +352,8 @@ Examples:
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.8'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.9'
|
||||||
description = '`netstat` command parser'
|
description = '`netstat` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -268,7 +366,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -278,106 +376,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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,
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# integer changes
|
# integer changes
|
||||||
@ -467,4 +466,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,23 @@ Usage (module):
|
|||||||
import jc.parsers.ntpq
|
import jc.parsers.ntpq
|
||||||
result = jc.parsers.ntpq.parse(ntpq_command_output)
|
result = jc.parsers.ntpq.parse(ntpq_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -192,7 +206,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`ntpq -p` command parser'
|
description = '`ntpq -p` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -205,7 +220,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -215,24 +230,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
|
|
||||||
@ -305,4 +303,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,19 @@ Usage (module):
|
|||||||
import jc.parsers.passwd
|
import jc.parsers.passwd
|
||||||
result = jc.parsers.passwd.parse(passwd_file_output)
|
result = jc.parsers.passwd.parse(passwd_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"username": string,
|
||||||
|
"password": string,
|
||||||
|
"uid": integer,
|
||||||
|
"gid": integer,
|
||||||
|
"comment": string,
|
||||||
|
"home": string,
|
||||||
|
"shell": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -83,7 +93,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`/etc/passwd` file parser'
|
description = '`/etc/passwd` file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -96,7 +107,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -106,19 +117,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"username": string,
|
|
||||||
"password": string,
|
|
||||||
"uid": integer,
|
|
||||||
"gid": integer,
|
|
||||||
"comment": string,
|
|
||||||
"home": string,
|
|
||||||
"shell": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['uid', 'gid']
|
int_list = ['uid', 'gid']
|
||||||
@ -177,4 +176,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,35 @@ Usage (module):
|
|||||||
import jc.parsers.ping
|
import jc.parsers.ping
|
||||||
result = jc.parsers.ping.parse(ping_command_output)
|
result = jc.parsers.ping.parse(ping_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
{
|
||||||
|
"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, # ('reply' or 'timeout')
|
||||||
|
"timestamp": float,
|
||||||
|
"bytes": integer,
|
||||||
|
"response_ip": string,
|
||||||
|
"icmp_seq": integer,
|
||||||
|
"ttl": integer,
|
||||||
|
"time_ms": float,
|
||||||
|
"duplicate": boolean
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -119,7 +145,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`ping` and `ping6` command parser'
|
description = '`ping` and `ping6` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -132,7 +159,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -142,35 +169,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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, ('reply' or 'timeout')
|
|
||||||
"timestamp": float,
|
|
||||||
"bytes": integer,
|
|
||||||
"response_ip": string,
|
|
||||||
"icmp_seq": integer,
|
|
||||||
"ttl": integer,
|
|
||||||
"time_ms": float,
|
|
||||||
"duplicate": boolean
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
int_list = ['data_bytes', 'packets_transmitted', 'packets_received', 'bytes', 'icmp_seq', 'ttl', 'duplicates']
|
int_list = ['data_bytes', 'packets_transmitted', 'packets_received', 'bytes', 'icmp_seq', 'ttl', 'duplicates']
|
||||||
float_list = ['packet_loss_percent', 'round_trip_ms_min', 'round_trip_ms_avg', 'round_trip_ms_max',
|
float_list = ['packet_loss_percent', 'round_trip_ms_min', 'round_trip_ms_avg', 'round_trip_ms_max',
|
||||||
@ -208,7 +207,7 @@ def process(proc_data):
|
|||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
def linux_parse(data):
|
def _linux_parse(data):
|
||||||
raw_output = {}
|
raw_output = {}
|
||||||
ping_responses = []
|
ping_responses = []
|
||||||
pattern = None
|
pattern = None
|
||||||
@ -357,7 +356,7 @@ def linux_parse(data):
|
|||||||
return raw_output
|
return raw_output
|
||||||
|
|
||||||
|
|
||||||
def bsd_parse(data):
|
def _bsd_parse(data):
|
||||||
raw_output = {}
|
raw_output = {}
|
||||||
ping_responses = []
|
ping_responses = []
|
||||||
pattern = None
|
pattern = None
|
||||||
@ -508,11 +507,11 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if jc.utils.has_data(data):
|
if jc.utils.has_data(data):
|
||||||
|
|
||||||
if ' time ' in data.splitlines()[-2] or ' time ' in data.splitlines()[-3]:
|
if ' time ' in data.splitlines()[-2] or ' time ' in data.splitlines()[-3]:
|
||||||
raw_output = linux_parse(data)
|
raw_output = _linux_parse(data)
|
||||||
else:
|
else:
|
||||||
raw_output = bsd_parse(data)
|
raw_output = _bsd_parse(data)
|
||||||
|
|
||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,15 @@ Usage (module):
|
|||||||
import jc.parsers.pip_list
|
import jc.parsers.pip_list
|
||||||
result = jc.parsers.pip_list.parse(pip_list_command_output)
|
result = jc.parsers.pip_list.parse(pip_list_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"package": string,
|
||||||
|
"version": string,
|
||||||
|
"location": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -41,7 +47,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`pip list` command parser'
|
description = '`pip list` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -54,7 +61,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -64,15 +71,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"package": string,
|
|
||||||
"version": string,
|
|
||||||
"location": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
# no further processing
|
# no further processing
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -123,4 +122,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,22 @@ Usage (module):
|
|||||||
import jc.parsers.pip_show
|
import jc.parsers.pip_show
|
||||||
result = jc.parsers.pip_show.parse(pip_show_command_output)
|
result = jc.parsers.pip_show.parse(pip_show_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -51,7 +64,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`pip show` command parser'
|
description = '`pip show` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -64,7 +78,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -74,23 +88,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": string,
|
|
||||||
"version": string,
|
|
||||||
"summary": string,
|
|
||||||
"home_page": string,
|
|
||||||
"author": string,
|
|
||||||
"author_email": string,
|
|
||||||
"license": string,
|
|
||||||
"location": string,
|
|
||||||
"requires": string,
|
|
||||||
"required_by": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# no further processing
|
# no further processing
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -140,4 +138,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,29 @@ Usage (module):
|
|||||||
import jc.parsers.ps
|
import jc.parsers.ps
|
||||||
result = jc.parsers.ps.parse(ps_command_output)
|
result = jc.parsers.ps.parse(ps_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -186,7 +206,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`ps` command parser'
|
description = '`ps` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -199,7 +220,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -209,29 +230,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# change key name '%cpu' to 'cpu_percent'
|
# change key name '%cpu' to 'cpu_percent'
|
||||||
@ -301,4 +300,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,26 @@ Usage (module):
|
|||||||
import jc.parsers.route
|
import jc.parsers.route
|
||||||
result = jc.parsers.route.parse(route_command_output)
|
result = jc.parsers.route.parse(route_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -93,7 +110,8 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.4'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.5'
|
||||||
description = '`route` command parser'
|
description = '`route` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -106,7 +124,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -116,26 +134,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['metric', 'ref', 'use', 'mss', 'window', 'irtt']
|
int_list = ['metric', 'ref', 'use', 'mss', 'window', 'irtt']
|
||||||
@ -207,4 +206,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
Works with `rpm -qi [package]` or `rpm -qia`.
|
Works with `rpm -qi [package]` or `rpm -qia`.
|
||||||
|
|
||||||
The `build_epoch` calculated timestamp field is naive (i.e. based on the local time of the system the parser is run on)
|
The `..._epoch` calculated timestamp fields are naive (i.e. based on the local time of the system the parser is run on)
|
||||||
|
|
||||||
The `build_epoch_utc` calculated timestamp field is timezone-aware and is only available if the timezone field is UTC.
|
The `..._epoch_utc` calculated timestamp fields are timezone-aware and is only available if the timezone field is UTC.
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
$ rpm -qia | jc --rpm_qi
|
$ rpm -qia | jc --rpm-qi
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
@ -19,13 +19,39 @@ Usage (module):
|
|||||||
import jc.parsers.rpm_qi
|
import jc.parsers.rpm_qi
|
||||||
result = jc.parsers.rpm_qi.parse(rpm_qi_command_output)
|
result = jc.parsers.rpm_qi.parse(rpm_qi_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"name": string,
|
||||||
|
"epoch": integer,
|
||||||
|
"version": string,
|
||||||
|
"release": string,
|
||||||
|
"architecture": string,
|
||||||
|
"install_date": string,
|
||||||
|
"install_date_epoch": integer, # naive timestamp
|
||||||
|
"install_date_epoch_utc": integer, # Aware timestamp if timezone is UTC
|
||||||
|
"group": string,
|
||||||
|
"size": integer,
|
||||||
|
"license": string,
|
||||||
|
"signature": string,
|
||||||
|
"source_rpm": string,
|
||||||
|
"build_date": string,
|
||||||
|
"build_epoch": integer, # naive timestamp
|
||||||
|
"build_epoch_utc": integer, # Aware timestamp if timezone is UTC
|
||||||
|
"build_host": string,
|
||||||
|
"relocations": string,
|
||||||
|
"packager": string,
|
||||||
|
"vendor": string,
|
||||||
|
"url": string,
|
||||||
|
"summary": string,
|
||||||
|
"description": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
$ rpm -qia | jc --rpm_qi -p
|
$ rpm -qia | jc --rpm-qi -p
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "make",
|
"name": "make",
|
||||||
@ -46,9 +72,11 @@ Examples:
|
|||||||
"vendor": "CentOS",
|
"vendor": "CentOS",
|
||||||
"url": "http://www.gnu.org/software/make/",
|
"url": "http://www.gnu.org/software/make/",
|
||||||
"summary": "A GNU tool which simplifies the build process for users",
|
"summary": "A GNU tool which simplifies the build process for users",
|
||||||
"description": "A GNU tool for controlling the generation of executables and other non-source...",
|
"description": "A GNU tool for controlling the generation of executables and other...",
|
||||||
"build_epoch": 1565311645,
|
"build_epoch": 1565311645,
|
||||||
"build_epoch_utc": null
|
"build_epoch_utc": null,
|
||||||
|
"install_date_epoch": 1571242902,
|
||||||
|
"install_date_epoch_utc": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "kbd-legacy",
|
"name": "kbd-legacy",
|
||||||
@ -68,14 +96,16 @@ Examples:
|
|||||||
"vendor": "CentOS",
|
"vendor": "CentOS",
|
||||||
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
|
"url": "http://ftp.altlinux.org/pub/people/legion/kbd",
|
||||||
"summary": "Legacy data for kbd package",
|
"summary": "Legacy data for kbd package",
|
||||||
"description": "The kbd-legacy package contains original keymaps for kbd package. Please note...",
|
"description": "The kbd-legacy package contains original keymaps for kbd package...",
|
||||||
"build_epoch": 1540939200,
|
"build_epoch": 1540939200,
|
||||||
"build_epoch_utc": null
|
"build_epoch_utc": null,
|
||||||
|
"install_date_epoch": 1565891588,
|
||||||
|
"install_date_epoch_utc": null
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
|
|
||||||
$ rpm -qia | jc --rpm_qi -p -r
|
$ rpm -qia | jc --rpm-qi -p -r
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "make",
|
"name": "make",
|
||||||
@ -125,7 +155,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`rpm -qi` command parser'
|
description = '`rpm -qi` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -139,7 +170,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -149,33 +180,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": string,
|
|
||||||
"epoch": integer,
|
|
||||||
"version": string,
|
|
||||||
"release": string,
|
|
||||||
"architecture": string,
|
|
||||||
"install_date": string,
|
|
||||||
"group": string,
|
|
||||||
"size": integer,
|
|
||||||
"license": string,
|
|
||||||
"signature": string,
|
|
||||||
"source_rpm": string,
|
|
||||||
"build_date": string,
|
|
||||||
"build_epoch": integer, # naive timestamp
|
|
||||||
"build_epoch_utc": integer, # Aware timestamp if timezone is UTC
|
|
||||||
"build_host": string,
|
|
||||||
"relocations": string,
|
|
||||||
"packager": string,
|
|
||||||
"vendor": string,
|
|
||||||
"url": string,
|
|
||||||
"summary": string,
|
|
||||||
"description": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
|
|
||||||
@ -192,6 +197,11 @@ def process(proc_data):
|
|||||||
entry['build_epoch'] = timestamp.naive
|
entry['build_epoch'] = timestamp.naive
|
||||||
entry['build_epoch_utc'] = timestamp.utc
|
entry['build_epoch_utc'] = timestamp.utc
|
||||||
|
|
||||||
|
if 'install_date' in entry:
|
||||||
|
timestamp = jc.utils.timestamp(entry['install_date'])
|
||||||
|
entry['install_date_epoch'] = timestamp.naive
|
||||||
|
entry['install_date_epoch_utc'] = timestamp.utc
|
||||||
|
|
||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
@ -255,4 +265,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,20 @@ Usage (module):
|
|||||||
import jc.parsers.shadow
|
import jc.parsers.shadow
|
||||||
result = jc.parsers.shadow.parse(shadow_file_output)
|
result = jc.parsers.shadow.parse(shadow_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"username": string,
|
||||||
|
"password": string,
|
||||||
|
"last_changed": integer,
|
||||||
|
"minimum": integer,
|
||||||
|
"maximum": integer,
|
||||||
|
"warn": integer,
|
||||||
|
"inactive": integer,
|
||||||
|
"expire": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -89,7 +100,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`/etc/shadow` file parser'
|
description = '`/etc/shadow` file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -102,7 +114,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -112,20 +124,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"username": string,
|
|
||||||
"password": string,
|
|
||||||
"last_changed": integer,
|
|
||||||
"minimum": integer,
|
|
||||||
"maximum": integer,
|
|
||||||
"warn": integer,
|
|
||||||
"inactive": integer,
|
|
||||||
"expire": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['last_changed', 'minimum', 'maximum', 'warn', 'inactive', 'expire']
|
int_list = ['last_changed', 'minimum', 'maximum', 'warn', 'inactive', 'expire']
|
||||||
@ -185,4 +184,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
"""jc - JSON CLI output utility `ss` command output parser
|
"""jc - JSON CLI output utility `ss` command output parser
|
||||||
|
|
||||||
|
Extended information options like -e and -p are not supported and may cause parsing irregularities.
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
$ ss | jc --ss
|
$ ss | jc --ss
|
||||||
@ -13,13 +15,29 @@ Usage (module):
|
|||||||
import jc.parsers.ss
|
import jc.parsers.ss
|
||||||
result = jc.parsers.ss.parse(ss_command_output)
|
result = jc.parsers.ss.parse(ss_command_output)
|
||||||
|
|
||||||
Limitations:
|
Schema:
|
||||||
|
|
||||||
Extended information options like -e and -p are not supported and may cause parsing irregularities
|
Information from https://www.cyberciti.biz/files/ss.html used to define field names
|
||||||
|
|
||||||
Compatibility:
|
[
|
||||||
|
{
|
||||||
'linux'
|
"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:
|
||||||
|
|
||||||
@ -260,7 +278,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`ss` command parser'
|
description = '`ss` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -273,7 +292,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -283,29 +302,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
Information from https://www.cyberciti.biz/files/ss.html used to define field names
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['recv_q', 'send_q', 'pid']
|
int_list = ['recv_q', 'send_q', 'pid']
|
||||||
@ -419,4 +416,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,43 @@ Usage (module):
|
|||||||
import jc.parsers.stat
|
import jc.parsers.stat
|
||||||
result = jc.parsers.stat.parse(stat_command_output)
|
result = jc.parsers.stat.parse(stat_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -134,7 +168,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.6'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.7'
|
||||||
description = '`stat` command parser'
|
description = '`stat` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -147,7 +182,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -157,43 +192,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['size', 'blocks', 'io_blocks', 'inode', 'links', 'uid', 'gid', 'unix_device', 'rdev', 'block_size']
|
int_list = ['size', 'blocks', 'io_blocks', 'inode', 'links', 'uid', 'gid', 'unix_device', 'rdev', 'block_size']
|
||||||
@ -349,4 +348,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,13 @@ Usage (module):
|
|||||||
import jc.parsers.sysctl
|
import jc.parsers.sysctl
|
||||||
result = jc.parsers.sysctl.parse(sysctl_command_output)
|
result = jc.parsers.sysctl.parse(sysctl_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
{
|
||||||
|
"key1": string/integer/float, # best guess based on value
|
||||||
|
"key2": string/integer/float,
|
||||||
|
"key3": string/integer/float
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -49,7 +53,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`sysctl` command parser'
|
description = '`sysctl` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -63,7 +68,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -73,13 +78,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the schema.
|
||||||
|
|
||||||
{
|
|
||||||
"foo": string/integer/float, # best guess based on value
|
|
||||||
"bar": string/integer/float,
|
|
||||||
"baz": string/integer/float
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
for key in proc_data:
|
for key in proc_data:
|
||||||
try:
|
try:
|
||||||
@ -158,4 +157,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,17 @@ Usage (module):
|
|||||||
import jc.parsers.systemctl
|
import jc.parsers.systemctl
|
||||||
result = jc.parsers.systemctl.parse(systemctl_command_output)
|
result = jc.parsers.systemctl.parse(systemctl_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"unit": string,
|
||||||
|
"load": string,
|
||||||
|
"active": string,
|
||||||
|
"sub": string,
|
||||||
|
"description": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -49,7 +57,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`systemctl` command parser'
|
description = '`systemctl` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -62,7 +71,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -72,17 +81,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"unit": string,
|
|
||||||
"load": string,
|
|
||||||
"active": string,
|
|
||||||
"sub": string,
|
|
||||||
"description": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
# nothing more to process
|
# nothing more to process
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -133,4 +132,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,16 @@ Usage (module):
|
|||||||
import jc.parsers.systemctl_lj
|
import jc.parsers.systemctl_lj
|
||||||
result = jc.parsers.systemctl_lj.parse(systemctl_lj_command_output)
|
result = jc.parsers.systemctl_lj.parse(systemctl_lj_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"job": integer,
|
||||||
|
"unit": string,
|
||||||
|
"type": string,
|
||||||
|
"state": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -62,13 +69,13 @@ Examples:
|
|||||||
"state": "waiting"
|
"state": "waiting"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import jc.utils
|
import jc.utils
|
||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`systemctl list-jobs` command parser'
|
description = '`systemctl list-jobs` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -81,7 +88,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -91,16 +98,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"job": integer,
|
|
||||||
"unit": string,
|
|
||||||
"type": string,
|
|
||||||
"state": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['job']
|
int_list = ['job']
|
||||||
@ -161,4 +159,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,15 @@ Usage (module):
|
|||||||
import jc.parsers.systemctl_ls
|
import jc.parsers.systemctl_ls
|
||||||
result = jc.parsers.systemctl_ls.parse(systemctl_ls_command_output)
|
result = jc.parsers.systemctl_ls.parse(systemctl_ls_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"listen": string,
|
||||||
|
"unit": string,
|
||||||
|
"activates": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -43,7 +49,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`systemctl list-sockets` command parser'
|
description = '`systemctl list-sockets` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -56,7 +63,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -66,15 +73,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"listen": string,
|
|
||||||
"unit": string,
|
|
||||||
"activates": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
# nothing more to process
|
# nothing more to process
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -125,4 +124,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,14 @@ Usage (module):
|
|||||||
import jc.parsers.systemctl_luf
|
import jc.parsers.systemctl_luf
|
||||||
result = jc.parsers.systemctl_luf.parse(systemctl_luf_command_output)
|
result = jc.parsers.systemctl_luf.parse(systemctl_luf_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"unit_file": string,
|
||||||
|
"state": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -40,7 +45,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`systemctl list-unit-files` command parser'
|
description = '`systemctl list-unit-files` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -53,7 +59,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -63,14 +69,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"unit_file": string,
|
|
||||||
"state": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
# nothing more to process
|
# nothing more to process
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -122,4 +121,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,47 @@ Usage (module):
|
|||||||
import jc.parsers.time
|
import jc.parsers.time
|
||||||
result = jc.parsers.time.parse(time_command_output)
|
result = jc.parsers.time.parse(time_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
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, # aka File system inputs
|
||||||
|
"block_output_operations": integer, # aka File system outputs
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -84,7 +122,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`/usr/bin/time` command parser'
|
description = '`/usr/bin/time` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -97,7 +136,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -107,47 +146,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the schema.
|
||||||
|
|
||||||
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, # aka File system inputs
|
|
||||||
"block_output_operations": integer, # aka File system outputs
|
|
||||||
"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
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
if 'command_being_timed' in proc_data:
|
if 'command_being_timed' in proc_data:
|
||||||
proc_data['command_being_timed'] = proc_data['command_being_timed'][1:-1]
|
proc_data['command_being_timed'] = proc_data['command_being_timed'][1:-1]
|
||||||
@ -330,4 +329,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
"""jc - JSON CLI output utility `timedatectl` command output parser
|
"""jc - JSON CLI output utility `timedatectl` command output parser
|
||||||
|
|
||||||
The `epoch_utc` calculated timestamp field is timezone-aware and is only available if the universal_time field is available.
|
The `epoch_utc` calculated timestamp field is timezone-aware and is only available if the `universal_time` field is available.
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
@ -15,9 +15,21 @@ Usage (module):
|
|||||||
import jc.parsers.timedatectl
|
import jc.parsers.timedatectl
|
||||||
result = jc.parsers.timedatectl.parse(timedatectl_command_output)
|
result = jc.parsers.timedatectl.parse(timedatectl_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
{
|
||||||
|
"local_time": string,
|
||||||
|
"universal_time": string,
|
||||||
|
"epoch_utc": integer, # timezone-aware timestamp
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -50,7 +62,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`timedatectl status` command parser'
|
description = '`timedatectl status` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -64,7 +77,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -74,21 +87,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the schema.
|
||||||
|
|
||||||
{
|
|
||||||
"local_time": string,
|
|
||||||
"universal_time": string,
|
|
||||||
"epoch_utc": integer, # timezone-aware timestamp
|
|
||||||
"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
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
# boolean changes
|
# boolean changes
|
||||||
bool_list = ['ntp_enabled', 'ntp_synchronized', 'rtc_in_local_tz', 'dst_active',
|
bool_list = ['ntp_enabled', 'ntp_synchronized', 'rtc_in_local_tz', 'dst_active',
|
||||||
@ -138,4 +137,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,24 @@ Usage (module):
|
|||||||
import jc.parsers.tracepath
|
import jc.parsers.tracepath
|
||||||
result = jc.parsers.tracepath.parse(tracepath_command_output)
|
result = jc.parsers.tracepath.parse(tracepath_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -110,14 +125,14 @@ Examples:
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import re
|
import re
|
||||||
import jc.utils
|
import jc.utils
|
||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`tracepath` and `tracepath6` command parser'
|
description = '`tracepath` and `tracepath6` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -130,7 +145,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -140,24 +155,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
int_list = ['pmtu', 'forward_hops', 'return_hops', 'ttl', 'asymmetric_difference']
|
int_list = ['pmtu', 'forward_hops', 'return_hops', 'ttl', 'asymmetric_difference']
|
||||||
float_list = ['reply_ms']
|
float_list = ['reply_ms']
|
||||||
@ -259,4 +257,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -19,9 +19,26 @@ Usage (module):
|
|||||||
import jc.parsers.traceroute
|
import jc.parsers.traceroute
|
||||||
result = jc.parsers.traceroute.parse(traceroute_command_output)
|
result = jc.parsers.traceroute.parse(traceroute_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
{
|
||||||
|
"destination_ip": string,
|
||||||
|
"destination_name": string,
|
||||||
|
"hops": [
|
||||||
|
{
|
||||||
|
"hop": integer,
|
||||||
|
"probes": [
|
||||||
|
{
|
||||||
|
"annotation": string,
|
||||||
|
"asn": integer,
|
||||||
|
"ip": string,
|
||||||
|
"name": string,
|
||||||
|
"rtt": float
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -101,7 +118,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.1'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.2'
|
||||||
description = '`traceroute` and `traceroute6` command parser'
|
description = '`traceroute` and `traceroute6` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -151,7 +169,7 @@ RE_PROBE_ASN = re.compile(r'\[AS(\d+)\]')
|
|||||||
RE_PROBE_RTT_ANNOTATION = re.compile(r'(?:(\d+(?:\.?\d+)?)\s+ms|(\s+\*\s+))\s*(!\S*)?')
|
RE_PROBE_RTT_ANNOTATION = re.compile(r'(?:(\d+(?:\.?\d+)?)\s+ms|(\s+\*\s+))\s*(!\S*)?')
|
||||||
|
|
||||||
|
|
||||||
class Traceroute(object):
|
class _Traceroute(object):
|
||||||
def __init__(self, dest_name, dest_ip):
|
def __init__(self, dest_name, dest_ip):
|
||||||
self.dest_name = dest_name
|
self.dest_name = dest_name
|
||||||
self.dest_ip = dest_ip
|
self.dest_ip = dest_ip
|
||||||
@ -167,7 +185,7 @@ class Traceroute(object):
|
|||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
class Hop(object):
|
class _Hop(object):
|
||||||
def __init__(self, idx):
|
def __init__(self, idx):
|
||||||
self.idx = idx # Hop count, starting at 1 (usually)
|
self.idx = idx # Hop count, starting at 1 (usually)
|
||||||
self.probes = [] # Series of Probe instances
|
self.probes = [] # Series of Probe instances
|
||||||
@ -194,7 +212,7 @@ class Hop(object):
|
|||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
class Probe(object):
|
class _Probe(object):
|
||||||
def __init__(self, name=None, ip=None, asn=None, rtt=None, annotation=None):
|
def __init__(self, name=None, ip=None, asn=None, rtt=None, annotation=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.ip = ip
|
self.ip = ip
|
||||||
@ -216,7 +234,7 @@ class Probe(object):
|
|||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
def loads(data):
|
def _loads(data):
|
||||||
lines = data.splitlines()
|
lines = data.splitlines()
|
||||||
|
|
||||||
# Get headers
|
# Get headers
|
||||||
@ -227,7 +245,7 @@ def loads(data):
|
|||||||
dest_ip = match_dest.group(2)
|
dest_ip = match_dest.group(2)
|
||||||
|
|
||||||
# The Traceroute node is the root of the tree
|
# The Traceroute node is the root of the tree
|
||||||
traceroute = Traceroute(dest_name, dest_ip)
|
traceroute = _Traceroute(dest_name, dest_ip)
|
||||||
|
|
||||||
# Parse the remaining lines, they should be only hops/probes
|
# Parse the remaining lines, they should be only hops/probes
|
||||||
for line in lines[1:]:
|
for line in lines[1:]:
|
||||||
@ -243,7 +261,7 @@ def loads(data):
|
|||||||
hop_index = None
|
hop_index = None
|
||||||
|
|
||||||
if hop_index is not None:
|
if hop_index is not None:
|
||||||
hop = Hop(hop_index)
|
hop = _Hop(hop_index)
|
||||||
traceroute.add_hop(hop)
|
traceroute.add_hop(hop)
|
||||||
|
|
||||||
hop_string = hop_match.group(2)
|
hop_string = hop_match.group(2)
|
||||||
@ -279,7 +297,7 @@ def loads(data):
|
|||||||
|
|
||||||
probe_annotation = probe_rtt_annotation[2] or None
|
probe_annotation = probe_rtt_annotation[2] or None
|
||||||
|
|
||||||
probe = Probe(
|
probe = _Probe(
|
||||||
name=probe_name,
|
name=probe_name,
|
||||||
ip=probe_ip,
|
ip=probe_ip,
|
||||||
asn=probe_asn,
|
asn=probe_asn,
|
||||||
@ -300,7 +318,7 @@ class ParseError(Exception):
|
|||||||
|
|
||||||
########################################################################################
|
########################################################################################
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -310,26 +328,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured to conform to the schema.
|
||||||
|
|
||||||
{
|
|
||||||
"destination_ip": string,
|
|
||||||
"destination_name": string,
|
|
||||||
"hops": [
|
|
||||||
{
|
|
||||||
"hop": integer,
|
|
||||||
"probes": [
|
|
||||||
{
|
|
||||||
"annotation": string,
|
|
||||||
"asn": integer,
|
|
||||||
"ip": string,
|
|
||||||
"name": string,
|
|
||||||
"rtt": float
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
int_list = ['hop', 'asn']
|
int_list = ['hop', 'asn']
|
||||||
float_list = ['rtt']
|
float_list = ['rtt']
|
||||||
@ -408,7 +407,7 @@ def parse(data, raw=False, quiet=False):
|
|||||||
|
|
||||||
data = '\n'.join(new_data)
|
data = '\n'.join(new_data)
|
||||||
|
|
||||||
tr = loads(data)
|
tr = _loads(data)
|
||||||
hops = tr.hops
|
hops = tr.hops
|
||||||
hops_list = []
|
hops_list = []
|
||||||
|
|
||||||
@ -441,4 +440,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -15,9 +15,18 @@ Usage (module):
|
|||||||
import jc.parsers.uname
|
import jc.parsers.uname
|
||||||
result = jc.parsers.uname.parse(uname_command_output)
|
result = jc.parsers.uname.parse(uname_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'freebsd'
|
{
|
||||||
|
"kernel_name": string,
|
||||||
|
"node_name": string,
|
||||||
|
"kernel_release": string,
|
||||||
|
"operating_system": string,
|
||||||
|
"hardware_platform": string,
|
||||||
|
"processor": string,
|
||||||
|
"machine": string,
|
||||||
|
"kernel_version": string
|
||||||
|
}
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -37,7 +46,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.4'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.5'
|
||||||
description = '`uname -a` command parser'
|
description = '`uname -a` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -54,7 +64,7 @@ class ParseError(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -64,18 +74,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the schema.
|
||||||
|
|
||||||
{
|
|
||||||
"kernel_name": string,
|
|
||||||
"node_name": string,
|
|
||||||
"kernel_release": string,
|
|
||||||
"operating_system": string,
|
|
||||||
"hardware_platform": string,
|
|
||||||
"processor": string,
|
|
||||||
"machine": string,
|
|
||||||
"kernel_version": string
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
# nothing to process
|
# nothing to process
|
||||||
return proc_data
|
return proc_data
|
||||||
@ -138,4 +137,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,67 @@ Usage (module):
|
|||||||
import jc.parsers.upower
|
import jc.parsers.upower
|
||||||
result = jc.parsers.upower.parse(upower_command_output)
|
result = jc.parsers.upower.parse(upower_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux'
|
[
|
||||||
|
{
|
||||||
|
"type": string,
|
||||||
|
"device_name": string,
|
||||||
|
"native_path": string,
|
||||||
|
"power_supply": boolean,
|
||||||
|
"updated": string,
|
||||||
|
"updated_epoch": integer, # null if date-time conversion fails
|
||||||
|
"updated_epoch_utc": integer, # null if date-time conversion fails
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -135,7 +193,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`upower` command parser'
|
description = '`upower` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -149,7 +208,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -159,67 +218,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"type": string,
|
|
||||||
"device_name": string,
|
|
||||||
"native_path": string,
|
|
||||||
"power_supply": boolean,
|
|
||||||
"updated": string,
|
|
||||||
"updated_epoch": integer, # null if date-time conversion fails
|
|
||||||
"updated_epoch_utc": integer, # null if date-time conversion fails
|
|
||||||
"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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
# time conversions
|
# time conversions
|
||||||
@ -414,4 +413,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,23 @@ Usage (module):
|
|||||||
import jc.parsers.uptime
|
import jc.parsers.uptime
|
||||||
result = jc.parsers.uptime.parse(uptime_command_output)
|
result = jc.parsers.uptime.parse(uptime_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -50,7 +64,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`uptime` command parser'
|
description = '`uptime` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -63,7 +78,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -73,23 +88,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary. Structured data with the following schema:
|
Dictionary. Structured data to conform to the 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
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
if 'time' in proc_data:
|
if 'time' in proc_data:
|
||||||
time_list = proc_data['time'].split(':')
|
time_list = proc_data['time'].split(':')
|
||||||
@ -186,4 +185,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,20 @@ Usage (module):
|
|||||||
import jc.parsers.w
|
import jc.parsers.w
|
||||||
result = jc.parsers.w.parse(w_command_output)
|
result = jc.parsers.w.parse(w_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"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:
|
||||||
|
|
||||||
@ -92,7 +103,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = '`w` command parser'
|
description = '`w` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -105,7 +117,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -115,20 +127,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"user": string, # '-'' = null
|
|
||||||
"tty": string, # '-'' = null
|
|
||||||
"from": string, # '-'' = null
|
|
||||||
"login_at": string, # '-'' = null
|
|
||||||
"idle": string, # '-'' = null
|
|
||||||
"jcpu": string,
|
|
||||||
"pcpu": string,
|
|
||||||
"what": string # '-'' = null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
null_list = ['user', 'tty', 'from', 'login_at', 'idle', 'what']
|
null_list = ['user', 'tty', 'from', 'login_at', 'idle', 'what']
|
||||||
@ -196,4 +195,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -13,9 +13,16 @@ Usage (module):
|
|||||||
import jc.parsers.wc
|
import jc.parsers.wc
|
||||||
result = jc.parsers.wc.parse(wc_command_output)
|
result = jc.parsers.wc.parse(wc_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"filename": string,
|
||||||
|
"lines": integer,
|
||||||
|
"words": integer,
|
||||||
|
"characters": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -46,7 +53,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.0'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.1'
|
||||||
description = '`wc` command parser'
|
description = '`wc` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -59,7 +67,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -69,16 +77,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"filename": string,
|
|
||||||
"lines": integer,
|
|
||||||
"words": integer,
|
|
||||||
"characters": integer
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@ -126,4 +125,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -17,9 +17,22 @@ Usage (module):
|
|||||||
import jc.parsers.who
|
import jc.parsers.who
|
||||||
result = jc.parsers.who.parse(who_command_output)
|
result = jc.parsers.who.parse(who_command_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'aix', 'freebsd'
|
[
|
||||||
|
{
|
||||||
|
"user": string,
|
||||||
|
"event": string,
|
||||||
|
"writeable_tty": string,
|
||||||
|
"tty": string,
|
||||||
|
"time": string,
|
||||||
|
"epoch": integer, # naive timestamp. null if time cannot be converted
|
||||||
|
"idle": string,
|
||||||
|
"pid": integer,
|
||||||
|
"from": string,
|
||||||
|
"comment": string
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -119,7 +132,8 @@ import jc.utils
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.2'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.3'
|
||||||
description = '`who` command parser'
|
description = '`who` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -133,7 +147,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -143,22 +157,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Structured data with the following schema:
|
List of Dictionaries. Structured data to conform to the schema.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"user": string,
|
|
||||||
"event": string,
|
|
||||||
"writeable_tty": string,
|
|
||||||
"tty": string,
|
|
||||||
"time": string,
|
|
||||||
"epoch": integer, # naive timestamp. null if time cannot be converted
|
|
||||||
"idle": string,
|
|
||||||
"pid": integer,
|
|
||||||
"from": string,
|
|
||||||
"comment": string
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
int_list = ['pid']
|
int_list = ['pid']
|
||||||
@ -302,4 +301,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,15 @@ Usage (module):
|
|||||||
import jc.parsers.xml
|
import jc.parsers.xml
|
||||||
result = jc.parsers.xml.parse(xml_file_output)
|
result = jc.parsers.xml.parse(xml_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
XML Document converted to a Dictionary
|
||||||
|
See https://github.com/martinblech/xmltodict for details
|
||||||
|
|
||||||
|
{
|
||||||
|
"key1": string/object,
|
||||||
|
"key2": string/object
|
||||||
|
}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -70,7 +76,8 @@ except Exception:
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = 'XML file parser'
|
description = 'XML file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -83,7 +90,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -93,12 +100,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
Dictionary representing an XML document:
|
Dictionary representing an XML document.
|
||||||
|
|
||||||
{
|
|
||||||
XML Document converted to a Dictionary
|
|
||||||
See https://github.com/martinblech/xmltodict for details
|
|
||||||
}
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# No further processing
|
# No further processing
|
||||||
@ -131,4 +133,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
@ -9,9 +9,17 @@ Usage (module):
|
|||||||
import jc.parsers.yaml
|
import jc.parsers.yaml
|
||||||
result = jc.parsers.yaml.parse(yaml_file_output)
|
result = jc.parsers.yaml.parse(yaml_file_output)
|
||||||
|
|
||||||
Compatibility:
|
Schema:
|
||||||
|
|
||||||
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
|
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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@ -82,7 +90,8 @@ except Exception:
|
|||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
version = '1.3'
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.4'
|
||||||
description = 'YAML file parser'
|
description = 'YAML file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -95,7 +104,7 @@ class info():
|
|||||||
__version__ = info.version
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
@ -105,14 +114,7 @@ def process(proc_data):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
List of Dictionaries. Each dictionary represents a YAML document:
|
List of Dictionaries. Each dictionary represents a YAML document.
|
||||||
|
|
||||||
[
|
|
||||||
{
|
|
||||||
YAML Document converted to a Dictionary
|
|
||||||
See https://pypi.org/project/ruamel.yaml for details
|
|
||||||
}
|
|
||||||
]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# No further processing
|
# No further processing
|
||||||
@ -153,4 +155,4 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if raw:
|
if raw:
|
||||||
return raw_output
|
return raw_output
|
||||||
else:
|
else:
|
||||||
return process(raw_output)
|
return _process(raw_output)
|
||||||
|
BIN
man/jc.1.gz
BIN
man/jc.1.gz
Binary file not shown.
@ -20,4 +20,6 @@ with open('man/jc.1', 'rb') as f_in:
|
|||||||
with gzip.open('man/jc.1.gz', 'wb') as f_out:
|
with gzip.open('man/jc.1.gz', 'wb') as f_out:
|
||||||
shutil.copyfileobj(f_in, f_out)
|
shutil.copyfileobj(f_in, f_out)
|
||||||
|
|
||||||
|
shutil.copyfile('man/jc.1.gz', 'jc/man/jc.1.gz')
|
||||||
|
|
||||||
os.remove('man/jc.1')
|
os.remove('man/jc.1')
|
||||||
|
2
setup.py
2
setup.py
@ -5,7 +5,7 @@ with open('README.md', 'r') as f:
|
|||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name='jc',
|
name='jc',
|
||||||
version='1.15.0',
|
version='1.15.1',
|
||||||
author='Kelly Brazil',
|
author='Kelly Brazil',
|
||||||
author_email='kellyjonbrazil@gmail.com',
|
author_email='kellyjonbrazil@gmail.com',
|
||||||
description='Converts the output of popular command-line tools and file-types to JSON.',
|
description='Converts the output of popular command-line tools and file-types to JSON.',
|
||||||
|
@ -40,7 +40,7 @@ debug - show traceback (\fB-dd\fP for verbose traceback)
|
|||||||
.TP
|
.TP
|
||||||
.B
|
.B
|
||||||
\fB-h\fP
|
\fB-h\fP
|
||||||
help
|
help - use `-h --parser_name` for parser documentation
|
||||||
.TP
|
.TP
|
||||||
.B
|
.B
|
||||||
\fB-m\fP
|
\fB-m\fP
|
||||||
@ -105,6 +105,12 @@ or using the magic syntax:
|
|||||||
|
|
||||||
jc \fB-p\fP ls \fB-al\fP
|
jc \fB-p\fP ls \fB-al\fP
|
||||||
|
|
||||||
|
|
||||||
|
For parser documentation:
|
||||||
|
|
||||||
|
|
||||||
|
jc \fB-h\fP \fB--ls\fP
|
||||||
|
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
{{ jc.author }} ({{ jc.author_email }})
|
{{ jc.author }} ({{ jc.author_email }})
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ The JSON output can be compact (default) or pretty formatted with the `-p` optio
|
|||||||
### Options
|
### Options
|
||||||
- `-a` about `jc`. Prints information about `jc` and the parsers (in JSON, of course!)
|
- `-a` about `jc`. Prints information about `jc` and the parsers (in JSON, of course!)
|
||||||
- `-d` debug mode. Prints trace messages if parsing issues are encountered (use `-dd` for verbose debugging)
|
- `-d` debug mode. Prints trace messages if parsing issues are encountered (use `-dd` for verbose debugging)
|
||||||
- `-h` `jc` help
|
- `-h` `jc` help. Use `jc -h --parser_name` for parser documentation
|
||||||
- `-m` monochrome JSON output
|
- `-m` monochrome JSON output
|
||||||
- `-p` pretty format the JSON output
|
- `-p` pretty format the JSON output
|
||||||
- `-q` quiet mode. Suppresses parser warning messages
|
- `-q` quiet mode. Suppresses parser warning messages
|
||||||
|
2
tests/fixtures/centos-7.7/rpm-qai.json
vendored
2
tests/fixtures/centos-7.7/rpm-qai.json
vendored
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
[{"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 ID 24c6a8a7f4a80eb5","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 <http://bugs.centos.org>","vendor":"CentOS","url":"http://www.gnu.org/software/make/","summary":"A GNU tool which simplifies the build process for users","description":"A GNU tool for controlling the generation of executables and other non-source files of a program from the program's source files. Make allows users to build and install packages without any significant knowledge about the details of the build process. The details about how the program should be built are provided for make in the program's makefile.","build_epoch":1565311645,"build_epoch_utc":null}]
|
[{"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 ID 24c6a8a7f4a80eb5","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 <http://bugs.centos.org>","vendor":"CentOS","url":"http://www.gnu.org/software/make/","summary":"A GNU tool which simplifies the build process for users","description":"A GNU tool for controlling the generation of executables and other non-source files of a program from the program's source files. Make allows users to build and install packages without any significant knowledge about the details of the build process. The details about how the program should be built are provided for make in the program's makefile.","build_epoch":1565311645,"build_epoch_utc":null,"install_date_epoch":1571242902,"install_date_epoch_utc":null}]
|
||||||
|
@ -19,7 +19,13 @@ class MyTests(unittest.TestCase):
|
|||||||
'jc -p -r airport -I': 'airport -I | jc --airport -pr',
|
'jc -p -r airport -I': 'airport -I | jc --airport -pr',
|
||||||
'jc -prd airport -I': 'airport -I | jc --airport -prd',
|
'jc -prd airport -I': 'airport -I | jc --airport -prd',
|
||||||
'jc -p nonexistent command': 'nonexistent command',
|
'jc -p nonexistent command': 'nonexistent command',
|
||||||
'jc -ap': None
|
'jc -ap': None,
|
||||||
|
'jc -a arp -a': None,
|
||||||
|
'jc -v': None,
|
||||||
|
'jc -h': None,
|
||||||
|
'jc -h --arp': None,
|
||||||
|
'jc -h arp': None,
|
||||||
|
'jc -h arp -a': None
|
||||||
}
|
}
|
||||||
|
|
||||||
for command, expected_command in commands.items():
|
for command, expected_command in commands.items():
|
||||||
|
Reference in New Issue
Block a user