# All Rights Reserved. # # 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 six import moves from rally.common import utils as rutils from rally.common import validation from rally.task import context from rally_openstack import consts from rally_openstack.scenarios.monasca import utils as monasca_utils @validation.add("required_platform", platform="openstack", users=True) @context.configure(name="monasca_metrics", platform="openstack", order=510) class MonascaMetricGenerator(context.Context): """Creates Monasca Metrics.""" CONFIG_SCHEMA = { "type": "object", "$schema": consts.JSON_SCHEMA, "properties": { "name": { "type": "string" }, "dimensions": { "type": "object", "properties": { "region": { "type": "string" }, "service": { "type": "string" }, "hostname": { "type": "string" }, "url": { "type": "string" } }, "additionalProperties": False }, "metrics_per_tenant": { "type": "integer", "minimum": 1 }, "value_meta": { "type": "array", "items": { "type": "object", "properties": { "value_meta_key": { "type": "string" }, "value_meta_value": { "type": "string" } }, "additionalProperties": False } } }, "additionalProperties": False } DEFAULT_CONFIG = { "metrics_per_tenant": 2 } def setup(self): new_metric = {} if "dimensions" in self.config: new_metric = { "dimensions": self.config["dimensions"] } for user, tenant_id in rutils.iterate_per_tenants( self.context["users"]): scenario = monasca_utils.MonascaScenario( context={"user": user, "task": self.context["task"]} ) for i in moves.xrange(self.config["metrics_per_tenant"]): scenario._create_metrics(**new_metric) rutils.interruptable_sleep(0.001) rutils.interruptable_sleep( monasca_utils.CONF.openstack.monasca_metric_create_prepoll_delay, atomic_delay=1) def cleanup(self): # We don't have API for removal of metrics pass