111 lines
3.8 KiB
Python
Executable file
111 lines
3.8 KiB
Python
Executable file
#!/usr/bin/env python
|
|
#
|
|
# Copyright (C) 2016 The Android Open Source Project
|
|
#
|
|
# 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 os
|
|
import sys
|
|
import time
|
|
|
|
LOG_DIR = '/tmp'
|
|
|
|
|
|
def GetLatestLog():
|
|
'''Find the latest vts runner log folder in log directory and return its content.
|
|
|
|
Returns:
|
|
(string, string), returns the latest log file path and log content
|
|
'''
|
|
folders = [os.path.join(LOG_DIR, folder_name)
|
|
for folder_name in os.listdir(LOG_DIR)
|
|
if os.path.isdir(os.path.join(LOG_DIR, folder_name)) and
|
|
folder_name.startswith('vts-runner-log')]
|
|
|
|
try:
|
|
folders.sort(
|
|
lambda folder1, folder2: int(os.path.getmtime(folder1) - os.path.getmtime(folder2)))
|
|
folder_latest = folders[-1]
|
|
log_path_latest = os.path.join(folder_latest,
|
|
os.listdir(folder_latest)[0], 'latest',
|
|
'test_run_details.txt')
|
|
with open(log_path_latest, 'r') as log_latest:
|
|
return (log_path_latest, log_latest.read())
|
|
except Exception as e:
|
|
return (None, None)
|
|
|
|
|
|
def StartMonitoring(path_only):
|
|
'''Pull the latest vts runner log in a loop, and print out any new contents.
|
|
|
|
Args:
|
|
path_only: bool, only print out the latest log path in temporary directory.
|
|
'''
|
|
is_first_time = True
|
|
last_log_path = None
|
|
last_text = ''
|
|
while True:
|
|
log_path_latest, text_latest = GetLatestLog()
|
|
|
|
if path_only:
|
|
print log_path_latest
|
|
return
|
|
|
|
if log_path_latest is None: # Case: cannot find any runner log
|
|
time.sleep(2)
|
|
continue
|
|
|
|
if last_log_path == log_path_latest:
|
|
text_new = text_latest[len(last_text):]
|
|
last_text = text_latest
|
|
if text_new: # Case: runner log file changed
|
|
if is_first_time:
|
|
is_first_time = False
|
|
print text_new
|
|
continue
|
|
lines = text_new.split('\n')
|
|
for l in lines:
|
|
print l
|
|
time.sleep(0.6 / len(lines))
|
|
else: # Case: runner log file didn't change
|
|
time.sleep(1)
|
|
else: # Case: found a new runner log file
|
|
last_text = ''
|
|
last_log_path = log_path_latest
|
|
print '\n' * 6 + '=' * 24 + 'new file' + '=' * 24 + '\n' * 6
|
|
time.sleep(1)
|
|
|
|
|
|
def PrintUsage():
|
|
print 'A script to read VTS Runner\'s log from temporary directory.'
|
|
print 'Usage:'
|
|
print ' -h, --help: print usage.'
|
|
print ' -p, --path-only: print path to the latest runner file only.'
|
|
print ' You may pipe the result to vim for searching.'
|
|
print ' Example: script/monitor-runner-output.py --path-only | xargs gedit'
|
|
print ' -m, --monitor: print VTS runner\'s output in close to real time'
|
|
print ' If no argument is provided, this script will keep pulling the latest log and print it out.'
|
|
|
|
|
|
if __name__ == "__main__":
|
|
argv = sys.argv
|
|
path_only = False
|
|
if len(argv) == 1 or argv[1] == '-h' or argv[1] == '--help':
|
|
PrintUsage()
|
|
exit()
|
|
elif argv[1] == '-p' or argv[1] == '--path-only':
|
|
path_only = True
|
|
elif argv[1] == '-m' or argv[1] == '--monitor':
|
|
path_only = False
|
|
StartMonitoring(path_only)
|