Skip to content

Commit

Permalink
fix zpool-status parser when there are no columnar values
Browse files Browse the repository at this point in the history
  • Loading branch information
kellyjonbrazil committed May 10, 2024
1 parent 8a3997c commit 5171378
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 9 deletions.
2 changes: 1 addition & 1 deletion docs/parsers/zpool_status.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,4 @@ Compatibility: linux, darwin, freebsd

Source: [`jc/parsers/zpool_status.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/zpool_status.py)

Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)
12 changes: 6 additions & 6 deletions jc/parsers/zpool_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@

class info():
"""Provides parser metadata (version, author, etc.)"""
version = '1.1'
version = '1.2'
description = '`zpool status` command parser'
author = 'Kelly Brazil'
author_email = 'kellyjonbrazil@gmail.com'
Expand Down Expand Up @@ -182,11 +182,11 @@ def _build_config_list(string: str) -> List[Dict]:

line_list = line.strip().split(maxsplit=5)
config_obj: Dict = {}
config_obj['name'] = line_list[0]
config_obj['state'] = line_list[1]
config_obj['read'] = line_list[2]
config_obj['write'] = line_list[3]
config_obj['checksum'] = line_list[4]
config_obj['name'] = line_list[0] if len(line_list) > 0 else None
config_obj['state'] = line_list[1] if len(line_list) > 1 else None
config_obj['read'] = line_list[2] if len(line_list) > 2 else None
config_obj['write'] = line_list[3] if len(line_list) > 3 else None
config_obj['checksum'] = line_list[4] if len(line_list) > 4 else None
if len(line_list) == 6:
config_obj['errors'] = line_list[5]
config_list.append(config_obj)
Expand Down
2 changes: 1 addition & 1 deletion man/jc.1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.TH jc 1 2024-05-02 1.25.3 "JSON Convert"
.TH jc 1 2024-05-10 1.25.3 "JSON Convert"
.SH NAME
\fBjc\fP \- JSON Convert JSONifies the output of many CLI tools, file-types,
and strings
Expand Down
1 change: 1 addition & 0 deletions tests/fixtures/generic/zpool-status-spares.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"pool":"tank","state":"ONLINE","scan":"scrub repaired 0B in <snip>","config":[{"name":"tank","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-0","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdh","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdk","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-1","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdl","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdj","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-2","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdn","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdm","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-3","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdg","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdi","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"spares","state":null,"read":null,"write":null,"checksum":null},{"name":"sdf","state":"AVAIL","read":null,"write":null,"checksum":null}],"errors":"No known data errors"}]
23 changes: 23 additions & 0 deletions tests/fixtures/generic/zpool-status-spares.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
pool: tank
state: ONLINE
scan: scrub repaired 0B in <snip>
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdh ONLINE 0 0 0
sdk ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sdl ONLINE 0 0 0
sdj ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
sdn ONLINE 0 0 0
sdm ONLINE 0 0 0
mirror-3 ONLINE 0 0 0
sdg ONLINE 0 0 0
sdi ONLINE 0 0 0
spares
sdf AVAIL

errors: No known data errors
14 changes: 13 additions & 1 deletion tests/test_zpool_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ def setUpClass(cls):
'fixtures/generic/zpool-status-v3.json'),
'zpool_status4': (
'fixtures/generic/zpool-status-v4.out',
'fixtures/generic/zpool-status-v4.json')
'fixtures/generic/zpool-status-v4.json'),
'zpool_status_spares': (
'fixtures/generic/zpool-status-spares.out',
'fixtures/generic/zpool-status-spares.json')
}

for file, filepaths in fixtures.items():
Expand Down Expand Up @@ -78,6 +81,15 @@ def test_zpool_status_v_with_tabs(self):
self.f_json['zpool_status4']
)

def test_zpool_status_spares(self):
"""
Test 'zpool status' with spares section
"""
self.assertEqual(
parse(self.f_in['zpool_status_spares'], quiet=True),
self.f_json['zpool_status_spares']
)


if __name__ == '__main__':
unittest.main()

0 comments on commit 5171378

Please sign in to comment.