rsd-lib/rsd_lib/resources/v2_2/system/memory_metrics.py
HeyIns ed6150f06b Update Memory_metrics in RSD 2.2
Change-Id: I9e7498fa39d45697e557389607698194d7046af8
2019-05-24 10:26:26 -07:00

209 lines
6.5 KiB
Python

# Copyright 2018 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 exceptions
from sushy.resources import base
from sushy.resources import common
from rsd_lib import base as rsd_lib_base
from rsd_lib import utils as rsd_lib_utils
class CurrentPeriodField(base.CompositeField):
"""CurrentPeriod field
This object contains the Memory metrics since last reset or
ClearCurrentPeriod action.
"""
blocks_read = base.Field("BlocksRead", adapter=rsd_lib_utils.num_or_none)
"""Number of blocks read since reset."""
blocks_written = base.Field(
"BlocksWritten", adapter=rsd_lib_utils.num_or_none
)
"""Number of blocks written since reset."""
class LifeTimeField(base.CompositeField):
"""LifeTime field
This object contains the Memory metrics for the lifetime of the Memory.
"""
blocks_read = base.Field("BlocksRead", adapter=rsd_lib_utils.num_or_none)
"""Number of blocks read for the lifetime of the Memory."""
blocks_written = base.Field(
"BlocksWritten", adapter=rsd_lib_utils.num_or_none
)
"""Number of blocks written for the lifetime of the Memory."""
class AlarmTripsField(base.CompositeField):
"""AlarmTrips field
Alarm trip information about the memory.
"""
temperature = base.Field("Temperature", adapter=bool)
"""Temperature threshold crossing alarm trip detected status."""
spare_block = base.Field("SpareBlock", adapter=bool)
"""Spare block capacity crossing alarm trip detected status."""
uncorrectable_ecc_error = base.Field("UncorrectableECCError", adapter=bool)
"""Uncorrectable data error threshold crossing alarm trip detected status.
"""
correctable_ecc_error = base.Field("CorrectableECCError", adapter=bool)
"""Correctable data error threshold crossing alarm trip detected status."""
address_parity_error = base.Field("AddressParityError", adapter=bool)
"""Address parity error detected status."""
class HealthDataField(base.CompositeField):
"""HealthData field
This type describes the health information of the memory.
"""
remaining_spare_block_percentage = base.Field(
"RemainingSpareBlockPercentage", adapter=rsd_lib_utils.num_or_none
)
"""Remaining spare blocks in percentage."""
last_shutdown_success = base.Field("LastShutdownSuccess", adapter=bool)
"""Status of last shutdown."""
data_loss_detected = base.Field("DataLossDetected", adapter=bool)
"""Data loss detection status."""
performance_degraded = base.Field("PerformanceDegraded", adapter=bool)
"""Performance degraded mode status."""
alarm_trips = AlarmTripsField("AlarmTrips")
"""Alarm trip information about the memory."""
predicted_media_life_left_percent = base.Field(
"PredictedMediaLifeLeftPercent", adapter=rsd_lib_utils.num_or_none
)
"""The percentage of reads and writes that are predicted to still be
available for the media.
"""
class IntelRackScaleField(base.CompositeField):
temperature_celsius = base.Field(
"TemperatureCelsius", adapter=rsd_lib_utils.num_or_none
)
"""Temperature of the Memory resource"""
bandwidth_percent = base.Field(
"BandwidthPercent", adapter=rsd_lib_utils.num_or_none
)
"""Memory Bandwidth in Percent"""
throttled_cycles_percent = base.Field(
"ThrottledCyclesPercent", adapter=rsd_lib_utils.num_or_none
)
"""The percentage of memory cycles that were throttled due to power
limiting.
"""
consumed_power_watt = base.Field(
"ConsumedPowerWatt", adapter=rsd_lib_utils.num_or_none
)
"""Power consumed by Memory domain resource"""
thermal_margin_celsius = base.Field(
"ThermalMarginCelsius", adapter=rsd_lib_utils.num_or_none
)
"""Memory Thermal Margin in degree Celsius"""
ecc_errors_count = base.Field(
"ECCErrorsCount", adapter=rsd_lib_utils.num_or_none
)
"""Number of ECC Errors found on this Memory module"""
health = base.Field("Health")
"""Memory module Health as a discrete sensor reading"""
class OemField(base.CompositeField):
intel_rackscale = IntelRackScaleField("Intel_RackScale")
"""Intel Rack Scale Design specific properties."""
class ActionsField(base.CompositeField):
clear_current_period = common.ActionField(
"#MemoryMetrics.ClearCurrentPeriod"
)
class MemoryMetrics(rsd_lib_base.ResourceBase):
"""MemoryMetrics resource class
MemoryMetrics contains usage and health statistics for a single Memory
module or device instance.
"""
block_size_bytes = base.Field(
"BlockSizeBytes", adapter=rsd_lib_utils.num_or_none
)
"""Block size in bytes."""
current_period = CurrentPeriodField("CurrentPeriod")
"""This object contains the Memory metrics since last reset or
ClearCurrentPeriod action.
"""
life_time = LifeTimeField("LifeTime")
"""This object contains the Memory metrics for the lifetime of the Memory.
"""
health_data = HealthDataField("HealthData")
"""This object describes the health information of the memory."""
oem = OemField("Oem")
"""Oem specific properties."""
_actions = ActionsField("Actions")
"""The Actions property shall contain the
available actions for this resource.
"""
def _get_clear_current_period_action_element(self):
clear_current_period_action = self._actions.clear_current_period
if not clear_current_period_action:
raise exceptions.MissingActionError(
action="#MemoryMetrics.ClearCurrentPeriod", resource=self._path
)
return clear_current_period_action
def clear_current_period(self):
"""Clear the current the period of memory_metrics.
:raises: MissingActionError, if no clear_current_period action exists.
"""
target_uri = self._get_clear_current_period_action_element().target_uri
self._conn.post(target_uri, data={})