diff --git a/playbooks/Jira_Related_Tickets_Search.json b/playbooks/Jira_Related_Tickets_Search.json index 7c1b257451..d9ad8ac64c 100644 --- a/playbooks/Jira_Related_Tickets_Search.json +++ b/playbooks/Jira_Related_Tickets_Search.json @@ -107,7 +107,7 @@ } ], "globalCustomCode": null, - "hash": "39f254669883d18405a03c2000eef5d9e8fe5829", + "hash": "de0bf40b98d18d786250e8ea9d0c2e46c3017c61", "nodes": { "0": { "data": { @@ -246,7 +246,7 @@ "errors": {}, "id": "16", "type": "code", - "userCode": "\n def markdown_escape(string):\n \"\"\"\n Escape a string in Markdown.\n\n Input: a string or an object that can be converted to string using str(). e.g. \"index=* | top\"\n Output: escaped string. e.g. \"index=\\* \\| top\"\n \"\"\"\n\n # Must keep '\\\\' in the first, because it is used to escape other characters\n special_chars = ['\\\\', '`', '*', '_', '{', '}', '[', ']', '<', '>', '(', ')', '#', '+', '-', '.', '!', '|']\n ans = str(string)\n for i in special_chars:\n ans = ans.replace(i, '\\\\' + i)\n return ans\n\n build_output__observable_array = []\n build_output__summary = []\n build_output__name = []\n build_output__description = []\n build_output__create_time = []\n build_output__updated_time = []\n build_output__assignee = []\n build_output__reporter = []\n build_output__status = []\n build_output__ticket_type = []\n build_output__priority = []\n build_output__resolution = []\n build_output__matched_fields = []\n build_output__source_link = []\n build_output__source = []\n\n for key in process_results__output.keys():\n \n for value in process_results__output[key]:\n # Extract fields from ticket object.\n ticket = {}\n ticket['summary'] = value.get('summary')\n ticket['name'] = value.get('name')\n ticket['description'] = json.dumps(value['description']) # eliminate new line issues\n ticket['create_time'] = value['fields'].get('created')\n ticket['updated_time'] = value['fields'].get('updated')\n ticket['assignee'] = value['fields'].get('assignee', {}).get('displayName', '')\n ticket['reporter'] = value.get('reporter')\n ticket['status'] = value.get('status')\n ticket['ticket_type'] = value.get('issue_type')\n ticket['priority'] = value.get('priority')\n ticket['resolution'] = value.get('resolution')\n ticket['matched_fields'] = value.get('matched_fields')\n ticket['source_link'] = value.get('source_link')\n ticket['source'] = 'Jira'\n\n # Extract comments (only included in the observable object, not in other output variables).\n ticket['comments'] = []\n for comment in value['fields']['comment']['comments']:\n ticket['comments'].append(comment['body'])\n \n # Construct observable object\n observable_object = {\n \"value\": key,\n \"ticket\": ticket,\n \"matched_fields\": value['matched_fields'],\n \"source\": ticket['source'],\n \"source_link\": ticket['source_link']\n }\n\n # Add results to VPE code output\n build_output__observable_array.append(observable_object)\n build_output__summary.append(markdown_escape(ticket['summary']))\n build_output__name.append(markdown_escape(ticket['name']))\n build_output__description.append(markdown_escape(ticket['description']))\n build_output__create_time.append(markdown_escape(ticket['create_time']))\n build_output__updated_time.append(markdown_escape(ticket['updated_time']))\n build_output__assignee.append(markdown_escape(ticket['assignee']))\n build_output__reporter.append(markdown_escape(ticket['reporter']))\n build_output__status.append(markdown_escape(ticket['status']))\n build_output__ticket_type.append(markdown_escape(ticket['ticket_type']))\n build_output__priority.append(markdown_escape(ticket['priority']))\n build_output__resolution.append(markdown_escape(ticket['resolution']))\n build_output__matched_fields.append(markdown_escape(ticket['matched_fields']))\n build_output__source_link.append(markdown_escape(ticket['source_link']))\n build_output__source.append(markdown_escape(ticket['source']))\n\n", + "userCode": "\n def markdown_escape(string):\n \"\"\"\n Escape a string in Markdown.\n\n Input: a string or an object that can be converted to string using str(). e.g. \"index=* | top\"\n Output: escaped string. e.g. \"index=\\* \\| top\"\n \"\"\"\n\n # Must keep '\\\\' in the first, because it is used to escape other characters\n special_chars = ['\\\\', '`', '*', '_', '{', '}', '[', ']', '<', '>', '(', ')', '#', '+', '-', '.', '!', '|']\n ans = str(string)\n for i in special_chars:\n ans = ans.replace(i, '\\\\' + i)\n return ans\n\n build_output__observable_array = []\n build_output__summary = []\n build_output__name = []\n build_output__description = []\n build_output__create_time = []\n build_output__updated_time = []\n build_output__assignee = []\n build_output__reporter = []\n build_output__status = []\n build_output__ticket_type = []\n build_output__priority = []\n build_output__resolution = []\n build_output__matched_fields = []\n build_output__source_link = []\n build_output__source = []\n\n for key in process_results__output.keys():\n \n for value in process_results__output[key]:\n # Extract fields from ticket object.\n ticket = {}\n ticket['summary'] = value.get('summary')\n ticket['name'] = value.get('name')\n ticket['description'] = json.dumps(value['description']) # eliminate new line issues\n ticket['create_time'] = value['fields'].get('created')\n ticket['updated_time'] = value['fields'].get('updated')\n asignee_dict = value['fields'].get('assignee')\n if asignee_dict is not None:\n ticket['assignee'] = asignee_dict.get('displayName', '')\n else:\n ticket['assignee'] = ''\n ticket['reporter'] = value.get('reporter')\n ticket['status'] = value.get('status')\n ticket['ticket_type'] = value.get('issue_type')\n ticket['priority'] = value.get('priority')\n ticket['resolution'] = value.get('resolution')\n ticket['matched_fields'] = value.get('matched_fields')\n ticket['source_link'] = value.get('source_link')\n ticket['source'] = 'Jira'\n\n # Extract comments (only included in the observable object, not in other output variables).\n ticket['comments'] = []\n for comment in value['fields']['comment']['comments']:\n ticket['comments'].append(comment['body'])\n \n # Construct observable object\n observable_object = {\n \"value\": key,\n \"ticket\": {\n 'name': markdown_escape(ticket['summary']),\n 'number': markdown_escape(ticket['name']),\n 'message': markdown_escape(ticket['description']),\n 'start_time': markdown_escape(ticket['create_time']),\n 'updated_time': markdown_escape(ticket['updated_time']),\n 'end_time': '',\n 'assignee': markdown_escape(ticket['assignee']),\n 'creator_name': markdown_escape(ticket['reporter']),\n 'state': markdown_escape(ticket['status']),\n 'ticket_type': markdown_escape(ticket['ticket_type']),\n 'priority': markdown_escape(ticket['priority']),\n 'resolution': markdown_escape(ticket['resolution']),\n },\n \"matched_fields\": value['matched_fields'],\n \"source\": ticket['source'],\n \"source_link\": ticket['source_link']\n }\n\n # Add results to VPE code output\n build_output__observable_array.append(observable_object)\n build_output__summary.append(markdown_escape(ticket['summary']))\n build_output__name.append(markdown_escape(ticket['name']))\n build_output__description.append(markdown_escape(ticket['description']))\n build_output__create_time.append(markdown_escape(ticket['create_time']))\n build_output__updated_time.append(markdown_escape(ticket['updated_time']))\n build_output__assignee.append(markdown_escape(ticket['assignee']))\n build_output__reporter.append(markdown_escape(ticket['reporter']))\n build_output__status.append(markdown_escape(ticket['status']))\n build_output__ticket_type.append(markdown_escape(ticket['ticket_type']))\n build_output__priority.append(markdown_escape(ticket['priority']))\n build_output__resolution.append(markdown_escape(ticket['resolution']))\n build_output__matched_fields.append(markdown_escape(ticket['matched_fields']))\n build_output__source_link.append(markdown_escape(ticket['source_link']))\n build_output__source.append(markdown_escape(ticket['source']))\n\n", "warnings": {}, "x": 0, "y": 1220 @@ -530,7 +530,7 @@ "schema": "5.0.10", "version": "6.1.0.131" }, - "create_time": "2023-08-22T22:24:26.619154+00:00", + "create_time": "2023-08-23T21:18:18.801634+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/Jira_Related_Tickets_Search.py b/playbooks/Jira_Related_Tickets_Search.py index 5051a5f71f..3ed69e2c49 100644 --- a/playbooks/Jira_Related_Tickets_Search.py +++ b/playbooks/Jira_Related_Tickets_Search.py @@ -262,7 +262,11 @@ def build_output(action=None, success=None, container=None, results=None, handle ticket['description'] = json.dumps(value['description']) # eliminate new line issues ticket['create_time'] = value['fields'].get('created') ticket['updated_time'] = value['fields'].get('updated') - ticket['assignee'] = value['fields'].get('assignee', {}).get('displayName', '') + asignee_dict = value['fields'].get('assignee') + if asignee_dict is not None: + ticket['assignee'] = asignee_dict.get('displayName', '') + else: + ticket['assignee'] = '' ticket['reporter'] = value.get('reporter') ticket['status'] = value.get('status') ticket['ticket_type'] = value.get('issue_type') @@ -280,7 +284,20 @@ def build_output(action=None, success=None, container=None, results=None, handle # Construct observable object observable_object = { "value": key, - "ticket": ticket, + "ticket": { + 'name': markdown_escape(ticket['summary']), + 'number': markdown_escape(ticket['name']), + 'message': markdown_escape(ticket['description']), + 'start_time': markdown_escape(ticket['create_time']), + 'updated_time': markdown_escape(ticket['updated_time']), + 'end_time': '', + 'assignee': markdown_escape(ticket['assignee']), + 'creator_name': markdown_escape(ticket['reporter']), + 'state': markdown_escape(ticket['status']), + 'ticket_type': markdown_escape(ticket['ticket_type']), + 'priority': markdown_escape(ticket['priority']), + 'resolution': markdown_escape(ticket['resolution']), + }, "matched_fields": value['matched_fields'], "source": ticket['source'], "source_link": ticket['source_link']