X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Fhoneycomb%2FHoneycombUtil.py;h=b7338d3ed8167eeff78a11fe1e1d18c8a48dc5fb;hp=747c9dae8e6ccd43085f213368c4bbe7024cf80e;hb=442a2a7b0dfd2f1cd5a4ba03fb91ed32c96f8965;hpb=cf561a6e3d4c4fbd78ab6c9d0a9aa817bb3300fc diff --git a/resources/libraries/python/honeycomb/HoneycombUtil.py b/resources/libraries/python/honeycomb/HoneycombUtil.py index 747c9dae8e..b7338d3ed8 100644 --- a/resources/libraries/python/honeycomb/HoneycombUtil.py +++ b/resources/libraries/python/honeycomb/HoneycombUtil.py @@ -28,7 +28,7 @@ from enum import Enum, unique from robot.api import logger from resources.libraries.python.ssh import SSH -from resources.libraries.python.HTTPRequest import HTTPRequest, HTTPCodes +from resources.libraries.python.HTTPRequest import HTTPRequest from resources.libraries.python.constants import Constants as Const @@ -302,10 +302,7 @@ class HoneycombUtil(object): base_path = HoneycombUtil.read_path_from_url_file(url_file) path = base_path + path status_code, resp = HTTPRequest.get(node, path) - response = loads(resp) - if status_code != HTTPCodes.OK: - HoneycombUtil.read_log_tail(node) - return status_code, response + return status_code, loads(resp) @staticmethod def put_honeycomb_data(node, url_file, data, path="", @@ -343,13 +340,9 @@ class HoneycombUtil(object): base_path = HoneycombUtil.read_path_from_url_file(url_file) path = base_path + path logger.trace(path) - (status_code, response) = HTTPRequest.put( + return HTTPRequest.put( node=node, path=path, headers=header, payload=data) - if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): - HoneycombUtil.read_log_tail(node) - return status_code, response - @staticmethod def post_honeycomb_data(node, url_file, data=None, data_representation=DataRepresentation.JSON, @@ -383,13 +376,9 @@ class HoneycombUtil(object): data = dumps(data) path = HoneycombUtil.read_path_from_url_file(url_file) - (status_code, response) = HTTPRequest.post( + return HTTPRequest.post( node=node, path=path, headers=header, payload=data, timeout=timeout) - if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): - HoneycombUtil.read_log_tail(node) - return status_code, response - @staticmethod def delete_honeycomb_data(node, url_file, path=""): """Delete data from Honeycomb according to given URL. @@ -407,48 +396,63 @@ class HoneycombUtil(object): base_path = HoneycombUtil.read_path_from_url_file(url_file) path = base_path + path - (status_code, response) = HTTPRequest.delete(node, path) - - if status_code != HTTPCodes.OK: - HoneycombUtil.read_log_tail(node) - return status_code, response + return HTTPRequest.delete(node, path) @staticmethod - def read_log_tail(node, lines=120): - """Read the last N lines of the Honeycomb log file and print them - to robot log. + def append_honeycomb_log(node, suite_name): + """Append Honeycomb log for the current test suite to the full log. :param node: Honeycomb node. - :param lines: Number of lines to read. + :param suite_name: Name of the current test suite. ${SUITE_NAME} + variable in robotframework. :type node: dict - :type lines: int - :returns: Last N log lines. - :rtype: str + :type suite_name: str """ - logger.trace( - "HTTP request failed, " - "obtaining last {0} lines of Honeycomb log...".format(lines)) + ssh = SSH() + ssh.connect(node) + + ssh.exec_command( + "echo '{separator}' >> /tmp/honeycomb.log".format(separator="="*80)) + ssh.exec_command( + "echo 'Log for suite: {suite}' >> /tmp/honeycomb.log".format( + suite=suite_name)) + ssh.exec_command( + "cat {hc_log} >> /tmp/honeycomb.log".format( + hc_log=Const.REMOTE_HC_LOG)) + + @staticmethod + def clear_honeycomb_log(node): + """Delete the Honeycomb log file for the current test suite. + + :param node: Honeycomb node. + :type node: dict""" ssh = SSH() ssh.connect(node) - cmd = "tail -n {0} /var/log/honeycomb/honeycomb.log".format(lines) - # ssh also logs the reply on trace level - (_, stdout, _) = ssh.exec_command(cmd, timeout=30) - return stdout + ssh.exec_command("sudo rm {hc_log}".format(hc_log=Const.REMOTE_HC_LOG)) @staticmethod - def archive_honeycomb_log(node): + def archive_honeycomb_log(node, perf=False): """Copy honeycomb log file from DUT node to VIRL for archiving. :param node: Honeycomb node. + :param perf: Alternate handling, for use with performance test topology. :type node: dict + :type perf: bool """ ssh = SSH() ssh.connect(node) - cmd = "cp /var/log/honeycomb/honeycomb.log /scratch/" - - ssh.exec_command_sudo(cmd) + if not perf: + cmd = "cp /tmp/honeycomb.log /scratch/" + ssh.exec_command_sudo(cmd, timeout=60) + else: + ssh.scp( + ".", + "/tmp/honeycomb.log", + get=True, + timeout=60) + ssh.exec_command("rm /tmp/honeycomb.log")