Source code for i3pystatus.pagerduty

from i3pystatus import IntervalModule
from i3pystatus.core.util import internet, require, formatp

import pypd

__author__ = 'chestm007'


[docs]class PagerDuty(IntervalModule): """ Module to get the current incidents in PD Requires `pypd` Formatters: * `{num_incidents}` - current number of incidents unresolved * `{num_acknowledged_incidents}` - as it sounds * `{num_triggered_incidents}` - number of unacknowledged incidents Example: .. code-block:: python status.register( 'pagerduty', api_key='mah_api_key', user_id='LKJ19QW' ) """ settings = ( 'format', ('api_key', 'pagerduty api key'), ('color', 'module text color'), ('interval', 'refresh interval'), ('user_id', 'your pagerduty user id, shows up in the url when viewing your profile ' '`https://subdomain.pagerduty.com/users/<user_id>`') ) required = ['api_key'] format = '{num_triggered_incidents} triggered {num_acknowledged_incidents} acknowledged' api_key = None color = '#AA0000' interval = 60 user_id = None api_search_dict = dict(statuses=['triggered', 'acknowledged']) num_acknowledged_incidents = None num_triggered_incidents = None num_incidents = None def init(self): pypd.api_key = self.api_key if self.user_id: self.api_search_dict['user_ids'] = [self.user_id] @require(internet) def run(self): pd_incidents = pypd.Incident.find(**self.api_search_dict) incidents = { 'acknowledged': [], 'triggered': [], 'all': [] } for incident in pd_incidents: incidents['all'].append(incident) status = incident.get('status') if status == 'acknowledged': incidents['acknowledged'].append(incident) elif status == 'triggered': incidents['triggered'].append(incident) self.num_acknowledged_incidents = len(incidents.get('acknowledged')) self.num_triggered_incidents = len(incidents.get('triggered')) self.num_incidents = len(incidents.get('all')) self.output = dict( full_text=formatp(self.format, **vars(self)), color=self.color )