diff --git a/CHANGELOG b/CHANGELOG index d2c15c74..aba657d9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ jc changelog -20260306 v1.25.7 +20260309 v1.25.7 +- Enhance `rsync` and `rsync-s` parsers to add `--stats` or `--info=stats[1-3]` fields - Fix `proc-pid-smaps` proc parser when unknown VmFlags are output - Fix `iptables` command parser when Target is blank and verbose output is used diff --git a/jc/parsers/rsync.py b/jc/parsers/rsync.py index 195aae77..cee983b3 100644 --- a/jc/parsers/rsync.py +++ b/jc/parsers/rsync.py @@ -4,6 +4,8 @@ Supports the `-i` or `--itemize-changes` options with all levels of verbosity. This parser will process the `STDOUT` output or a log file generated with the `--log-file` option. +The `--stats` or `--info=stats[1-3]` options are also supported. + Usage (cli): $ rsync -i -a source/ dest | jc --rsync @@ -37,7 +39,21 @@ Schema: "false_alarms": integer, "data": integer, "bytes_sec": float, - "speedup": float + "speedup": float, + "total_files": integer, + "regular_files": integer, + "dir_files": integer, + "total_created_files": integer, + "created_regular_files": integer, + "created_dir_files": integer, + "deleted_files": integer, + "transferred_files": integer, + "transferred_file_size": integer, + "literal_data": integer, + "matched_data": integer, + "file_list_size": integer, + "file_list_generation_time": float, + "file_list_transfer_time": float, }, "files": [ { @@ -62,6 +78,8 @@ Schema: } ] + Size values are in bytes. + [0] 'file sent', 'file received', 'local change or creation', 'hard link', 'not updated', 'message' [1] 'file', 'directory', 'symlink', 'device', 'special file' @@ -137,7 +155,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.2' + version = '1.3' description = '`rsync` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -163,10 +181,16 @@ def _process(proc_data: List[Dict]) -> List[Dict]: """ int_list = { 'process', 'sent', 'received', 'total_size', 'matches', 'hash_hits', - 'false_alarms', 'data' + 'false_alarms', 'data', 'total_files', 'regular_files', 'dir_files', + 'total_created_files', 'created_regular_files', 'created_dir_files', + 'deleted_files', 'transferred_files', 'transferred_file_size', + 'literal_data', 'matched_data', 'file_list_size' } - float_list = {'bytes_sec', 'speedup'} + float_list = { + 'bytes_sec', 'speedup', 'file_list_generation_time', + 'file_list_transfer_time' + } for item in proc_data: for key in item['summary']: @@ -338,6 +362,17 @@ def parse( stat2_line_log_v_re = re.compile(r'(?P\d\d\d\d/\d\d/\d\d)\s+(?P