Coder Social home page Coder Social logo

pagerduty-notifier's Introduction

PagerDuty Notifier

Alert

PagerDuty Notifier polls the PagerDuty api for new incidents and sends native Mac OS notifications. You can control the notification style as you normally would in System Preference

PagerDuty Notifier is written in go-lang and should run natively on Mac OS, Windows and Linux although the author is running Mac OS so all development and test is only focused on that OS. You are more than welcome to test this on Windows and Linux and do pull-request.

Configuration file

PagerDuty Notifier requires a configuration file .pagerduty.ini in your HOME directory. If one does not exist, a default one will be generated for you (Currently only on Mac OS). You will need to edit it and insert a valid token from PagerDuty.
Create your token here: https://<your-company>.pagerduty.com/api_keys

Example configuration file (which is the default one you will get the first time you run the notifier.):

[main]
# default timezone is UTC
timezone = Europe/Copenhagen
# default pause timeout is "0", which is no timeout
pause.timeout = 60
# clear.on.unpause defines if notifier should clear last timestamp and start notifying from unpause time.
clear.on.unpause = false

[pagerduty]
# You need to add your Pagerduty API token
token = your-secret-token-here
# default interval between poll's is 30 sec.
interval = 30

# set title of incident notification, use golang text/template references to
# "github.com/PagerDuty/go-pagerduty/incident.go" Incident struct
title = "Incident {{.Status}} at {{.CreatedAt | format}} ({{.Service.Summary}})"

# Optional query parameters for the Pagerduty API
# Use comma separated lists of names (for users also email). You will usually only use one of them.
# If left blank, you will receive all incidents from the account.
teams =
users =
services =

# include and exclude filters is applied (in that order) to all incidents coming from PD API
# with the above query parameters.

# Format is "<property.[!]name> = <incident filter>"" where:
#    <property> is one of "team" or "service"
#    <name> which team or service this filter should be applied
#           optionally the <name> could be prefixed with [!] to indicate the oppersite match
#    <incident filter> regular expression to match the title of the incident
#
# if no include filters is defined, default is to include every incident


# This will include incidents from all services except the "test" service
[include]
service.!test = .*

# This will exclude all incidents to "devops" team that matches ".*test.*"
[exclude]
team.devops = .*test.*

As you can see from the example configuration file, the notifier operates with three levels of 'filters'

  1. First you can choose to query the PagerDuty API to only retrieve alerts for specific users, teams or services.
    • All three query parameters is a comma separated list of names.
    • For users, you can choose between user name or email.
    • If you leave all three empty, you we receive every alert from the account.
  2. Secondly you have a set of include filters, to only include certain alerts. Filters can be set per team/service.
    • If no include filters have been defined, the default will be to include every alert.
  3. Thirdly you have a set of exclude filters, to exclude specific alerts. These can also be set per team/service.

Looking in your HOME directory, apart from the configuration file, you will also find a timestamp file .pagerduty.ts with the time of last seen alert. This is to make sure that you will be notified about all alerts, even if your laptop have been sleeping for a while.

Future features

  • Chose between multiple pause intervals from menu
  • Acknowledge an alert directly from the notification.
  • Overview of alerts from today in menu

pagerduty-notifier's People

Contributors

frese avatar dnwe avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.