7e44b1d3f2
Task: #22521 Story: #2002693 Depends-On: I65dd102635b1f6c6500a9c34da130aaea33708b2 Change-Id: Id816a292ef9801917543647dc5bafbc0f39f4a92
132 lines
4.4 KiB
Python
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
|