Example #1
0
def handle_update_incident_action(user_id,
                                  user_email,
                                  incident_id,
                                  action,
                                  db_session=None):
    """Messages slack dialog data into something that Dispatch can use."""
    submission = action["submission"]
    notify = True if submission["notify"] == "Yes" else False
    incident_in = IncidentUpdate(
        title=submission["title"],
        description=submission["description"],
        incident_type={"name": submission["type"]},
        incident_priority={"name": submission["priority"]},
        status=submission["status"],
        visibility=submission["visibility"],
    )

    incident = incident_service.get(db_session=db_session,
                                    incident_id=incident_id)
    existing_incident = IncidentRead.from_orm(incident)
    incident_service.update(db_session=db_session,
                            incident=incident,
                            incident_in=incident_in)
    incident_flows.incident_update_flow(user_email, incident_id,
                                        existing_incident, notify)
Example #2
0
def handle_update_incident_action(
    user_id: str,
    user_email: str,
    channel_id: str,
    incident_id: int,
    action: dict,
    db_session=None,
    slack_client=None,
):
    """Massages slack dialog data into something that Dispatch can use."""
    submission = action["submission"]
    notify = True if submission["notify"] == "Yes" else False
    incident_in = IncidentUpdate(
        title=submission["title"],
        description=submission["description"],
        incident_type={"name": submission["type"]},
        incident_priority={"name": submission["priority"]},
        status=submission["status"],
        visibility=submission["visibility"],
    )

    incident = incident_service.get(db_session=db_session, incident_id=incident_id)
    existing_incident = IncidentRead.from_orm(incident)
    incident_service.update(db_session=db_session, incident=incident, incident_in=incident_in)
    incident_flows.incident_update_flow(user_email, incident_id, existing_incident, notify)

    dispatch_slack_service.send_ephemeral_message(
        slack_client, channel_id, user_id, "You have sucessfully updated the incident."
    )
Example #3
0
def update_incident_from_submitted_form(
    user_id: str,
    user_email: str,
    channel_id: str,
    incident_id: int,
    action: dict,
    config: SlackConversationConfiguration = None,
    db_session=None,
    slack_client=None,
):
    """Massages slack dialog data into something that Dispatch can use."""
    submitted_form = action.get("view")
    parsed_form_data = parse_submitted_form(submitted_form)
    incident = incident_service.get(db_session=db_session, incident_id=incident_id)

    tags = []
    for t in parsed_form_data.get(IncidentBlockId.tags, []):
        # we have to fetch as only the IDs are embedded in slack
        tag = tag_service.get(db_session=db_session, tag_id=int(t["value"]))
        tags.append(tag)

    incident_in = IncidentUpdate(
        title=parsed_form_data[IncidentBlockId.title],
        description=parsed_form_data[IncidentBlockId.description],
        resolution=parsed_form_data[IncidentBlockId.resolution],
        incident_type={"name": parsed_form_data[IncidentBlockId.type]["value"]},
        incident_priority={"name": parsed_form_data[IncidentBlockId.priority]["value"]},
        status=parsed_form_data[IncidentBlockId.status]["value"],
        tags=tags,
    )

    previous_incident = IncidentRead.from_orm(incident)

    # we don't allow visibility to be set in slack so we copy it over
    incident_in.visibility = incident.visibility

    updated_incident = incident_service.update(
        db_session=db_session, incident=incident, incident_in=incident_in
    )

    commander_email = updated_incident.commander.individual.email
    reporter_email = updated_incident.reporter.individual.email
    incident_flows.incident_update_flow(
        user_email,
        commander_email,
        reporter_email,
        incident_id,
        previous_incident,
        db_session=db_session,
    )

    if updated_incident.status != IncidentStatus.closed:
        send_ephemeral_message(
            slack_client, channel_id, user_id, "You have sucessfully updated the incident."
        )
Example #4
0
def update_incident_from_submitted_form(
    user_id: str,
    user_email: str,
    channel_id: str,
    incident_id: int,
    action: dict,
    db_session=None,
    slack_client=None,
):
    """Massages slack dialog data into something that Dispatch can use."""
    submitted_form = action.get("view")
    parsed_form_data = parse_submitted_form(submitted_form)

    tags = []
    for t in parsed_form_data.get(IncidentBlockId.tags, []):
        tags.append({"id": t["value"]})

    incident_in = IncidentUpdate(
        title=parsed_form_data[IncidentBlockId.title],
        description=parsed_form_data[IncidentBlockId.description],
        incident_type={"name": parsed_form_data[IncidentBlockId.type]["value"]},
        incident_priority={"name": parsed_form_data[IncidentBlockId.priority]["value"]},
        status=parsed_form_data[IncidentBlockId.status]["value"],
        tags=tags,
    )

    incident = incident_service.get(db_session=db_session, incident_id=incident_id)
    existing_incident = IncidentRead.from_orm(incident)

    # we don't allow visibility to be set in slack so we copy it over
    incident_in.visibility = incident.visibility

    updated_incident = incident_service.update(
        db_session=db_session, incident=incident, incident_in=incident_in
    )
    incident_flows.incident_update_flow(
        user_email, incident_id, existing_incident, db_session=db_session
    )

    if updated_incident.status != IncidentStatus.closed:
        send_ephemeral_message(
            slack_client, channel_id, user_id, "You have sucessfully updated the incident."
        )