Browse Source

Remove parse library dependency

check-vt100
Aleksander Kiryk 4 years ago
parent
commit
653d0adcf3
  1. 22
      sargraph.py

22
sargraph.py

@ -16,7 +16,7 @@ from datetime import datetime, timedelta
from select import select from select import select
from fcntl import fcntl, F_GETFL, F_SETFL from fcntl import fcntl, F_GETFL, F_SETFL
from socket import gethostname from socket import gethostname
from parse import search from re import search
GNUPLOT_VERSION_EXPECTED = 5.0 GNUPLOT_VERSION_EXPECTED = 5.0
@ -47,6 +47,18 @@ def run_process(*argv, **kwargs):
return p return p
# Get the first group from a given match and convert to required type
def scan(regex, conv, string):
match = search(regex, string)
if not match:
return None
try:
value = conv(match.group(1))
except ValueError:
return None
return value
# Read a single table from sar output # Read a single table from sar output
def read_table(f): def read_table(f):
# Find the header # Find the header
@ -96,8 +108,8 @@ def g(command):
# Check if the avaliable gnuplot has a required version # Check if the avaliable gnuplot has a required version
p = run_process("gnuplot", "--version", stdout=subprocess.PIPE) p = run_process("gnuplot", "--version", stdout=subprocess.PIPE)
version = search("gnuplot {:f}", p.stdout.readline().decode()) version = scan(r"gnuplot (\S+)", float, p.stdout.readline().decode())
if version[0] < GNUPLOT_VERSION_EXPECTED: if version < GNUPLOT_VERSION_EXPECTED:
print("Error: Gnuplot version too low. Need at least %g found %g" % (GNUPLOT_VERSION_EXPECTED, version[0])) print("Error: Gnuplot version too low. Need at least %g found %g" % (GNUPLOT_VERSION_EXPECTED, version[0]))
sys.exit(1) sys.exit(1)
@ -117,7 +129,7 @@ p = run_process("sar", "-V", stdout=subprocess.PIPE)
if len(sys.argv) > 1: if len(sys.argv) > 1:
# Check if screen provides expected output # Check if screen provides expected output
p = run_process("screen", "-v", stdout=subprocess.PIPE) p = run_process("screen", "-v", stdout=subprocess.PIPE)
version = search("Screen version {major:d}", p.stdout.readline().decode()) version = scan("Screen version (\d+)", int, p.stdout.readline().decode())
if version is None: if version is None:
print("Error: 'screen' tool returned unknown output!") print("Error: 'screen' tool returned unknown output!")
sys.exit(1) sys.exit(1)
@ -184,7 +196,7 @@ my_env["S_TIME_FORMAT"] = "ISO"
TOTAL_RAM = 0 TOTAL_RAM = 0
with open("/proc/meminfo") as f: with open("/proc/meminfo") as f:
TOTAL_RAM = int(search("MemTotal:{:s}{mem:d}", f.read())["mem"]/1024.0/1024.0) TOTAL_RAM = int(scan("MemTotal:\s+(\d+)", float, f.read())/1024/1024)
p = run_process("sar", "-F", "-u", "-r", "1", stdout=subprocess.PIPE, env=my_env) p = run_process("sar", "-F", "-u", "-r", "1", stdout=subprocess.PIPE, env=my_env)

Loading…
Cancel
Save