Skip to content

Commit 6ba9af1

Browse files
authored
Merge pull request #23 from dkorn/delete_group_trigger
Add support for group trigger deletion in hawkular alerts
2 parents c29d801 + 52e1edd commit 6ba9af1

3 files changed

Lines changed: 43 additions & 6 deletions

File tree

hawkular/alerts.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ def create_group_trigger(self, trigger):
155155
data = self._serialize_object(trigger)
156156
return Trigger(self._post(self._service_url(['triggers', 'groups']), data))
157157

158+
def delete_group_trigger(self, group_id, keep_non_orphans=False, keep_orphans=False):
159+
"""
160+
Delete a group trigger
161+
:param group_id: ID of the group trigger to delete
162+
:param keep_non_orphans: if True converts the non-orphan member triggers to standard triggers
163+
:param keep_orphans: if True converts the orphan member triggers to standard triggers
164+
"""
165+
params = {'keepNonOrphans': str(keep_non_orphans).lower(), 'keepOrphans': str(keep_orphans).lower()}
166+
self._delete(self._service_url(['triggers', 'groups', group_id], params=params))
167+
158168
def create_group_member(self, member):
159169
data = self._serialize_object(member)
160170
return Trigger(self._post(self._service_url(['triggers', 'groups', 'members']), data))

hawkular/client.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ def _get_status_url(self):
165165
def tenant(self, tenant_id):
166166
self.tenant_id = tenant_id
167167

168-
def _http(self, url, method, data=None, decoder=None):
168+
def _http(self, url, method, data=None, decoder=None, parse_json=True):
169169
res = None
170170
req = Request(url=url)
171171
req.add_header('Content-Type', 'application/json')
@@ -193,10 +193,13 @@ def _http(self, url, method, data=None, decoder=None):
193193
req.get_method = lambda: method
194194
res = urlopen(req, context=self.context)
195195

196-
if res.getcode() == 200:
197-
data = json.load(reader(res), cls=decoder)
198-
elif res.getcode() == 204:
199-
data = {}
196+
if parse_json:
197+
if res.getcode() == 200:
198+
data = json.load(reader(res), cls=decoder)
199+
elif res.getcode() == 204:
200+
data = {}
201+
else:
202+
data = reader(res).read()
200203

201204
return data
202205

@@ -211,7 +214,7 @@ def _put(self, url, data):
211214
return self._http(url, 'PUT', data)
212215

213216
def _delete(self, url):
214-
return self._http(url, 'DELETE')
217+
return self._http(url, 'DELETE', parse_json=False)
215218

216219
def _post(self, url, data):
217220
return self._http(url, 'POST', data)

tests/test_alerts.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@
2222
import os
2323
from tests import base
2424

25+
try:
26+
# Python 3
27+
from urllib.error import HTTPError
28+
except ImportError:
29+
# Fall back to Python 2's urllib2
30+
from urllib2 import HTTPError
31+
2532

2633
class TestAlertsFunctionsBase(unittest.TestCase):
2734
def setUp(self):
@@ -125,6 +132,23 @@ def test_create_group_trigger(self):
125132
self.assertEqual(created_group_trigger.id, trigger.id)
126133
self.assertEqual(created_group_trigger.name, trigger.name)
127134

135+
def test_delete_group_trigger(self):
136+
# Create a group trigger
137+
gt = Trigger()
138+
gt.id = 'delete_group_trigger'
139+
gt.name = 'group_trigger_to_delete'
140+
self.client.create_group_trigger(gt)
141+
142+
group_count = len(self.client.list_triggers())
143+
# Delete the created group trigger
144+
self.client.delete_group_trigger('delete_group_trigger')
145+
146+
# Compare number of remaining triggers and query the deleted trigger id
147+
self.assertEqual(len(self.client.list_triggers()), group_count-1)
148+
with self.assertRaises(HTTPError) as e:
149+
self.client.get_trigger('delete_group_trigger')
150+
self.assertEqual(e.getcode(), 404)
151+
128152
def test_create_groups(self):
129153
# Create a group trigger
130154
t = Trigger()

0 commit comments

Comments
 (0)