def report_incident(user_id: str, channel_id: str, submission: json, response_url: str, state: json): report = submission['report'] summary = submission['summary'] impact = submission['impact'] lead_id = submission['lead'] severity = submission['severity'] name = settings.SLACK_CLIENT.get_user_profile(user_id)['name'] reporter = GetOrCreateSlackExternalUser(external_id=user_id, display_name=name) lead = None if lead_id: lead_name = settings.SLACK_CLIENT.get_user_profile(lead_id)['name'] lead = GetOrCreateSlackExternalUser(external_id=lead_id, display_name=lead_name) Incident.objects.create_incident( report=report, reporter=reporter, report_time=datetime.now(), summary=summary, impact=impact, lead=lead, severity=severity, ) incidents_channel_ref = channel_reference(settings.INCIDENT_CHANNEL_ID) text = f"Thanks for raising the incident 🙏\n\nHead over to {incidents_channel_ref} to complete the report and/or help deal with the issue" settings.SLACK_CLIENT.send_ephemeral_message(channel_id, user_id, text)
def report_incident(user_id: str, channel_id: str, submission: Any, response_url: str, state: Any): report = submission["report"] summary = submission["summary"] impact = submission["impact"] lead_id = submission["lead"] severity = submission["severity"] name = settings.SLACK_CLIENT.get_user_profile(user_id)["name"] reporter, _ = ExternalUser.objects.get_or_create_slack(external_id=user_id, display_name=name) lead = None if lead_id: lead_name = settings.SLACK_CLIENT.get_user_profile(lead_id)["name"] lead, _ = ExternalUser.objects.get_or_create_slack( external_id=lead_id, display_name=lead_name) Incident.objects.create_incident( report=report, reporter=reporter, report_time=datetime.now(), summary=summary, impact=impact, lead=lead, severity=severity, ) incidents_channel_ref = channel_reference(settings.INCIDENT_CHANNEL_ID) text = f"Thanks for raising the incident 🙏\n\nHead over to {incidents_channel_ref} to complete the report and/or help deal with the issue" settings.SLACK_CLIENT.send_ephemeral_message(channel_id, user_id, text)
def report_incident(user_id: str, channel_id: str, submission: Any, response_url: str, state: Any): report = submission["report"] summary = submission["summary"] impact = submission["impact"] # lead_id = submission["lead"] severity = submission["severity"] pdschedule = submission["pdschedule"] if "incident_type" in submission: report_only = submission["incident_type"] == "report" else: report_only = False name = get_user_profile(user_id)["name"] reporter, _ = ExternalUser.objects.get_or_create_slack(external_id=user_id, display_name=name) lead = None # if lead_id: # lead_name = get_user_profile(lead_id)["name"] # lead, _ = ExternalUser.objects.get_or_create_slack( # external_id=lead_id, display_name=lead_name # ) try: pdincident = None if pdschedule == "yes": incident = settings.PDSESSION.rpost( "/incidents", json={ "incident": { "type": "incident", "title": report, "service": { "id": "P703RRY", "type": "service_reference" }, "body": { "type": "incident_body", "details": summary if summary else "", }, } }, headers={"From": "*****@*****.**"}, ) pdincident = incident["id"] Incident.objects.create_incident( report=report, reporter=reporter, report_time=datetime.now(), report_only=report_only, summary=summary, impact=impact, lead=lead, severity=severity, pdschedule=pdincident, ) if report_only and hasattr(settings, "INCIDENT_REPORT_CHANNEL_ID"): incidents_channel_ref = channel_reference( settings.INCIDENT_REPORT_CHANNEL_ID) else: incidents_channel_ref = channel_reference( settings.INCIDENT_CHANNEL_ID) text = ( f"Thanks for raising the incident 🙏\n\nHead over to {incidents_channel_ref} " f"to complete the report and/or help deal with the issue") settings.SLACK_CLIENT.send_ephemeral_message(channel_id, user_id, text) except PDClientError as pce: logger.error(pce.response.json()) # Raise here so incident doesn't get created raise pce
def update_in_slack(self): "Creates/updates the slack headline post with the latest incident info" logging.info( f"Updating headline post in Slack for incident {self.incident.pk}") msg = Message() # Set the fallback text so notifications look nice msg.set_fallback_text( f"{self.incident.report} reported by {user_reference(self.incident.reporter)}" ) # Add report/people msg.add_block( Section(block_id="report", text=Text(f"*{self.incident.report}*"))) msg.add_block( Section( block_id="reporter", text=Text( f"🙋🏻♂️ Reporter: {user_reference(self.incident.reporter.external_id)}" ))) incident_lead_text = user_reference( self.incident.lead.external_id) if self.incident.lead else "-" msg.add_block( Section(block_id="lead", text=Text(f"👩🚒 Incident Lead: {incident_lead_text}"))) msg.add_block(Divider()) # Add additional info msg.add_block( Section( block_id="status", text=Text( f"{self.incident.status_emoji()} Status: {self.incident.status_text().capitalize()}" ))) severity_text = self.incident.severity_text().capitalize( ) if self.incident.severity_text() else "-" msg.add_block( Section( block_id="severity", text=Text( f"{self.incident.severity_emoji()} Severity: {severity_text}" ))) doc_url = urljoin( settings.SITE_URL, reverse('incident_doc', kwargs={'incident_id': self.incident.pk})) msg.add_block( Section( block_id="incident_doc", text=Text( f"📄 Document: <{doc_url}|Incident {self.incident.pk}>"))) channel_ref = channel_reference( self.comms_channel.channel_id) if self.comms_channel else None if channel_ref: msg.add_block( Section(block_id="comms_channel", text=Text(f"🗣 Comms Channel: {channel_ref or '-'}"))) # Add buttons (if the incident is open) if not self.incident.is_closed(): msg.add_block(Section(text=Text("Need something else?"))) actions = Actions(block_id="actions") # Add all actions mapped by @headline_post_action decorators for key in sorted(SLACK_HEADLINE_POST_ACTION_MAPPINGS.keys()): funclist = SLACK_HEADLINE_POST_ACTION_MAPPINGS[key] for f in funclist: action = f(self) if action: actions.add_element(action) msg.add_block(actions) # Post / update the slack message response = msg.send(settings.INCIDENT_CHANNEL_ID, self.message_ts) logging.info( f"Got response back from Slack after updating headline post: {response}" ) # Save the message ts identifier if not already set if not self.message_ts: self.message_ts = response['ts'] self.save()