vitrage-tempest-plugin/vitrage_tempest_plugin/tests/common/aodh_utils.py

132 lines
4.4 KiB
Python

# Copyright 2017 - Nokia
#
# 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.
import json
import random
import time
from vitrage_tempest_plugin.tests.common.constants import AodhProperties as \
AodhProps
from vitrage_tempest_plugin.tests.common.tempest_clients import TempestClients
def create_aodh_alarm(resource_id=None, name=None, unic=True):
if not name:
name = '%s-%s' % ('test_', random.randrange(0, 100000, 1))
elif unic:
name = '%s-%s' % (name, random.randrange(0, 100000, 1))
aodh_request = _aodh_request('event',
resource_id=resource_id,
name=name)
TempestClients.aodh().alarm.create(aodh_request)
time.sleep(20)
def create_aodh_metrics_threshold_alarm(resource_id=None, name=None):
if not name:
name = '%s-%s' % ('test_', random.randrange(0, 100000, 1))
met = TempestClients.gnocchi().metric.create(resource_id=resource_id,
name='test',
archive_policy_name='high')
metric = met[AodhProps.ID]
rule_opts = dict(
threshold='100',
aggregation_method='mean',
comparison_operator='lt',
metrics=[metric]
)
rule = {
AodhProps.METRICS_THRESHOLD_RULE: rule_opts
}
aodh_request = _aodh_request(AodhProps.METRICS_THRESHOLD,
resource_id=resource_id,
name=name,
rule=rule)
TempestClients.aodh().alarm.create(aodh_request)
time.sleep(10)
def create_aodh_resources_threshold_alarm(resource_id, name=None):
if not name:
name = '%s-%s' % ('test_', random.randrange(0, 100000, 1))
gnocchi_resource = _get_gnocchi_resource_id()
met = TempestClients.gnocchi().metric.create(resource_id=gnocchi_resource,
name='test',
archive_policy_name='high')
metric = met[AodhProps.ID]
rule_opts = dict(
threshold='100',
aggregation_method='mean',
comparison_operator='lt',
metric=metric,
resource_type='nova.instance'
)
rule = {
AodhProps.RESOURCES_THRESHOLD_RULE: rule_opts
}
aodh_request = _aodh_request(AodhProps.RESOURCES_THRESHOLD,
resource_id=resource_id,
name=name,
rule=rule)
TempestClients.aodh().alarm.create(aodh_request)
time.sleep(10)
def delete_all_aodh_alarms():
alarms = TempestClients.aodh().alarm.list()
for alarm in alarms:
TempestClients.aodh().alarm.delete(alarm[AodhProps.ALARM_ID])
time.sleep(10)
def delete_all_gnocchi_metrics():
metrics = TempestClients.gnocchi().metric.list()
for metric in metrics:
TempestClients.gnocchi().metric.delete(metric[AodhProps.ID])
time.sleep(10)
def _get_gnocchi_resource_id():
return TempestClients.gnocchi().resource.list()[0][AodhProps.ID]
def _aodh_request(type, resource_id=None, name=None, rule=None):
query = []
if resource_id:
query = [
dict(
field='traits.resource_id',
type='',
op='eq',
value=resource_id)
]
request = dict(
name=name,
description='test alarm',
severity='low',
state='alarm',
type=type)
if not rule:
rule = dict(event_rule=(dict(query=query)))
elif rule.get(AodhProps.RESOURCES_THRESHOLD_RULE):
# aggregation_by_resources_threshold requests are different from other
# alarms, update accordingly
query[0].update(dict(field='resource_id'))
rule[AodhProps.RESOURCES_THRESHOLD_RULE].update(dict(
query=json.dumps(query)))
request.update(rule)
return request