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=f607c2439ac39eb4a9410ea151e240f191684b43;hb=442a2a7b0dfd2f1cd5a4ba03fb91ed32c96f8965;hpb=677ae40a2be6db9f49b19ada3c4299a8904f7784 diff --git a/resources/libraries/python/honeycomb/HoneycombUtil.py b/resources/libraries/python/honeycomb/HoneycombUtil.py index f607c2439a..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 @@ -126,7 +126,7 @@ class HoneycombUtil(object): :param url_file: URL file. The argument contains only the name of file without extension, not the full path. :type url_file: str - :return: Requested path. + :returns: Requested path. :rtype: str """ @@ -178,7 +178,7 @@ class HoneycombUtil(object): :param path: Path to data we want to find. :type data: dict :type path: tuple - :return: Data represented by path. + :returns: Data represented by path. :rtype: str, dict, or list :raises HoneycombError: If the data has not been found. """ @@ -205,7 +205,7 @@ class HoneycombUtil(object): :param path: Path to data we want to remove. :type data: dict :type path: tuple - :return: Original data without removed part. + :returns: Original data without removed part. :rtype: dict """ @@ -245,7 +245,7 @@ class HoneycombUtil(object): :type data: dict :type path: tuple :type new_value: str, dict or list - :return: Original data with the new value. + :returns: Original data with the new value. :rtype: dict """ @@ -295,17 +295,14 @@ class HoneycombUtil(object): :type node: dict :type url_file: str :type path: str - :return: Status code and content of response. + :returns: Status code and content of response. :rtype tuple """ base_path = HoneycombUtil.read_path_from_url_file(url_file) path = base_path + path status_code, resp = HTTPRequest.get(node, path) - (status_node, response) = status_code, 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="", @@ -324,7 +321,7 @@ class HoneycombUtil(object): :type data: dict, str :type path: str :type data_representation: DataRepresentation - :return: Status code and content of response. + :returns: Status code and content of response. :rtype: tuple :raises HoneycombError: If the given data representation is not defined in HEADERS. @@ -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, @@ -368,7 +361,7 @@ class HoneycombUtil(object): :type data: dict, str :type data_representation: DataRepresentation :type timeout: int - :return: Status code and content of response. + :returns: Status code and content of response. :rtype: tuple :raises HoneycombError: If the given data representation is not defined in HEADERS. @@ -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. @@ -401,54 +390,69 @@ class HoneycombUtil(object): :type node: dict :type url_file: str :type path: str - :return: Status code and content of response. + :returns: Status code and content of response. :rtype tuple """ 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 - :return: 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")