6114a518de
the sar filter made an assumption of time display including an AM/PM... which isn't true in all environments. Hence the blank sysstat screen in the gate runs of late. This fixes that, and displays the first line which includes header version to make sure we are functioning. Change-Id: I537e0bf2127efaf337c4792bc23d938145c8990d
87 lines
2.3 KiB
Python
Executable File
87 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2014 Samsung Electronics Corp. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def is_data_line(line):
|
|
timestamp, data = parse_line(line)
|
|
return re.search('\d\.d', data)
|
|
|
|
|
|
def parse_line(line):
|
|
m = re.search('(\d\d:\d\d:\d\d( \w\w)?)(\s+((\S+)\s*)+)', line)
|
|
if m:
|
|
date = m.group(1)
|
|
data = m.group(3).rstrip()
|
|
return date, data
|
|
else:
|
|
return None, None
|
|
|
|
|
|
process = subprocess.Popen(
|
|
"sar %s" % " ".join(sys.argv[1:]),
|
|
shell=True,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT)
|
|
|
|
# Poll process for new output until finished
|
|
|
|
start_time = ""
|
|
header = ""
|
|
data_line = ""
|
|
printed_header = False
|
|
current_ts = None
|
|
|
|
# print out the first sysstat line regardless
|
|
print process.stdout.readline()
|
|
|
|
while True:
|
|
nextline = process.stdout.readline()
|
|
if nextline == '' and process.poll() is not None:
|
|
break
|
|
|
|
date, data = parse_line(nextline)
|
|
# stop until we get to the first set of real lines
|
|
if not date:
|
|
continue
|
|
|
|
# now we eat the header lines, and only print out the header
|
|
# if we've never seen them before
|
|
if not start_time:
|
|
start_time = date
|
|
header += "%s %s" % (date, data)
|
|
elif date == start_time:
|
|
header += " %s" % data
|
|
elif not printed_header:
|
|
printed_header = True
|
|
print header
|
|
|
|
# now we know this is a data line, printing out if the timestamp
|
|
# has changed, and stacking up otherwise.
|
|
nextline = process.stdout.readline()
|
|
date, data = parse_line(nextline)
|
|
if date != current_ts:
|
|
current_ts = date
|
|
print data_line
|
|
data_line = "%s %s" % (date, data)
|
|
else:
|
|
data_line += " %s" % data
|
|
|
|
sys.stdout.flush()
|