diff --git a/ironic/drivers/modules/oneview/deploy.py b/ironic/drivers/modules/oneview/deploy.py index 72c23f2e19..2612e6507f 100644 --- a/ironic/drivers/modules/oneview/deploy.py +++ b/ironic/drivers/modules/oneview/deploy.py @@ -17,6 +17,7 @@ import abc from futurist import periodics +from ironic_lib import metrics_utils from oslo_log import log as logging import six @@ -31,6 +32,8 @@ from ironic import objects LOG = logging.getLogger(__name__) +METRICS = metrics_utils.get_metrics_logger(__name__) + CONF = common.CONF @@ -211,6 +214,7 @@ class OneViewIscsiDeploy(iscsi_deploy.ISCSIDeploy, OneViewPeriodicTasks): def get_properties(self): deploy_utils.get_properties() + @METRICS.timer('OneViewIscsiDeploy.validate') def validate(self, task): common.verify_node_info(task.node) try: @@ -219,22 +223,26 @@ class OneViewIscsiDeploy(iscsi_deploy.ISCSIDeploy, OneViewPeriodicTasks): raise exception.InvalidParameterValue(oneview_exc) super(OneViewIscsiDeploy, self).validate(task) + @METRICS.timer('OneViewIscsiDeploy.prepare') def prepare(self, task): if common.is_dynamic_allocation_enabled(task.node): deploy_utils.prepare(task) super(OneViewIscsiDeploy, self).prepare(task) + @METRICS.timer('OneViewIscsiDeploy.tear_down') def tear_down(self, task): if (common.is_dynamic_allocation_enabled(task.node) and not CONF.conductor.automated_clean): deploy_utils.tear_down(task) super(OneViewIscsiDeploy, self).tear_down(task) + @METRICS.timer('OneViewIscsiDeploy.prepare_cleaning') def prepare_cleaning(self, task): if common.is_dynamic_allocation_enabled(task.node): deploy_utils.prepare_cleaning(task) return super(OneViewIscsiDeploy, self).prepare_cleaning(task) + @METRICS.timer('OneViewIscsiDeploy.tear_down_cleaning') def tear_down_cleaning(self, task): if common.is_dynamic_allocation_enabled(task.node): deploy_utils.tear_down_cleaning(task) @@ -249,6 +257,7 @@ class OneViewAgentDeploy(agent.AgentDeploy, OneViewPeriodicTasks): def get_properties(self): deploy_utils.get_properties() + @METRICS.timer('OneViewAgentDeploy.validate') def validate(self, task): common.verify_node_info(task.node) try: @@ -257,22 +266,26 @@ class OneViewAgentDeploy(agent.AgentDeploy, OneViewPeriodicTasks): raise exception.InvalidParameterValue(oneview_exc) super(OneViewAgentDeploy, self).validate(task) + @METRICS.timer('OneViewAgentDeploy.prepare') def prepare(self, task): if common.is_dynamic_allocation_enabled(task.node): deploy_utils.prepare(task) super(OneViewAgentDeploy, self).prepare(task) + @METRICS.timer('OneViewAgentDeploy.tear_down') def tear_down(self, task): if (common.is_dynamic_allocation_enabled(task.node) and not CONF.conductor.automated_clean): deploy_utils.tear_down(task) super(OneViewAgentDeploy, self).tear_down(task) + @METRICS.timer('OneViewAgentDeploy.prepare_cleaning') def prepare_cleaning(self, task): if common.is_dynamic_allocation_enabled(task.node): deploy_utils.prepare_cleaning(task) return super(OneViewAgentDeploy, self).prepare_cleaning(task) + @METRICS.timer('OneViewAgentDeploy.tear_down_cleaning') def tear_down_cleaning(self, task): if common.is_dynamic_allocation_enabled(task.node): deploy_utils.tear_down_cleaning(task) diff --git a/ironic/drivers/modules/oneview/inspect.py b/ironic/drivers/modules/oneview/inspect.py index dde2e65834..38c1b20a09 100644 --- a/ironic/drivers/modules/oneview/inspect.py +++ b/ironic/drivers/modules/oneview/inspect.py @@ -15,6 +15,7 @@ # under the License. from futurist import periodics +from ironic_lib import metrics_utils from oslo_log import log as logging from oslo_utils import importutils @@ -29,6 +30,8 @@ from ironic.conf import CONF LOG = logging.getLogger(__name__) +METRICS = metrics_utils.get_metrics_logger(__name__) + oneview_exception = importutils.try_import('oneview_client.exceptions') oneview_utils = importutils.try_import('oneview_client.utils') @@ -39,6 +42,7 @@ class OneViewInspect(inspector.Inspector): def get_properties(self): return common.COMMON_PROPERTIES + @METRICS.timer('OneViewInspect.validate') def validate(self, task): """Checks required info on 'driver_info' and validates node with OneView @@ -60,6 +64,7 @@ class OneViewInspect(inspector.Inspector): except exception.OneViewError as oneview_exc: raise exception.InvalidParameterValue(oneview_exc) + @METRICS.timer('OneViewInspect.inspect_hardware') def inspect_hardware(self, task): profile_name = 'Ironic Inspecting [%s]' % task.node.uuid deploy_utils.allocate_server_hardware_to_ironic( diff --git a/ironic/drivers/modules/oneview/management.py b/ironic/drivers/modules/oneview/management.py index b0bf2941e0..eeef9a1270 100644 --- a/ironic/drivers/modules/oneview/management.py +++ b/ironic/drivers/modules/oneview/management.py @@ -14,6 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. +from ironic_lib import metrics_utils from oslo_log import log as logging from oslo_utils import importutils @@ -27,6 +28,8 @@ from ironic.drivers.modules.oneview import deploy_utils LOG = logging.getLogger(__name__) +METRICS = metrics_utils.get_metrics_logger(__name__) + BOOT_DEVICE_MAPPING_TO_OV = { boot_devices.DISK: 'HardDisk', boot_devices.PXE: 'PXE', @@ -46,6 +49,7 @@ class OneViewManagement(base.ManagementInterface): def get_properties(self): return common.COMMON_PROPERTIES + @METRICS.timer('OneViewManagement.validate') def validate(self, task): """Checks required info on 'driver_info' and validates node with OneView @@ -73,6 +77,7 @@ class OneViewManagement(base.ManagementInterface): except exception.OneViewError as oneview_exc: raise exception.InvalidParameterValue(oneview_exc) + @METRICS.timer('OneViewManagement.get_supported_boot_devices') def get_supported_boot_devices(self, task): """Gets a list of the supported boot devices. @@ -83,6 +88,7 @@ class OneViewManagement(base.ManagementInterface): return sorted(BOOT_DEVICE_MAPPING_TO_OV.keys()) + @METRICS.timer('OneViewManagement.set_boot_device') @task_manager.require_exclusive_lock @common.node_has_server_profile def set_boot_device(self, task, device, persistent=False): @@ -121,6 +127,7 @@ class OneViewManagement(base.ManagementInterface): ) raise exception.OneViewError(error=msg) + @METRICS.timer('OneViewManagement.get_boot_device') @common.node_has_server_profile def get_boot_device(self, task): """Get the current boot device for the task's node. @@ -164,6 +171,7 @@ class OneViewManagement(base.ManagementInterface): return boot_device + @METRICS.timer('OneViewManagement.get_sensors_data') def get_sensors_data(self, task): """Get sensors data. diff --git a/ironic/drivers/modules/oneview/power.py b/ironic/drivers/modules/oneview/power.py index dc4ebcfd86..b972c0ff39 100644 --- a/ironic/drivers/modules/oneview/power.py +++ b/ironic/drivers/modules/oneview/power.py @@ -14,6 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. +from ironic_lib import metrics_utils from oslo_log import log as logging from oslo_utils import importutils @@ -24,9 +25,10 @@ from ironic.conductor import task_manager from ironic.drivers import base from ironic.drivers.modules.oneview import common - LOG = logging.getLogger(__name__) +METRICS = metrics_utils.get_metrics_logger(__name__) + oneview_exceptions = importutils.try_import('oneview_client.exceptions') @@ -35,6 +37,7 @@ class OneViewPower(base.PowerInterface): def get_properties(self): return common.COMMON_PROPERTIES + @METRICS.timer('OneViewPower.validate') def validate(self, task): """Checks required info on 'driver_info' and validates node with OneView @@ -58,6 +61,7 @@ class OneViewPower(base.PowerInterface): except exception.OneViewError as oneview_exc: raise exception.InvalidParameterValue(oneview_exc) + @METRICS.timer('OneViewPower.get_power_state') def get_power_state(self, task): """Gets the current power state. @@ -82,6 +86,7 @@ class OneViewPower(base.PowerInterface): raise exception.OneViewError(error=oneview_exc) return common.translate_oneview_power_state(power_state) + @METRICS.timer('OneViewPower.set_power_state') @task_manager.require_exclusive_lock def set_power_state(self, task, power_state): """Turn the current power state on or off. @@ -119,6 +124,7 @@ class OneViewPower(base.PowerInterface): _("Error setting power state: %s") % exc ) + @METRICS.timer('OneViewPower.reboot') @task_manager.require_exclusive_lock def reboot(self, task): """Reboot the node diff --git a/ironic/drivers/modules/oneview/vendor.py b/ironic/drivers/modules/oneview/vendor.py index d785bc738d..20d724146e 100644 --- a/ironic/drivers/modules/oneview/vendor.py +++ b/ironic/drivers/modules/oneview/vendor.py @@ -14,6 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. +from ironic_lib import metrics_utils from oslo_log import log import retrying @@ -25,6 +26,9 @@ from ironic.drivers.modules import agent_base_vendor from ironic.drivers.modules import deploy_utils LOG = log.getLogger(__name__) + +METRICS = metrics_utils.get_metrics_logger(__name__) + CONF = agent.CONF @@ -36,6 +40,7 @@ CONF = agent.CONF # TODO(thiagop): remove this interface once bug/1503855 is fixed class AgentVendorInterface(agent.AgentVendorInterface): + @METRICS.timer('AgentVendorInterface.reboot_to_instance') def reboot_to_instance(self, task, **kwargs): task.process_event('resume') node = task.node @@ -63,6 +68,7 @@ class AgentVendorInterface(agent.AgentVendorInterface): if task.driver.boot: task.driver.boot.clean_up_ramdisk(task) + @METRICS.timer('AgentVendorInterface.reboot_and_finish_deploy') def reboot_and_finish_deploy(self, task): """Helper method to trigger reboot on the node and finish deploy. diff --git a/releasenotes/notes/oneview-timing-metrics-0b6c1b54e80eb683.yaml b/releasenotes/notes/oneview-timing-metrics-0b6c1b54e80eb683.yaml new file mode 100644 index 0000000000..bd803abc29 --- /dev/null +++ b/releasenotes/notes/oneview-timing-metrics-0b6c1b54e80eb683.yaml @@ -0,0 +1,3 @@ +--- +features: + - Adds timing metrics to OneView drivers.