mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-07-13 01:20:24 +02:00
better header row detection
This commit is contained in:
@ -121,12 +121,16 @@ Examples:
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
|
import re
|
||||||
import jc.utils
|
import jc.utils
|
||||||
|
|
||||||
|
PROCS_HEADER_RE = re.compile(r'^-*procs-* ')
|
||||||
|
DISK_HEADER_RE = re.compile(r'^-*disk-* ')
|
||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
"""Provides parser metadata (version, author, etc.)"""
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
version = '1.3'
|
version = '1.4'
|
||||||
description = '`vmstat` command parser'
|
description = '`vmstat` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -203,18 +207,18 @@ def parse(data, raw=False, quiet=False):
|
|||||||
for line in filter(None, data.splitlines()):
|
for line in filter(None, data.splitlines()):
|
||||||
|
|
||||||
# detect output type
|
# detect output type
|
||||||
if not procs and not disk and line.startswith('procs'):
|
if not procs and not disk and PROCS_HEADER_RE.match(line):
|
||||||
procs = True
|
procs = True
|
||||||
tstamp = '-timestamp-' in line
|
tstamp = '-timestamp-' in line
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not procs and not disk and line.startswith('disk'):
|
if not procs and not disk and DISK_HEADER_RE.match(line):
|
||||||
disk = True
|
disk = True
|
||||||
tstamp = '-timestamp-' in line
|
tstamp = '-timestamp-' in line
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# skip header rows
|
# skip header rows
|
||||||
if (procs or disk) and (line.startswith('procs') or line.startswith('disk')):
|
if (procs or disk) and (PROCS_HEADER_RE.match(line) or DISK_HEADER_RE.match(line)):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if 'swpd' in line and 'free' in line and 'buff' in line and 'cache' in line:
|
if 'swpd' in line and 'free' in line and 'buff' in line and 'cache' in line:
|
||||||
|
@ -91,16 +91,20 @@ Examples:
|
|||||||
{"runnable_procs":"2","uninterruptible_sleeping_procs":"0","virtua...}
|
{"runnable_procs":"2","uninterruptible_sleeping_procs":"0","virtua...}
|
||||||
...
|
...
|
||||||
"""
|
"""
|
||||||
|
import re
|
||||||
import jc.utils
|
import jc.utils
|
||||||
from jc.streaming import (
|
from jc.streaming import (
|
||||||
add_jc_meta, streaming_input_type_check, streaming_line_input_type_check, raise_or_yield
|
add_jc_meta, streaming_input_type_check, streaming_line_input_type_check, raise_or_yield
|
||||||
)
|
)
|
||||||
from jc.exceptions import ParseError
|
from jc.exceptions import ParseError
|
||||||
|
|
||||||
|
PROCS_HEADER_RE = re.compile(r'^-*procs-* ')
|
||||||
|
DISK_HEADER_RE = re.compile(r'^-*disk-* ')
|
||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
"""Provides parser metadata (version, author, etc.)"""
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
version = '1.2'
|
version = '1.3'
|
||||||
description = '`vmstat` command streaming parser'
|
description = '`vmstat` command streaming parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -182,18 +186,18 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# detect output type
|
# detect output type
|
||||||
if not procs and not disk and line.startswith('procs'):
|
if not procs and not disk and PROCS_HEADER_RE.match(line):
|
||||||
procs = True
|
procs = True
|
||||||
tstamp = '-timestamp-' in line
|
tstamp = '-timestamp-' in line
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not procs and not disk and line.startswith('disk'):
|
if not procs and not disk and DISK_HEADER_RE.match(line):
|
||||||
disk = True
|
disk = True
|
||||||
tstamp = '-timestamp-' in line
|
tstamp = '-timestamp-' in line
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# skip header rows
|
# skip header rows
|
||||||
if (procs or disk) and (line.startswith('procs') or line.startswith('disk')):
|
if (procs or disk) and (PROCS_HEADER_RE.match(line) or DISK_HEADER_RE.match(line)):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if 'swpd' in line and 'free' in line and 'buff' in line and 'cache' in line:
|
if 'swpd' in line and 'free' in line and 'buff' in line and 'cache' in line:
|
||||||
|
Reference in New Issue
Block a user