All Projects → monzo → Response

monzo / Response

Licence: mit
Monzo's real-time incident response and reporting tool ⚡️

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Response

Cortex
Cortex: a Powerful Observable Analysis and Active Response Engine
Stars: ✭ 676 (-46.01%)
Mutual labels:  response, incident-response
Ioc Explorer
Explore Indicators of Compromise Automatically
Stars: ✭ 73 (-94.17%)
Mutual labels:  incident-response
Ios Triage
incident response tool for iOS devices
Stars: ✭ 42 (-96.65%)
Mutual labels:  incident-response
Timezone Butler
⏰🤵 A Slack butler who will take care of the timezone differences in your team.
Stars: ✭ 63 (-94.97%)
Mutual labels:  slack-bot
Scripting
PS / Bash / Python / Other scripts For FUN!
Stars: ✭ 47 (-96.25%)
Mutual labels:  incident-response
Hubcommander
A Slack bot for GitHub organization management -- and other things too
Stars: ✭ 1,149 (-8.23%)
Mutual labels:  slack-bot
Reviewbot
Reviewbot is a Slack bot that shows reviewable pull requests.
Stars: ✭ 40 (-96.81%)
Mutual labels:  slack-bot
Alertjs
Dialog Builder allows you to create fully customisable dialogs and popups in Dynamics 365.
Stars: ✭ 80 (-93.61%)
Mutual labels:  response
Aura.http
HTTP Request and Response tools
Stars: ✭ 69 (-94.49%)
Mutual labels:  response
Multiformat Response Objects
Response objects for handling multiple response formats within the one controller
Stars: ✭ 59 (-95.29%)
Mutual labels:  response
Alagarr
🦍 Alagarr is a request-response helper library that removes the boilerplate from your Node.js (AWS Lambda) serverless functions and helps make your code portable.
Stars: ✭ 58 (-95.37%)
Mutual labels:  response
Marvin
The paranoid bot (framework)
Stars: ✭ 51 (-95.93%)
Mutual labels:  slack-bot
Jbot
Make Slack and Facebook Bots in Java.
Stars: ✭ 1,148 (-8.31%)
Mutual labels:  slack-bot
Historicprocesstree
An Incident Response tool that visualizes historic process execution evidence (based on Event ID 4688 - Process Creation Event) in a tree view.
Stars: ✭ 46 (-96.33%)
Mutual labels:  incident-response
Yara Endpoint
Yara-Endpoint is a tool useful for incident response as well as anti-malware enpoint base on Yara signatures.
Stars: ✭ 75 (-94.01%)
Mutual labels:  incident-response
Analyst Casefile
Maltego CaseFile entities for information security investigations, malware analysis and incident response
Stars: ✭ 41 (-96.73%)
Mutual labels:  incident-response
Wheel Of Misfortune
A role-playing game for incident management training
Stars: ✭ 57 (-95.45%)
Mutual labels:  incident-response
Busy Beaver
The Chicago Python Community Engagement Slack bot
Stars: ✭ 66 (-94.73%)
Mutual labels:  slack-bot
Wazuh Documentation
Wazuh - Project documentation
Stars: ✭ 82 (-93.45%)
Mutual labels:  incident-response
Slacky
🐍 The BEST Slack Selfbot on GitHub | No Bot User, Acts Like It's You! ⭐️
Stars: ✭ 80 (-93.61%)
Mutual labels:  slack-bot

PyPI PyPI - Python Version PyPI - Django Version Travis (.org) GitHub

Response ⚡

Dealing with incidents can be stressful. On top of dealing with the issue at hand, responders are often responsible for handling comms, coordinating the efforts of other engineers, and reporting what happened after the fact. Monzo built Response to help reduce the pressure and cognitive burden on engineers during an incident, and to make it easy to create information rich reports for others to learn from.


The headline post when an incident is declared

If you're interested in how we use this tool at Monzo, there's an overview in this video.


Try it out

Response is a Django app which you can include in your project. If you're just looking to give it a try, follow the instuctions for the demo app!


Adding Response to your own project

Start a new Django project, if you don't have one already:

$ django-admin startproject myincidentresponse

Install response:

$ pip install django-incident-response

In settings.py, add these lines to INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    "after_response",
    "rest_framework",
    "bootstrap4",
    "response.apps.ResponseConfig",
]

Add the following to settings.py:

USE_TZ = False # if this exists elsewhere in your settings.py, just update the value

STATIC_ROOT = "static"

# Django Rest Framework
REST_FRAMEWORK = {
    "PAGE_SIZE": 100,
    "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
    "DEFAULT_PERMISSION_CLASSES": [
        "rest_framework.permissions.IsAuthenticated",
    ],
}
#

# Markdown Filter
MARKDOWN_FILTER_WHITELIST_TAGS = [
    "a", "p", "code", "h1", "h2", "ul", "li", "strong", "em", "img",
]

MARKDOWN_FILTER_WHITELIST_ATTRIBUTES = ["src", "style"]

MARKDOWN_FILTER_WHITELIST_STYLES = [
    "width", "height", "border-color", "background-color", "white-space",
    "vertical-align", "text-align", "border-style", "border-width", "float",
    "margin", "margin-bottom", "margin-left", "margin-right", "margin-top",
]

RESPONSE_LOGIN_REQUIRED = True

In urls.py, add the following to urlpatterns (you may also need to import include):

urlpatterns = [
    ...
    path('slack/', include('response.slack.urls')),
    path('core/', include('response.core.urls')),
    path('', include('response.ui.urls')),
]

Completing the setup and config with Slack

1. Create a Slack App

Follow these instructions to create a new Slack App.

2. Update your settings.py

Environment Variable Descriptions
SLACK_TOKEN Response needs an OAuth access token to use the Slack API.

Copy the Bot Token that starts xoxb-... from the OAuth & Permissions section of your Slack App and use it to set the SLACK_TOKEN variable.
SITE_URL Response needs to know where it is running in order to create links to the UI in Slack. Whilst running locally, you might want this set to something like http://localhost:8000.
SLACK_SIGNING_SECRET Response uses the Slack signing secret to restrict access to public endpoints.

Copy the Signing secret from the Basic Information page and use it to set the SIGNING SECRET variable.
INCIDENT_CHANNEL_ID When an incident is declared, a 'headline' post is sent to a central channel.

See the demo app settings for an example of how to get the incident channel ID from the Slack API.
INCIDENT_BOT_ID We want to invite the Bot to all Incident Channels, so need to know its ID.

See the demo app settings for an example of how to get the bot ID from the Slack API.
SLACK_CLIENT Response needs a shared global instance of a Slack Client to talk to the Slack API. Typically this does not require any additional configuration.
from response.slack.client import SlackClient
SLACK_CLIENT = SlackClient(SLACK_TOKEN)

3. Running the server

Before you can complete the Slack app setup, you need to have the app running somewhere that's accesible to to the internet. That means either deploying your Django project somewhere (see here or running it locally and exposing with something like ngrok.

For simplicity, we'll assume you're developing using ngrok.

First make sure your DB is fully migrated and up-to-date:

python3 manage.py migrate

Next, run the Django development server:

python3 manage.py runserver 0.0.0.0:8000

Finally, run ngrok:

ngrok http 8000

Make note of the ngrok url as you'll need it in the following section as the public-url.

4. Complete the Slack App Setup

Head back to the Slack web UI and complete the configuration of your app, as described here.

5. Test it's working!

In Slack, start an incident with /incident Something's happened. You should see a post in your incidents channel!

  • Visit the incident doc by clicking the Doc link.
  • Create a comms channel by clicking the button.
  • In the comms channel check out the @incident commands. You can find the ones available by entering @incident help.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].