Skip to content

Commit

Permalink
Merge pull request #657 from nettorta/develop
Browse files Browse the repository at this point in the history
Pandora plugin additional logging
  • Loading branch information
fomars committed Oct 31, 2018
2 parents e337f44 + 2e1b873 commit 2a9404c
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 11 deletions.
18 changes: 18 additions & 0 deletions yandextank/common/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -611,3 +611,21 @@ def __iter__(self):

def close(self):
self.__closed = True


def tail_lines(filepath, lines_num, bufsize=8192):
fsize = os.stat(filepath).st_size
iter_ = 0
with open(filepath) as f:
if bufsize > fsize:
bufsize = fsize - 1
data = []
try:
while True:
iter_ += 1
f.seek(fsize - bufsize * iter_)
data.extend(f.readlines())
if len(data) >= lines_num or f.tell() == 0:
return data[-lines_num:]
except (IOError, OSError):
return data
37 changes: 26 additions & 11 deletions yandextank/plugins/Pandora/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from ..Console import screen as ConsoleScreen
from ..Phantom import PhantomReader
from ...common.interfaces import AbstractInfoWidget, GeneratorPlugin
from ...common.util import tail_lines

logger = logging.getLogger(__name__)

Expand All @@ -35,6 +36,7 @@ def __init__(self, core, cfg):
self.__address = None
self.__schedule = None
self.ammofile = None
self.process_stderr_file = None

@staticmethod
def get_key():
Expand Down Expand Up @@ -175,26 +177,39 @@ def start_test(self):
self.core.__setup_affinity(self.affinity, args=args)
logger.info("Starting: %s", args)
self.process_start_time = time.time()
process_stderr_file = self.core.mkstemp(".log", "pandora_")
self.core.add_artifact_file(process_stderr_file)
self.process_stderr = open(process_stderr_file, 'w')
self.process = subprocess.Popen(
args,
stderr=self.process_stderr,
stdout=self.process_stderr,
close_fds=True)
self.process_stderr_file = self.core.mkstemp(".log", "pandora_")
self.core.add_artifact_file(self.process_stderr_file)
self.process_stderr = open(self.process_stderr_file, 'w')
try:
self.process = subprocess.Popen(
args,
stderr=self.process_stderr,
stdout=self.process_stderr,
close_fds=True)
except OSError:
logger.debug(
"Unable to start Pandora binary. Args: %s", args, exc_info=True)
raise RuntimeError(
"Unable to start Pandora binary and/or file does not exist: %s" % args)

def is_test_finished(self):
retcode = self.process.poll()
if retcode is not None:
logger.info("Subprocess done its work with exit code: %s", retcode)
if retcode is not None and retcode == 0:
logger.info("Pandora subprocess done its work successfully and finished w/ retcode 0")
return retcode
elif retcode is not None and retcode != 0:
lines_amount = 20
logger.info("Pandora finished with non-zero retcode. Last %s logs of Pandora log:", lines_amount)
last_log_contents = tail_lines(self.process_stderr_file, lines_amount)
for logline in last_log_contents:
logger.info(logline.strip('\n'))
return abs(retcode)
else:
return -1

def end_test(self, retcode):
if self.process and self.process.poll() is None:
logger.warn(
logger.warning(
"Terminating worker process with PID %s", self.process.pid)
self.process.terminate()
if self.process_stderr:
Expand Down

0 comments on commit 2a9404c

Please sign in to comment.