Build Code
Climate Test
Coverage Issue
Count

NineOneOne

Common notification logic for PagerDuty/Slack notifications.

Please note that starting with version 1.0.0 this gem uses Pager Duty events api V2, which breaks backwards compatibility. If you don't want to change your existing API V1 calls made via this game please stick to 0.X.0 version. If you migrate though, please make sure all the trigger_event function calls in your app got updated and meet the new param requirements.

Installation

Add this line to your application's Gemfile:

gem 'nine_one_one'

And then execute:

$ bundle

Or install it yourself as:

$ gem install nine_one_one

Configuration

By default NineOneOne logs notifications and emergencies to STDOUT. You can override default settings with:

NineOneOne.configure do |config|
    # Use Pager Duty API for emergencies (defaults to false)
    config.send_pagers = true
    config.pager_duty_integration_key = 'pager-api-key'

    # Post notifications using Slack Webhook URL (defaults to false)
    config.slack_enabled = true
    config.slack_webhook_url = 'https://hooks.slack.com/services/XXX/YYY/ZZZ'

    # Customize Slack username. If left blank NineOneOne will use the username specified in the Slack webkhook integration
    config.slack_username = 'NineOneOne'

    # Customize Slack channel. If left blank NineOneOne will use the channel specified in the Slack webkhook integration
    config.slack_channel = '#my-notifications'

    # Use custom logger - it must implement .info(string) and .error(string) methods
    # Defaults to Logger.new(STDOUT)
    config.logger = Logger.new('incidents.log') 
end

# optional custom configurations

NineOneOne.configure(:my_custom_configuration) do |config|
    config.send_pagers = false

    config.slack_enabled = true
    config.slack_webhook_url = 'https://hooks.slack.com/services/XXX/YYY/ZZZ'

    config.slack_username = 'NineOneOne'
    config.slack_channel = '#my-notifications'
end

Usage

# Send message to Slack channel or log it using logger depending on the `slack_enabled` config parameter
NineOneOne.notify('Something happened!')
# You can also send a hash message (compatible with the slack message spec: https://api.slack.com/docs/messages/builder) 
NineOneOne.notify({attachments: [{title: 'Something happened!', text: 'More info'}]})

# Send pager or log emergency using logger depending on the `send_pagers` config parameter
NineOneOne.emergency('Emergency message!', details_hash: { optional_hash: 'with details' })

# Send multiple pagers that will be grouped into one incident
NineOneOne.emergency('Emergency message!', dedup_key: 'Kinda unique key') 

# same for custom configurations
NineOneOne.use(:my_custom_configuration).notify('Something happened!')
NineOneOne.use(:my_custom_configuration).emergency('Emergency message!', details_hash: { optional_hash: 'with details' })

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

Changelog

2.0.0 Change the interface to have default parameters. Introduce dedup_key. It's backwards incompatible again.

1.0.0 Migrate to Pager Duty Events API V2 (backwards incompatible!) and add support for slack hash message.

0.3.0 Allow to have multiple configurations for notifications

0.2.0 Add the ability to customize slack username and channel

0.1.0 Initial version of the gem implementing Slack and Pager Duty services

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/u2i/nine_one_one.