Add PortMetrics in RSD 2.2

Change-Id: Ifb0ceade2ddfca0427f5f0a5f71847e504c11541
This commit is contained in:
Lin Yang 2019-05-26 11:30:55 -07:00
parent ebdcb4ca45
commit 171b075a92
7 changed files with 199 additions and 12 deletions

View File

@ -17,6 +17,7 @@ from sushy.resources import base
from rsd_lib.resources import v2_1
from rsd_lib.resources.v2_2.ethernet_switch import ethernet_switch
from rsd_lib.resources.v2_2.fabric import fabric
from rsd_lib.resources.v2_2.node import node
from rsd_lib.resources.v2_2.system import system
from rsd_lib.resources.v2_2.telemetry import telemetry
@ -125,3 +126,26 @@ class RSDLibV2_2(v2_1.RSDLibV2_1):
self._update_service_path,
redfish_version=self.redfish_version,
)
def get_fabric_collection(self):
"""Get the FabricCollection object
:raises: MissingAttributeError, if the collection attribute is
not found
:returns: a FabricCollection object
"""
return fabric.FabricCollection(
self._conn,
self._fabrics_path,
redfish_version=self.redfish_version,
)
def get_fabric(self, identity):
"""Given the identity return a Fabric object
:param identity: The identity of the Fabric resource
:returns: The Fabric object
"""
return fabric.Fabric(
self._conn, identity, redfish_version=self.redfish_version
)

View File

@ -0,0 +1,48 @@
# Copyright 2019 Intel, Inc.
# 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 sushy import utils
from rsd_lib import base as rsd_lib_base
from rsd_lib.resources.v2_1.fabric import fabric
from rsd_lib.resources.v2_2.fabric import switch
class Fabric(fabric.Fabric):
"""Fabric resource class
Fabric contains properties describing a simple fabric consisting of one
or more switches, zero or more endpoints, and zero or more zones.
"""
@property
@utils.cache_it
def switches(self):
"""Property to provide reference to `SwitchCollection` instance
It is calculated once when it is queried for the first time. On
refresh, this property is reset.
"""
return switch.SwitchCollection(
self._conn,
utils.get_sub_resource_path_by(self, "Switches"),
redfish_version=self.redfish_version,
)
class FabricCollection(rsd_lib_base.ResourceCollectionBase):
@property
def _resource_type(self):
return Fabric

View File

@ -15,24 +15,64 @@
import logging
from rsd_lib.resources.v2_1.fabric import port as v2_1_port
from sushy.resources import base
from sushy import utils
from rsd_lib import base as rsd_lib_base
from rsd_lib.resources.v2_1.fabric import port
from rsd_lib.resources.v2_2.fabric import port_metrics
from rsd_lib import utils as rsd_lib_utils
from sushy.resources import base
LOG = logging.getLogger(__name__)
class IntelRackScaleField(base.CompositeField):
metrics = base.Field("Metrics",
adapter=rsd_lib_utils.get_resource_identity)
pc_ie_connection_id = base.Field("PCIeConnectionId")
"""An array of references to the PCIe connection identifiers (e.g. cable
ID).
"""
metrics = base.Field(
"Metrics", adapter=rsd_lib_utils.get_resource_identity
)
"""A reference to the Metrics associated with this Port"""
class OemField(base.CompositeField):
intel_rackScale = IntelRackScaleField("Intel_RackScale")
"""The oem intel rack scale"""
intel_rackscale = IntelRackScaleField("Intel_RackScale")
"""Intel Rack Scale Design specific properties."""
class Port(v2_1_port.Port):
class Port(port.Port):
"""Port resource class
Port contains properties describing a port of a switch.
"""
oem = OemField("Oem")
"""The port oem"""
"""Oem specific properties."""
@property
@utils.cache_it
def metrics(self):
"""Property to provide reference to `Metrics` instance
It is calculated once the first time it is queried. On refresh,
this property is reset.
"""
return port_metrics.PortMetrics(
self._conn,
utils.get_sub_resource_path_by(
self, ["Oem", "Intel_RackScale", "Metrics"]
),
redfish_version=self.redfish_version,
)
class PortCollection(rsd_lib_base.ResourceCollectionBase):
@property
def _resource_type(self):
return Port

View File

@ -0,0 +1,28 @@
# Copyright 2019 Intel, Inc.
# 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 sushy.resources import base
from rsd_lib import base as rsd_lib_base
class PortMetrics(rsd_lib_base.ResourceBase):
"""PortMetrics resource class
Contains usage and health statistics of a Fabric Port.
"""
health = base.Field("Health")
"""Port health as a discrete sensor reading"""

View File

@ -0,0 +1,47 @@
# Copyright 2019 Intel, Inc.
# 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 sushy import utils
from rsd_lib import base as rsd_lib_base
from rsd_lib.resources.v2_1.fabric import switch
from rsd_lib.resources.v2_2.fabric import port
class Switch(switch.Switch):
"""Switch resource class
Switch contains properties describing a simple fabric switch.
"""
@property
@utils.cache_it
def ports(self):
"""Property to provide reference to `PortCollection` instance
It is calculated once when it is queried for the first time. On
refresh, this property is reset.
"""
return port.PortCollection(
self._conn,
utils.get_sub_resource_path_by(self, "Ports"),
redfish_version=self.redfish_version,
)
class SwitchCollection(rsd_lib_base.ResourceCollectionBase):
@property
def _resource_type(self):
return Switch

View File

@ -38,4 +38,4 @@ class PortTestCase(testtools.TestCase):
self.port_inst._parse_attributes()
self.assertEqual('/redfish/v1/Fabrics/PCIe/Switches/1/'
'Ports/Up1/Metrics',
self.port_inst.oem.intel_rackScale.metrics)
self.port_inst.oem.intel_rackscale.metrics)

View File

@ -20,7 +20,6 @@ import testtools
from rsd_lib.resources.v2_1.chassis import chassis as v2_1_chassis
from rsd_lib.resources.v2_1.event_service import event_service \
as v2_1_event_service
from rsd_lib.resources.v2_1.fabric import fabric as v2_1_fabric
from rsd_lib.resources.v2_1.manager import manager as v2_1_manager
from rsd_lib.resources.v2_1.node import node as v2_1_node
from rsd_lib.resources.v2_1.registries import message_registry_file \
@ -31,6 +30,7 @@ from rsd_lib.resources.v2_1.task import task_service as v2_1_task_service
from rsd_lib.resources import v2_2
from rsd_lib.resources.v2_2.ethernet_switch import ethernet_switch \
as v2_2_ethernet_switch
from rsd_lib.resources.v2_2.fabric import fabric as v2_2_fabric
from rsd_lib.resources.v2_2.node import node as v2_2_node
from rsd_lib.resources.v2_2.system import system as v2_2_system
from rsd_lib.resources.v2_2.telemetry import telemetry as v2_2_telemetry
@ -111,7 +111,7 @@ class RSDLibV2_2TestCase(testtools.TestCase):
redfish_version=self.rsd.redfish_version,
)
@mock.patch.object(v2_1_fabric, "FabricCollection", autospec=True)
@mock.patch.object(v2_2_fabric, "FabricCollection", autospec=True)
def test_get_fabric_collection(self, mock_fabric_collection):
self.rsd.get_fabric_collection()
mock_fabric_collection.assert_called_once_with(
@ -120,7 +120,7 @@ class RSDLibV2_2TestCase(testtools.TestCase):
redfish_version=self.rsd.redfish_version,
)
@mock.patch.object(v2_1_fabric, "Fabric", autospec=True)
@mock.patch.object(v2_2_fabric, "Fabric", autospec=True)
def test_get_fabric(self, mock_fabric):
self.rsd.get_fabric("fake-fabric-id")
mock_fabric.assert_called_once_with(