import argparse import yaml def _find_aai_response_content(inp): return inp.split("||||")[1].split("with response content = ")[1] def _find_openstack_url(inp): return inp.split("||||")[1].split("making request with URI:")[1] def _find_openstack_response_content(inp): return inp.split("||||")[1].split("with content:")[1].replace("u'", "'") def _add_response(all_responses, url, http_verb, body, status_code=200, content_type="application/json"): if url not in all_responses.keys(): all_responses[url] = { http_verb: { "status_code": status_code, "content_type": content_type, "body": body } } elif http_verb not in all_responses[url].keys(): all_responses[url][http_verb] = { "status_code": status_code, "content_type": content_type, "body": body } def parse_lines(content, aai_ip): aai_pattern = "https://%s:30233/" % aai_ip openstack_pattern = "making request with URI:" openstack_responses = {} aai_responses = {} for i, line in enumerate(content): current_line = line.strip() if aai_pattern in current_line and "DEBUG" not in current_line: url = current_line.split(" ")[8][:-1].replace(aai_pattern, "") _add_response(aai_responses, url, current_line.split(" ")[9][:-1], _find_aai_response_content(content[i + 3])) elif openstack_pattern in current_line: _add_response(openstack_responses, _find_openstack_url(current_line), "get", _find_openstack_response_content(content[i + 2])) return [ { "file": "nova.yml", "responses": openstack_responses }, { "file": "aai.yml", "responses": aai_responses } ] if __name__ == "__main__": parser = argparse.ArgumentParser(description='Convert logs to responses YAML tree file.') parser.add_argument('--log-file', type=argparse.FileType('r'), help="Log file to be parsed", required=True) parser.add_argument('--aai-ip', help="A&AI IP Address", required=True) args = parser.parse_args() for mock_responses in parse_lines(args.log_file.readlines(), args.aai_ip): with open(mock_responses["file"], 'w') as yaml_file: yaml.dump(mock_responses["responses"], yaml_file, default_flow_style=False)