Skip to content
forked from ustream/openduty

An open source Alerting and incident escalation tool

License

Notifications You must be signed in to change notification settings

elmobp/openduty

 
 

Repository files navigation

Build status

Gitter image Requirements Status

What is this?

Openduty is an incident escalation tool, just like Pagerduty . It has a Pagerduty compatible API too. It's the result of the first Ustream Hackathon. We enjoyed working on it. #Integrations Has been tested with Nagios, works well for us. Any Pagerduty Notifier using the Pagerduty API should work without a problem. Icinga2 config for openduty integration

Notifications

XMPP, email, SMS, Phone(Thanks Twilio for being awesome!), and Push notifications(thanks Pushover also),Slack and ServiceNow are supported at the moment.

Current status

Openduty is in Beta status, it can be considered stable at the moment, however major structural changes can appear anytime (not affecting the API, or the Notifier structure)

Contribution guidelines

Yes, please. You are welcome.

Feedback

Any feedback is welcome

Try it

go to http://openduty.herokuapp.com , log in with root/toor , create your own user. In heroku demo mode user edit feature is disabled, so you can't misbehave.

Running on Heroku

add the parts below to your settings.py and add psycopg2==2.5.1 to your requirements.txt

# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']

# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Contributors at Ustream

The team

Main contributors

Other contributors

Getting started:

Easy way

This will bring up a OepnDuty container + a MySQL container and rpreload a user with the name admin and password of password in!

cd extra/docker
docker-compose up

Hard way!

sudo easy_install pip
sudo pip install virtualenv
virtualenv env --python python2.7
. env/bin/activate
pip install -r requirements.txt
export DJANGO_SETTINGS_MODULE=openduty.settings_dev
python manage.py syncdb
python manage.py migrate
python manage.py collectstatic
python manage.py runserver

now, you can start hacking on it.

After models you've changed your models please run:

./manage.py schemamigration openduty --auto
./manage.py schemamigration notification --auto
./manage.py migrate

If you see a new file appearing in migrations directory when pulling from upstream please run

./manage.py migrate

Default login:

root/toor

Celery worker:

celery -A openduty worker -l info

Login with SAML

OD provides no SAML metadata Download the Federation Metadata from ADFS and place it in /opt/openduty/openduty/metadata.xml In the ADFS console add a Relying Party Trust Enter the data manually option Display Name:Open Duty Next... ADFS Profile (First option) Skip the certificate section press Next Tick the box enable support for the SAML 2.0 service URL Relying party URL: https://openduty-url/saml2_auth/acs/ Next, Next, Next, Finish! Click on the AC3 Open Duty and press Edit Claim Rules Add rule Send Claims Using Custom Rule Claim Rule Name: OpenDuty attributes Rule:

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
 => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", "UserName", "Email"), query = ";mail,sAMAccountName,mail;{0}", param = c.Value);

Login using basic authentication with LDAP-backend

Add the following snippet to your openduty/settings.py, dont forget about import

AUTH_LDAP_SERVER_URI = "ldap://fqdn:389"
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_START_TLS = False
AUTH_LDAP_MIRROR_GROUPS = True #Mirror LDAP Groups as Django Groups, and populate them as well.
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=Group,dc=domain,dc=com",
    ldap.SCOPE_SUBTREE, "(&(objectClass=posixGroup)(cn=openduty*))"
)
AUTH_LDAP_GROUP_TYPE = PosixGroupType()

AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=People,dc=domain,dc=com",
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")

AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "uid",
"last_name": "sn",
"email": "mail"
}


AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

MIDDLEWARE_CLASSES = MIDDLEWARE_CLASSES + (
  'openduty.middleware.basicauthmiddleware.BasicAuthMiddleware',
)

About

An open source Alerting and incident escalation tool

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • Python 42.7%
  • JavaScript 34.2%
  • CSS 11.3%
  • HTML 11.0%
  • Shell 0.6%
  • Dockerfile 0.2%