From cdb051789fc1ca460bfe757fa43bce9d0bb8b1b4 Mon Sep 17 00:00:00 2001 From: Michael Burman Date: Sun, 8 Oct 2017 12:33:24 +0300 Subject: [PATCH 1/2] Refactor triggers to .triggers() Implement status() method assertItemsEqual to avoid order errors --- hawkular/__init__.py | 25 ++++++-- hawkular/alerts/__init__.py | 36 +++++++++++ hawkular/alerts/common.py | 63 ++++++++++++++++++++ hawkular/{alerts.py => alerts/triggers.py} | 20 +++---- hawkular/client.py | 23 ++++---- hawkular/metrics.py | 6 +- tests/test_alerts.py | 69 +++++++++++----------- 7 files changed, 176 insertions(+), 66 deletions(-) create mode 100644 hawkular/alerts/__init__.py create mode 100644 hawkular/alerts/common.py rename hawkular/{alerts.py => alerts/triggers.py} (97%) diff --git a/hawkular/__init__.py b/hawkular/__init__.py index 9406b92..a99e284 100644 --- a/hawkular/__init__.py +++ b/hawkular/__init__.py @@ -1,6 +1,22 @@ -from .metrics import HawkularMetricsClient, MetricType, Availability -from .alerts import HawkularAlertsClient, Trigger, FullTrigger, Condition, Dampening, FullTrigger, GroupMemberInfo -from .alerts import GroupConditionsInfo, TriggerType, TriggerMode, DampeningType, ConditionType, Operator, Severity +""" + Copyright 2015-2017 Red Hat, Inc. and/or its affiliates + and other contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" +from hawkular.metrics import HawkularMetricsClient, MetricType, Availability +from hawkular.alerts import HawkularAlertsClient, Trigger, FullTrigger, Condition, Dampening, FullTrigger, GroupMemberInfo +from hawkular.alerts import GroupConditionsInfo, TriggerType, TriggerMode, DampeningType, ConditionType, Operator, Severity, Status __all__ = ['HawkularMetricsClient', 'MetricType', @@ -17,4 +33,5 @@ 'DampeningType', 'ConditionType', 'Operator', - 'Severity'] + 'Severity', + 'Status'] diff --git a/hawkular/alerts/__init__.py b/hawkular/alerts/__init__.py new file mode 100644 index 0000000..b476564 --- /dev/null +++ b/hawkular/alerts/__init__.py @@ -0,0 +1,36 @@ +""" + Copyright 2015-2017 Red Hat, Inc. and/or its affiliates + and other contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" +from hawkular.client import ApiObject, HawkularBaseClient +from hawkular.alerts.common import * +from hawkular.alerts.triggers import * + +__all__ = ['HawkularAlertsClient', + 'Trigger', + 'Condition', + 'Dampening', + 'FullTrigger', + 'GroupMemberInfo', + 'GroupConditionsInfo', + 'TriggerType', + 'TriggerMode', + 'DampeningType', + 'ConditionType', + 'Operator', + 'Severity', + 'Status', +] +# 'AlertsTriggerClient'] diff --git a/hawkular/alerts/common.py b/hawkular/alerts/common.py new file mode 100644 index 0000000..047003d --- /dev/null +++ b/hawkular/alerts/common.py @@ -0,0 +1,63 @@ +from hawkular.client import ApiObject, HawkularBaseClient +from hawkular.alerts.triggers import AlertsTriggerClient + +class Status(ApiObject): + __slots__ = [ + 'status', 'implementation_version', 'built_from_git_sha1', 'distributed', 'members' + ] + + def isup(self): + return self.status == 'STARTED' + + def isdistributed(self): + return self.distributed == 'true' + +class HawkularAlertsClient(HawkularBaseClient): + + def __init__(self, **opts): + """ + Available parameters: + + tenant_id, + host='localhost', + port=8080, + path=None, + scheme='http', + cafile=None, + context=None, + token=None, + username=None, + password=None, + auto_set_legacy_api=True, + authtoken=None + """ + prop_defaults = { + "tenant_id": 'hawkular', + "host": 'localhost', + "port": 8080, + "scheme": 'http', + "path": None, + "cafile": None, + "context": None, + "token": None, + "username": None, + "password": None, + "authtoken": None, + } + + for (prop, default) in prop_defaults.items(): + setattr(self, prop, opts.get(prop, default)) + + super(HawkularAlertsClient, self)._setup_path() + + def triggers(self): + """ + Returns triggers methods + """ + return AlertsTriggerClient(self) + + def status(self): + orig_dict = self._get(self._service_url('status')) + orig_dict['implementation_version'] = orig_dict.pop('Implementation-Version') + orig_dict['built_from_git_sha1'] = orig_dict.pop('Built-From-Git-SHA1') + return Status(orig_dict) diff --git a/hawkular/alerts.py b/hawkular/alerts/triggers.py similarity index 97% rename from hawkular/alerts.py rename to hawkular/alerts/triggers.py index b7efb4e..b859464 100644 --- a/hawkular/alerts.py +++ b/hawkular/alerts/triggers.py @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. """ -from hawkular.client import ApiObject, HawkularBaseClient +from hawkular.client import ApiObject class Trigger(ApiObject): __slots__ = [ @@ -34,7 +34,6 @@ class Condition(ApiObject): 'in_range', 'alerter_id', 'expression', 'direction', 'period', 'interval' ] - class Dampening(ApiObject): __slots__ = [ 'trigger_id', 'trigger_mode', 'type', 'eval_true_setting', @@ -56,14 +55,12 @@ def __init__(self, dictionary=dict()): self.dampenings = Dampening.list_to_object_list(udict.get('dampenings')) self.conditions = Condition.list_to_object_list(udict.get('conditions')) - class GroupMemberInfo(ApiObject): __slots__ = [ 'group_id', 'member_id', 'member_name', 'member_description', 'member_context', 'member_tags', 'data_id_map' ] - class GroupConditionsInfo(ApiObject): __slots__ = [ 'conditions', 'data_id_member_map' @@ -77,7 +74,6 @@ def __init__(self, dictionary=dict()): def addCondition(self, c): self.conditions.append(c) - class TriggerType: STANDARD = 'STANDARD' GROUP = 'GROUP' @@ -85,12 +81,10 @@ class TriggerType: MEMBER = 'MEMBER' ORPHAN = 'ORPHAN' - class TriggerMode: FIRING = 'FIRING' AUTORESOLVE = 'AUTORESOLVE' - class DampeningType: STRICT = 'STRICT' RELAXED_COUNT = 'RELAXED_COUNT' @@ -98,7 +92,6 @@ class DampeningType: STRICT_TIME = 'STRICT_TIME' STRICT_TIMEOUT = 'STRICT_TIMEOUT' - class ConditionType: AVAILABILITY = 'AVAILABILITY' COMPARE = 'COMPARE' @@ -110,22 +103,27 @@ class ConditionType: RATE = 'RATE' MISSING = 'MISSING' - class Operator: LT = 'LT' GT = 'GT' LTE = 'LTE' GTE = 'GTE' - class Severity: LOW = 'LOW' MEDIUM = 'MEDIUM' HIGH = 'HIGH' CRITICAL = 'CRITICAL' +class AlertsTriggerClient(object): + + def __init__(self, alerts_client): + self.__client = alerts_client + pass + + def __getattr__(self, name): + return getattr(self.__client, name) -class HawkularAlertsClient(HawkularBaseClient): def list_triggers(self, tags=[]): tags = ','.join(tags) url = self._service_url('triggers', {'tags': tags}) diff --git a/hawkular/client.py b/hawkular/client.py index df2ad06..8056c9a 100644 --- a/hawkular/client.py +++ b/hawkular/client.py @@ -132,7 +132,7 @@ def __init__(self, auto_set_legacy_api=True, authtoken=None): """ - A new instance of HawkularMetricsClient is created with the following defaults: + A new instance of HawkularClient is created with the following defaults: host = localhost port = 8080 @@ -157,24 +157,25 @@ def __init__(self, self.legacy_api = False self.authtoken = authtoken + self._setup_path() + + # Call the server status endpoint to get the version number, + # Use the return sematic version to set the value of legacy_api + if auto_set_legacy_api: + major, minor = self.query_semantic_version() + self.legacy_api = (major == 0 and minor < 16) + + def _setup_path(self): opener = build_opener(HawkularHTTPErrorProcessor()) install_opener(opener) - if path is None: + if self.path is None: class_name = self.__class__.__name__ path_components = ''.join(["_" + c.lower() if c.isupper() else c for c in class_name]).split('_') path_components.pop() - self.path = '/'.join(path_components); - else: - self.path = path + self.path = '/'.join(path_components) self.path = self.path.strip('/') - # Call the server status endpoint to get the version number, - # Use the return sematic version to set the value of legacy_api - if auto_set_legacy_api: - major, minor = self.query_semantic_version() - self.legacy_api = (major == 0 and minor < 16) - def _get_base_url(self): return "{0}://{1}:{2}/{3}/".format(self.scheme, self.host, str(self.port), self.path) diff --git a/hawkular/metrics.py b/hawkular/metrics.py index 55b3467..72efd05 100644 --- a/hawkular/metrics.py +++ b/hawkular/metrics.py @@ -16,11 +16,8 @@ """ from __future__ import unicode_literals -import codecs import time import collections -import base64 -import ssl from datetime import datetime, timedelta try: @@ -28,8 +25,7 @@ except ImportError: import json -from hawkular.client import ApiObject, HawkularBaseClient, HawkularError -from hawkular.client import HawkularConnectionError, HawkularStatusError +from hawkular.client import HawkularBaseClient, HawkularError class MetricType: Gauge = 'gauges' diff --git a/tests/test_alerts.py b/tests/test_alerts.py index 9d7edac..fd1a214 100644 --- a/tests/test_alerts.py +++ b/tests/test_alerts.py @@ -1,5 +1,5 @@ """ - Copyright 2015-2016 Red Hat, Inc. and/or its affiliates + Copyright 2015-2017 Red Hat, Inc. and/or its affiliates and other contributors. Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +19,6 @@ import unittest import uuid from hawkular.alerts import * -import os from tests import base try: @@ -37,7 +36,6 @@ def setUp(self): self.client = HawkularAlertsClient(tenant_id=self.test_tenant, port=8080) - @unittest.skipIf(base.version != 'latest' and base.major_version == 0 and base.minor_version <= 15, 'Not supported in ' + base.version + ' version') class AlertsTestCase(TestAlertsFunctionsBase): @@ -45,11 +43,11 @@ def test_trigger_creation(self): trigger = Trigger() trigger.id = 'id_1' trigger.name = 'test_trigger' - created_trigger = self.client.create_trigger(trigger) + created_trigger = self.client.triggers().create_trigger(trigger) self.assertEqual(trigger.id, created_trigger.id) - triggers = self.client.list_triggers() - self.assertEqual(1, len(triggers)) - self.assertEqual(triggers[0].id, trigger.id) + triggers_list = self.client.triggers().list_triggers() + self.assertEqual(1, len(triggers_list)) + self.assertEqual(triggers_list[0].id, trigger.id) def test_full_trigger_creation(self): trigger = Trigger() @@ -98,18 +96,18 @@ def test_full_trigger_creation(self): full_trigger.dampenings.append(dampening2) full_trigger.conditions = [condition1, condition2, condition3] - created_trigger = self.client.create_trigger(full_trigger) + created_trigger = self.client.triggers().create_trigger(full_trigger) self.assertEqual(trigger.id, created_trigger.trigger.id) # Check if the trigger appears on the list. - triggers = self.client.list_triggers() + triggers = self.client.triggers().list_triggers() self.assertEqual(1, len(triggers)) self.assertEqual(triggers[0].id, trigger.id) # Check if it is possible to get the full trigger. - created_full_trigger = self.client.get_trigger('id_1', True) + created_full_trigger = self.client.triggers().get_trigger('id_1', True) self.assertTrue(isinstance(created_full_trigger, FullTrigger)) self.assertEqual(created_full_trigger.trigger.id, trigger.id) @@ -118,7 +116,7 @@ def test_full_trigger_creation(self): # Check for dampenings. - dampenings = self.client.list_dampenings('id_1') + dampenings = self.client.triggers().list_dampenings('id_1') self.assertEqual(2, len(dampenings)) self.assertEqual(dampenings[0].trigger_id, trigger.id) self.assertEqual(dampenings[1].trigger_id, trigger.id) @@ -127,8 +125,8 @@ def test_create_group_trigger(self): trigger = Trigger() trigger.id = 'group_trigger_1' trigger.name = 'group_trigger_test' - self.client.create_group_trigger(trigger) - created_group_trigger = created_full_trigger = self.client.get_trigger('group_trigger_1') + self.client.triggers().create_group_trigger(trigger) + created_group_trigger = created_full_trigger = self.client.triggers().get_trigger('group_trigger_1') self.assertEqual(created_group_trigger.id, trigger.id) self.assertEqual(created_group_trigger.name, trigger.name) @@ -137,7 +135,7 @@ def test_get_trigger_conditions(self): trigger = Trigger() trigger.id = 'group_trigger_01' trigger.name = 'group_trigger' - self.client.create_group_trigger(trigger) + self.client.triggers().create_group_trigger(trigger) # Create condition objects condition1 = Condition() @@ -165,28 +163,29 @@ def test_get_trigger_conditions(self): gc.addCondition(condition1) gc.addCondition(condition2) gc.addCondition(condition3) - self.client.create_group_conditions(trigger.id, TriggerMode.AUTORESOLVE, gc) + self.client.triggers().create_group_conditions(trigger.id, TriggerMode.AUTORESOLVE, gc) - gc = self.client.get_trigger_conditions(trigger.id) + gc = self.client.triggers().get_trigger_conditions(trigger.id) self.assertEqual(len(gc), 3) gc_dids = [c.data_id for c in gc] - self.assertEqual(gc_dids, ['did1', 'did2', 'did3']) + for g in gc_dids: + self.assertIn(g, ['did1', 'did2', 'did3']) def test_delete_group_trigger(self): # Create a group trigger gt = Trigger() gt.id = 'delete_group_trigger' gt.name = 'group_trigger_to_delete' - self.client.create_group_trigger(gt) + self.client.triggers().create_group_trigger(gt) - group_count = len(self.client.list_triggers()) + group_count = len(self.client.triggers().list_triggers()) # Delete the created group trigger - self.client.delete_group_trigger('delete_group_trigger') + self.client.triggers().delete_group_trigger('delete_group_trigger') # Compare number of remaining triggers and query the deleted trigger id - self.assertEqual(len(self.client.list_triggers()), group_count-1) + self.assertEqual(len(self.client.triggers().list_triggers()), group_count-1) with self.assertRaises(HTTPError) as e: - self.client.get_trigger('delete_group_trigger') + self.client.triggers().get_trigger('delete_group_trigger') self.assertEqual(e.getcode(), 404) def test_create_groups(self): @@ -221,24 +220,24 @@ def test_create_groups(self): dampening.type = DampeningType.STRICT dampening.trigger_id = 'a-group-trigger' - tc = self.client.create_group_trigger(t) + tc = self.client.triggers().create_group_trigger(t) self.assertEqual(tc.type, TriggerType.GROUP) - gcc = self.client.create_group_conditions(t.id, TriggerMode.FIRING, gc) + gcc = self.client.triggers().create_group_conditions(t.id, TriggerMode.FIRING, gc) self.assertEqual(len(gcc), 1) - t_m1c = self.client.create_group_member(m1) + t_m1c = self.client.triggers().create_group_member(m1) self.assertEqual(t_m1c.type, TriggerType.MEMBER) - gm = self.client.get_group_members('a-group-trigger') + gm = self.client.triggers().get_group_members('a-group-trigger') self.assertEqual(len(gm), 1) self.assertEqual(gm[0].id, 'member1') # Delete group member trigger - self.client.delete_trigger('member1') - gm = self.client.get_group_members('a-group-trigger') + self.client.triggers().delete_trigger('member1') + gm = self.client.triggers().get_group_members('a-group-trigger') self.assertFalse(gm) # Create group trigger dampening - self.client.create_group_dampening('a-group-trigger', dampening) - gt = self.client.get_trigger('a-group-trigger', full=True) + self.client.triggers().create_group_dampening('a-group-trigger', dampening) + gt = self.client.triggers().get_trigger('a-group-trigger', full=True) gds = gt.dampenings self.assertEqual(len(gds), 1) self.assertEqual(gds[0].trigger_mode, 'FIRING') @@ -248,19 +247,19 @@ def test_create_groups(self): dampening.type = DampeningType.STRICT_TIME dampening.eval_time_setting = 5 dampening.dampening_id = gds[0].dampening_id - gd = self.client.update_group_dampening('a-group-trigger', dampening.dampening_id, dampening) + gd = self.client.triggers().update_group_dampening('a-group-trigger', dampening.dampening_id, dampening) self.assertEqual(gd.type, 'STRICT_TIME') # Delete group trigger dampening - self.client.delete_group_dampening('a-group-trigger', dampening.dampening_id) - gt = self.client.get_trigger('a-group-trigger', full=True) + self.client.triggers().delete_group_dampening('a-group-trigger', dampening.dampening_id) + gt = self.client.triggers().get_trigger('a-group-trigger', full=True) self.assertFalse(gt.dampenings) # Update group trigger t.enabled = True t.severity = Severity.MEDIUM - self.client.update_group_trigger(t.id, t) - gt = self.client.get_trigger(t.id) + self.client.triggers().update_group_trigger(t.id, t) + gt = self.client.triggers().get_trigger(t.id) self.assertEqual(gt.enabled, True) self.assertEqual(gt.severity, Severity.MEDIUM) From 054abb396f5d5e85567f89ac57cf9e1865c67432 Mon Sep 17 00:00:00 2001 From: Michael Burman Date: Mon, 9 Oct 2017 14:00:03 +0300 Subject: [PATCH 2/2] Change triggers() to triggers. --- hawkular/alerts/common.py | 12 ++++---- hawkular/alerts/triggers.py | 5 ++++ tests/test_alerts.py | 58 ++++++++++++++++++------------------- 3 files changed, 41 insertions(+), 34 deletions(-) diff --git a/hawkular/alerts/common.py b/hawkular/alerts/common.py index 047003d..c6f8ae9 100644 --- a/hawkular/alerts/common.py +++ b/hawkular/alerts/common.py @@ -50,11 +50,13 @@ def __init__(self, **opts): super(HawkularAlertsClient, self)._setup_path() - def triggers(self): - """ - Returns triggers methods - """ - return AlertsTriggerClient(self) + self.triggers = AlertsTriggerClient(self) + + # def triggers(self): + # """ + # Returns triggers methods + # """ + # return AlertsTriggerClient(self) def status(self): orig_dict = self._get(self._service_url('status')) diff --git a/hawkular/alerts/triggers.py b/hawkular/alerts/triggers.py index b859464..08a8a1a 100644 --- a/hawkular/alerts/triggers.py +++ b/hawkular/alerts/triggers.py @@ -187,6 +187,7 @@ def create_group_member(self, member): data = self._serialize_object(member) return Trigger(self._post(self._service_url(['triggers', 'groups', 'members']), data)) + # TODO The API defines two, PUT which updates conditions and PUT which updates trigger mode also def put_trigger_conditions(self, trigger_id, trigger_mode, conditions): data = self._serialize_object(conditions) url = self._service_url(['triggers', trigger_id, 'conditions', trigger_mode]) @@ -241,3 +242,7 @@ def delete_group_dampening(self, group_id, dampening_id): :param dampening_id: id of the Dampening to be deleted """ self._delete(self._service_url(['triggers', 'groups', group_id, 'dampenings', dampening_id])) + +# def enable/disable_trigger (or should it be in the update?) +# def orphan / deorphan trigger +# diff --git a/tests/test_alerts.py b/tests/test_alerts.py index fd1a214..5e65231 100644 --- a/tests/test_alerts.py +++ b/tests/test_alerts.py @@ -43,9 +43,9 @@ def test_trigger_creation(self): trigger = Trigger() trigger.id = 'id_1' trigger.name = 'test_trigger' - created_trigger = self.client.triggers().create_trigger(trigger) + created_trigger = self.client.triggers.create_trigger(trigger) self.assertEqual(trigger.id, created_trigger.id) - triggers_list = self.client.triggers().list_triggers() + triggers_list = self.client.triggers.list_triggers() self.assertEqual(1, len(triggers_list)) self.assertEqual(triggers_list[0].id, trigger.id) @@ -96,18 +96,18 @@ def test_full_trigger_creation(self): full_trigger.dampenings.append(dampening2) full_trigger.conditions = [condition1, condition2, condition3] - created_trigger = self.client.triggers().create_trigger(full_trigger) + created_trigger = self.client.triggers.create_trigger(full_trigger) self.assertEqual(trigger.id, created_trigger.trigger.id) # Check if the trigger appears on the list. - triggers = self.client.triggers().list_triggers() + triggers = self.client.triggers.list_triggers() self.assertEqual(1, len(triggers)) self.assertEqual(triggers[0].id, trigger.id) # Check if it is possible to get the full trigger. - created_full_trigger = self.client.triggers().get_trigger('id_1', True) + created_full_trigger = self.client.triggers.get_trigger('id_1', True) self.assertTrue(isinstance(created_full_trigger, FullTrigger)) self.assertEqual(created_full_trigger.trigger.id, trigger.id) @@ -116,7 +116,7 @@ def test_full_trigger_creation(self): # Check for dampenings. - dampenings = self.client.triggers().list_dampenings('id_1') + dampenings = self.client.triggers.list_dampenings('id_1') self.assertEqual(2, len(dampenings)) self.assertEqual(dampenings[0].trigger_id, trigger.id) self.assertEqual(dampenings[1].trigger_id, trigger.id) @@ -125,8 +125,8 @@ def test_create_group_trigger(self): trigger = Trigger() trigger.id = 'group_trigger_1' trigger.name = 'group_trigger_test' - self.client.triggers().create_group_trigger(trigger) - created_group_trigger = created_full_trigger = self.client.triggers().get_trigger('group_trigger_1') + self.client.triggers.create_group_trigger(trigger) + created_group_trigger = created_full_trigger = self.client.triggers.get_trigger('group_trigger_1') self.assertEqual(created_group_trigger.id, trigger.id) self.assertEqual(created_group_trigger.name, trigger.name) @@ -135,7 +135,7 @@ def test_get_trigger_conditions(self): trigger = Trigger() trigger.id = 'group_trigger_01' trigger.name = 'group_trigger' - self.client.triggers().create_group_trigger(trigger) + self.client.triggers.create_group_trigger(trigger) # Create condition objects condition1 = Condition() @@ -163,9 +163,9 @@ def test_get_trigger_conditions(self): gc.addCondition(condition1) gc.addCondition(condition2) gc.addCondition(condition3) - self.client.triggers().create_group_conditions(trigger.id, TriggerMode.AUTORESOLVE, gc) + self.client.triggers.create_group_conditions(trigger.id, TriggerMode.AUTORESOLVE, gc) - gc = self.client.triggers().get_trigger_conditions(trigger.id) + gc = self.client.triggers.get_trigger_conditions(trigger.id) self.assertEqual(len(gc), 3) gc_dids = [c.data_id for c in gc] for g in gc_dids: @@ -176,16 +176,16 @@ def test_delete_group_trigger(self): gt = Trigger() gt.id = 'delete_group_trigger' gt.name = 'group_trigger_to_delete' - self.client.triggers().create_group_trigger(gt) + self.client.triggers.create_group_trigger(gt) - group_count = len(self.client.triggers().list_triggers()) + group_count = len(self.client.triggers.list_triggers()) # Delete the created group trigger - self.client.triggers().delete_group_trigger('delete_group_trigger') + self.client.triggers.delete_group_trigger('delete_group_trigger') # Compare number of remaining triggers and query the deleted trigger id - self.assertEqual(len(self.client.triggers().list_triggers()), group_count-1) + self.assertEqual(len(self.client.triggers.list_triggers()), group_count-1) with self.assertRaises(HTTPError) as e: - self.client.triggers().get_trigger('delete_group_trigger') + self.client.triggers.get_trigger('delete_group_trigger') self.assertEqual(e.getcode(), 404) def test_create_groups(self): @@ -220,24 +220,24 @@ def test_create_groups(self): dampening.type = DampeningType.STRICT dampening.trigger_id = 'a-group-trigger' - tc = self.client.triggers().create_group_trigger(t) + tc = self.client.triggers.create_group_trigger(t) self.assertEqual(tc.type, TriggerType.GROUP) - gcc = self.client.triggers().create_group_conditions(t.id, TriggerMode.FIRING, gc) + gcc = self.client.triggers.create_group_conditions(t.id, TriggerMode.FIRING, gc) self.assertEqual(len(gcc), 1) - t_m1c = self.client.triggers().create_group_member(m1) + t_m1c = self.client.triggers.create_group_member(m1) self.assertEqual(t_m1c.type, TriggerType.MEMBER) - gm = self.client.triggers().get_group_members('a-group-trigger') + gm = self.client.triggers.get_group_members('a-group-trigger') self.assertEqual(len(gm), 1) self.assertEqual(gm[0].id, 'member1') # Delete group member trigger - self.client.triggers().delete_trigger('member1') - gm = self.client.triggers().get_group_members('a-group-trigger') + self.client.triggers.delete_trigger('member1') + gm = self.client.triggers.get_group_members('a-group-trigger') self.assertFalse(gm) # Create group trigger dampening - self.client.triggers().create_group_dampening('a-group-trigger', dampening) - gt = self.client.triggers().get_trigger('a-group-trigger', full=True) + self.client.triggers.create_group_dampening('a-group-trigger', dampening) + gt = self.client.triggers.get_trigger('a-group-trigger', full=True) gds = gt.dampenings self.assertEqual(len(gds), 1) self.assertEqual(gds[0].trigger_mode, 'FIRING') @@ -247,19 +247,19 @@ def test_create_groups(self): dampening.type = DampeningType.STRICT_TIME dampening.eval_time_setting = 5 dampening.dampening_id = gds[0].dampening_id - gd = self.client.triggers().update_group_dampening('a-group-trigger', dampening.dampening_id, dampening) + gd = self.client.triggers.update_group_dampening('a-group-trigger', dampening.dampening_id, dampening) self.assertEqual(gd.type, 'STRICT_TIME') # Delete group trigger dampening - self.client.triggers().delete_group_dampening('a-group-trigger', dampening.dampening_id) - gt = self.client.triggers().get_trigger('a-group-trigger', full=True) + self.client.triggers.delete_group_dampening('a-group-trigger', dampening.dampening_id) + gt = self.client.triggers.get_trigger('a-group-trigger', full=True) self.assertFalse(gt.dampenings) # Update group trigger t.enabled = True t.severity = Severity.MEDIUM - self.client.triggers().update_group_trigger(t.id, t) - gt = self.client.triggers().get_trigger(t.id) + self.client.triggers.update_group_trigger(t.id, t) + gt = self.client.triggers.get_trigger(t.id) self.assertEqual(gt.enabled, True) self.assertEqual(gt.severity, Severity.MEDIUM)