trove/integration/tests/integration/tests/util/report.py

77 lines
2.1 KiB
Python

"""Creates a report for the test.
"""
import os
import shutil
from os import path
from trove.tests.config import CONFIG
USE_LOCAL_OVZ = CONFIG.use_local_ovz
class Reporter(object):
"""Saves the logs from a test run."""
def __init__(self, root_path):
self.root_path = root_path
if not path.exists(self.root_path):
os.mkdir(self.root_path)
for file in os.listdir(self.root_path):
if file.endswith(".log"):
os.remove(path.join(self.root_path, file))
def _find_all_instance_ids(self):
instances = []
if USE_LOCAL_OVZ:
for dir in os.listdir("/var/lib/vz/private"):
instances.append(dir)
return instances
def log(self, msg):
with open("%s/report.log" % self.root_path, 'a') as file:
file.write(str(msg) + "\n")
def _save_syslog(self):
try:
shutil.copyfile("/var/log/syslog", "host-syslog.log")
except (shutil.Error, IOError) as err:
self.log("ERROR logging syslog : %s" % (err))
def _update_instance(self, id):
root = "%s/%s" % (self.root_path, id)
def save_file(path, short_name):
if USE_LOCAL_OVZ:
try:
shutil.copyfile("/var/lib/vz/private/%s/%s" % (id, path),
"%s-%s.log" % (root, short_name))
except (shutil.Error, IOError) as err:
self.log("ERROR logging %s for instance id %s! : %s"
% (path, id, err))
else:
#TODO: Can we somehow capture these (maybe SSH to the VM)?
pass
save_file("/var/log/firstboot", "firstboot")
save_file("/var/log/syslog", "syslog")
save_file("/var/log/nova/guest.log", "nova-guest")
def _update_instances(self):
for id in self._find_all_instance_ids():
self._update_instance(id)
def update(self):
self._update_instances()
self._save_syslog()
REPORTER = Reporter(CONFIG.report_directory)
def log(msg):
REPORTER.log(msg)
def update():
REPORTER.update()