|
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | import json |
3 | 3 | import logging |
4 | | - |
| 4 | +import os.path |
5 | 5 | import requests |
6 | 6 |
|
7 | 7 | from .alerts import Alerter |
@@ -33,6 +33,7 @@ def __init__(self, *args): |
33 | 33 | self.alias = self.rule.get('opsgenie_alias') |
34 | 34 | self.opsgenie_proxy = self.rule.get('opsgenie_proxy', None) |
35 | 35 | self.priority = self.rule.get('opsgenie_priority') |
| 36 | + self.opsgenie_details = self.rule.get('opsgenie_details', {}) |
36 | 37 |
|
37 | 38 | def _parse_responders(self, responders, responder_args, matches, default_responders): |
38 | 39 | if responder_args: |
@@ -97,6 +98,10 @@ def alert(self, matches): |
97 | 98 | if self.alias is not None: |
98 | 99 | post['alias'] = self.alias.format(**matches[0]) |
99 | 100 |
|
| 101 | + details = self.get_details(matches) |
| 102 | + if details: |
| 103 | + post['details'] = details |
| 104 | + |
100 | 105 | logging.debug(json.dumps(post)) |
101 | 106 |
|
102 | 107 | headers = { |
@@ -162,3 +167,19 @@ def get_info(self): |
162 | 167 | if self.teams: |
163 | 168 | ret['teams'] = self.teams |
164 | 169 | return ret |
| 170 | + |
| 171 | + def get_details(self, matches): |
| 172 | + details = {} |
| 173 | + |
| 174 | + for key, value in self.opsgenie_details.items(): |
| 175 | + |
| 176 | + if type(value) is dict: |
| 177 | + if 'field' in value: |
| 178 | + field_value = lookup_es_key(matches[0], value['field']) |
| 179 | + if field_value is not None: |
| 180 | + details[key] = str(field_value) |
| 181 | + |
| 182 | + elif type(value) is str: |
| 183 | + details[key] = os.path.expandvars(value) |
| 184 | + |
| 185 | + return details |
0 commit comments