diff options
Diffstat (limited to 'resources/libraries/python/honeycomb/HoneycombUtil.py')
-rw-r--r-- | resources/libraries/python/honeycomb/HoneycombUtil.py | 55 |
1 files changed, 48 insertions, 7 deletions
diff --git a/resources/libraries/python/honeycomb/HoneycombUtil.py b/resources/libraries/python/honeycomb/HoneycombUtil.py index f2f012ea9b..22a7e7ef1e 100644 --- a/resources/libraries/python/honeycomb/HoneycombUtil.py +++ b/resources/libraries/python/honeycomb/HoneycombUtil.py @@ -27,7 +27,8 @@ from enum import Enum, unique from robot.api import logger -from resources.libraries.python.HTTPRequest import HTTPRequest +from resources.libraries.python.ssh import SSH +from resources.libraries.python.HTTPRequest import HTTPRequest, HTTPCodes from resources.libraries.python.constants import Constants as Const @@ -301,7 +302,10 @@ class HoneycombUtil(object): 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) + (status_node, response) = status_code, loads(resp) + if status_code != HTTPCodes.OK: + HoneycombUtil.read_log_tail(node) + return status_code, response @staticmethod def put_honeycomb_data(node, url_file, data, path="", @@ -339,8 +343,12 @@ class HoneycombUtil(object): 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) + (status_code, response) = 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, @@ -375,8 +383,12 @@ 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) + (status_code, response) = 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=""): @@ -395,4 +407,33 @@ class HoneycombUtil(object): base_path = HoneycombUtil.read_path_from_url_file(url_file) path = base_path + path - return HTTPRequest.delete(node, path) + (status_code, response) = HTTPRequest.delete(node, path) + + if status_code != HTTPCodes.OK: + HoneycombUtil.read_log_tail(node) + return status_code, response + + @staticmethod + def read_log_tail(node, lines=120): + """Read the last N lines of the Honeycomb log file and print them + to robot log. + + :param node: Honeycomb node. + :param lines: Number of lines to read. + :type node: dict + :type lines: int + :return: Last N log lines. + :rtype: str + """ + + logger.trace( + "HTTP request failed, " + "obtaining last {0} lines of Honeycomb log...".format(lines)) + + 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 |