Adding acking to OpsGenie (#343)
* Adding acking to OpsGenie * Fixing invalid variable Co-authored-by: Daren Lord <{ID}+{username}@users.noreply.github.com>
This commit is contained in:
parent
a7516711c2
commit
5e1bf571d7
3 changed files with 34 additions and 6 deletions
plugins/opsgenie
|
@ -44,6 +44,13 @@ the Alerta console:
|
||||||
DASHBOARD_URL = '' # default="not set"
|
DASHBOARD_URL = '' # default="not set"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The `OPSGENIE_SEND_WARN` setting should be configured if you would like to send
|
||||||
|
informational and warning alerts onto OpsGenie.
|
||||||
|
|
||||||
|
```python
|
||||||
|
OPSGENIE_SEND_WARN = True # default=True
|
||||||
|
```
|
||||||
|
|
||||||
**Example**
|
**Example**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
@ -51,6 +58,7 @@ PLUGINS = ['reject', 'opsgenie']
|
||||||
OPSGENIE_SERVICE_KEY = '54A634B1-FB0C-4758-840F-5D808C89E70E'
|
OPSGENIE_SERVICE_KEY = '54A634B1-FB0C-4758-840F-5D808C89E70E'
|
||||||
SERVICE_KEY_MATCHERS = [ {"regex":"proxy[\\d+]","api_key":"6b982ii3l8p834566oo13zx9477p1zxd"} ]
|
SERVICE_KEY_MATCHERS = [ {"regex":"proxy[\\d+]","api_key":"6b982ii3l8p834566oo13zx9477p1zxd"} ]
|
||||||
DASHBOARD_URL = 'https://try.alerta.io'
|
DASHBOARD_URL = 'https://try.alerta.io'
|
||||||
|
OPSGENIE_SEND_WARN = False
|
||||||
```
|
```
|
||||||
|
|
||||||
References
|
References
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -15,8 +14,10 @@ LOG.info('Initializing')
|
||||||
|
|
||||||
OPSGENIE_EVENTS_CREATE_URL = 'https://api.opsgenie.com/v2/alerts'
|
OPSGENIE_EVENTS_CREATE_URL = 'https://api.opsgenie.com/v2/alerts'
|
||||||
OPSGENIE_EVENTS_CLOSE_URL = 'https://api.opsgenie.com/v2/alerts/%s/close?identifierType=alias'
|
OPSGENIE_EVENTS_CLOSE_URL = 'https://api.opsgenie.com/v2/alerts/%s/close?identifierType=alias'
|
||||||
|
OPSGENIE_EVENTS_ACK_URL = 'https://api.opsgenie.com/v2/alerts/%s/acknowledge?identifierType=alias'
|
||||||
OPSGENIE_SERVICE_KEY = os.environ.get('OPSGENIE_SERVICE_KEY') or app.config['OPSGENIE_SERVICE_KEY']
|
OPSGENIE_SERVICE_KEY = os.environ.get('OPSGENIE_SERVICE_KEY') or app.config['OPSGENIE_SERVICE_KEY']
|
||||||
OPSGENIE_TEAMS = os.environ.get('OPSGENIE_TEAMS', '') # comma separated list of teams
|
OPSGENIE_TEAMS = os.environ.get('OPSGENIE_TEAMS', '') # comma separated list of teams
|
||||||
|
OPSGENIE_SEND_WARN = os.environ.get('OPSGENIE_SEND_WARN') or app.config.get('OPSGENIE_SEND_WARN', False)
|
||||||
SERVICE_KEY_MATCHERS = os.environ.get('SERVICE_KEY_MATCHERS') or app.config['SERVICE_KEY_MATCHERS']
|
SERVICE_KEY_MATCHERS = os.environ.get('SERVICE_KEY_MATCHERS') or app.config['SERVICE_KEY_MATCHERS']
|
||||||
DASHBOARD_URL = os.environ.get('DASHBOARD_URL') or app.config.get('DASHBOARD_URL', '')
|
DASHBOARD_URL = os.environ.get('DASHBOARD_URL') or app.config.get('DASHBOARD_URL', '')
|
||||||
LOG.info('Initialized: %s key, %s matchers' % (OPSGENIE_SERVICE_KEY, SERVICE_KEY_MATCHERS))
|
LOG.info('Initialized: %s key, %s matchers' % (OPSGENIE_SERVICE_KEY, SERVICE_KEY_MATCHERS))
|
||||||
|
@ -51,6 +52,21 @@ class TriggerEvent(PluginBase):
|
||||||
raise RuntimeError("OpsGenie connection error: %s" % e)
|
raise RuntimeError("OpsGenie connection error: %s" % e)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
def opsgenie_ack_alert(self, alert, why):
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Authorization": 'GenieKey ' + self.opsgenie_service_key(alert.resource)
|
||||||
|
}
|
||||||
|
|
||||||
|
ackUrl = OPSGENIE_EVENTS_ACK_URL % alert.id
|
||||||
|
LOG.debug('OpsGenie ack %s: %s %s' % (why, alert.id, ackUrl))
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = requests.post(ackUrl, json={}, headers=headers, timeout=2)
|
||||||
|
except Exception as e:
|
||||||
|
raise RuntimeError("OpsGenie connection error: %s" % e)
|
||||||
|
return r
|
||||||
|
|
||||||
def pre_receive(self, alert):
|
def pre_receive(self, alert):
|
||||||
return alert
|
return alert
|
||||||
|
|
||||||
|
@ -63,7 +79,8 @@ class TriggerEvent(PluginBase):
|
||||||
# If alerta has cleared or status is closed, send the close to opsgenie
|
# If alerta has cleared or status is closed, send the close to opsgenie
|
||||||
if (alert.severity in ['cleared', 'normal', 'ok']) or (alert.status == 'closed'):
|
if (alert.severity in ['cleared', 'normal', 'ok']) or (alert.status == 'closed'):
|
||||||
r = self.opsgenie_close_alert(alert, 'CREATE-CLOSE')
|
r = self.opsgenie_close_alert(alert, 'CREATE-CLOSE')
|
||||||
|
elif (alert.severity in ['warning', 'informational']) and not OPSGENIE_SEND_WARN:
|
||||||
|
LOG.info('Just informational or warning not sending to OpsGenie')
|
||||||
else:
|
else:
|
||||||
headers = {
|
headers = {
|
||||||
"Authorization": 'GenieKey ' + self.opsgenie_service_key(alert.resource)
|
"Authorization": 'GenieKey ' + self.opsgenie_service_key(alert.resource)
|
||||||
|
@ -98,7 +115,7 @@ class TriggerEvent(PluginBase):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise RuntimeError("OpsGenie connection error: %s" % e)
|
raise RuntimeError("OpsGenie connection error: %s" % e)
|
||||||
|
|
||||||
LOG.debug('OpsGenie response: %s - %s' % (r.status_code, r.text))
|
LOG.debug('OpsGenie response: %s - %s' % (r.status_code, r.text))
|
||||||
|
|
||||||
# generate list of responders from OPSGENIE_TEAMS env var
|
# generate list of responders from OPSGENIE_TEAMS env var
|
||||||
def get_opsgenie_teams(self):
|
def get_opsgenie_teams(self):
|
||||||
|
@ -112,9 +129,12 @@ class TriggerEvent(PluginBase):
|
||||||
LOG.debug('Alert change %s to %s: %s' % (alert.id, status, alert.get_body(history=False)))
|
LOG.debug('Alert change %s to %s: %s' % (alert.id, status, alert.get_body(history=False)))
|
||||||
|
|
||||||
if status not in ['ack', 'assign', 'closed']:
|
if status not in ['ack', 'assign', 'closed']:
|
||||||
LOG.debug('Not sending status change to opsgenie: %s to %s' % (alert.id, status))
|
LOG.debug('Not sending status change to opsgenie: %s to %s' % (alert.id, status))
|
||||||
return
|
return
|
||||||
|
|
||||||
r = self.opsgenie_close_alert(alert, 'STATUS-CLOSE')
|
if status == 'closed':
|
||||||
|
r = self.opsgenie_close_alert(alert, 'STATUS-CLOSE')
|
||||||
|
elif status == 'ack':
|
||||||
|
r = self.opsgenie_ack_alert(alert, 'STATUS-ACK')
|
||||||
|
|
||||||
LOG.debug('OpsGenie response: %s - %s' % (r.status_code, r.text))
|
LOG.debug('OpsGenie response: %s - %s' % (r.status_code, r.text))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
from setuptools import setup, find_packages
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
version = '5.0.2'
|
version = '5.0.3'
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="alerta-opsgenie",
|
name="alerta-opsgenie",
|
||||||
|
|
Loading…
Add table
Reference in a new issue