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=2f8392ecb5648c24734c3be3906971d64b48e53d;hb=442a2a7b0dfd2f1cd5a4ba03fb91ed32c96f8965;hpb=036f36181c177e4c77f22cdbdcb87fb2f94df3bf diff --git a/resources/libraries/python/honeycomb/HoneycombUtil.py b/resources/libraries/python/honeycomb/HoneycombUtil.py index 2f8392ecb5..b7338d3ed8 100644 --- a/resources/libraries/python/honeycomb/HoneycombUtil.py +++ b/resources/libraries/python/honeycomb/HoneycombUtil.py @@ -27,6 +27,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 from resources.libraries.python.constants import Constants as Const @@ -86,7 +87,6 @@ class HoneycombError(Exception): self._msg = "{0}: {1}".format(self.__class__.__name__, msg) self._details = details if enable_logging: - logger.error(self._msg) logger.debug(self._details) def __repr__(self): @@ -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 """ @@ -285,24 +285,27 @@ class HoneycombUtil(object): return origin_data @staticmethod - def get_honeycomb_data(node, url_file): + def get_honeycomb_data(node, url_file, path=""): """Retrieve data from Honeycomb according to given URL. :param node: Honeycomb node. :param url_file: URL file. The argument contains only the name of file without extension, not the full path. + :param path: Path which is added to the base path to identify the data. :type node: dict :type url_file: str - :return: Status code and content of response. + :type path: str + :returns: Status code and content of response. :rtype tuple """ - path = HoneycombUtil.read_path_from_url_file(url_file) + base_path = HoneycombUtil.read_path_from_url_file(url_file) + path = base_path + path status_code, resp = HTTPRequest.get(node, path) return status_code, loads(resp) @staticmethod - def put_honeycomb_data(node, url_file, data, + def put_honeycomb_data(node, url_file, data, path="", data_representation=DataRepresentation.JSON): """Send configuration data using PUT request and return the status code and response content. @@ -311,12 +314,14 @@ class HoneycombUtil(object): :param url_file: URL file. The argument contains only the name of file without extension, not the full path. :param data: Configuration data to be sent to Honeycomb. + :param path: Path which is added to the base path to identify the data. :param data_representation: How the data is represented. :type node: dict :type url_file: str :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. @@ -332,9 +337,11 @@ class HoneycombUtil(object): logger.trace(data) - path = HoneycombUtil.read_path_from_url_file(url_file) - return HTTPRequest.put(node=node, path=path, headers=header, - payload=data) + base_path = HoneycombUtil.read_path_from_url_file(url_file) + path = base_path + path + logger.trace(path) + return HTTPRequest.put( + node=node, path=path, headers=header, payload=data) @staticmethod def post_honeycomb_data(node, url_file, data=None, @@ -354,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. @@ -369,21 +376,83 @@ class HoneycombUtil(object): data = dumps(data) path = HoneycombUtil.read_path_from_url_file(url_file) - return HTTPRequest.post(node=node, path=path, headers=header, - payload=data, timeout=timeout) + return HTTPRequest.post( + node=node, path=path, headers=header, payload=data, timeout=timeout) @staticmethod - def delete_honeycomb_data(node, url_file): + def delete_honeycomb_data(node, url_file, path=""): """Delete data from Honeycomb according to given URL. :param node: Honeycomb node. :param url_file: URL file. The argument contains only the name of file without extension, not the full path. + :param path: Path which is added to the base path to identify the data. :type node: dict :type url_file: str - :return: Status code and content of response. + :type path: str + :returns: Status code and content of response. :rtype tuple """ - path = HoneycombUtil.read_path_from_url_file(url_file) + base_path = HoneycombUtil.read_path_from_url_file(url_file) + path = base_path + path return HTTPRequest.delete(node, path) + + @staticmethod + def append_honeycomb_log(node, suite_name): + """Append Honeycomb log for the current test suite to the full log. + + :param node: Honeycomb node. + :param suite_name: Name of the current test suite. ${SUITE_NAME} + variable in robotframework. + :type node: dict + :type suite_name: str + """ + + 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) + + ssh.exec_command("sudo rm {hc_log}".format(hc_log=Const.REMOTE_HC_LOG)) + + @staticmethod + 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) + + 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")