4037867b7d
* [BFN] Updated platform APIs impl
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* Extended BFN platform SFP APIs implementation
* Update sfp.py
* [BFN] Extended SFP platform plugin implementation
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* [BFN] Extended Fans platform plugin implementation
* [BFN] divided classes Fan and FanDrawer into 2 files
* Signed-off-by: Vadym Yashchenko <vadymx.yashchenko@intel.com>
What I did
Add get_model() function
Add get_low_critical_threshold() function
Change __get(...) function.
How I did it
Differnece from previous implementation of __get(...) function is return real value or -9999.9 if value is not provided by thrift API
* Add get_presence() function and revised __get() function
Signed-off-by: Vadym Yashchenko <vadymx.yashchenko@intel.com>
* [BFN] Updated PSU platform APIs impl
Signed-off-by: Dmytro Lytvynenko <dmytrox.lytvynenko@intel.com>
* Added BFN PSU cache (#9)
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* [BFN] Fans and Fantray platform APIs update (#7)
* [BFN] Updated SFP platform APIs (#10)
Signed-off-by: Volodymyr Boyko <volodymyrx.boiko@intel.com>
* [BFN] Updated platform API for thermal (#8)
* Signed-off-by: Vadym Yashchenko <vadymx.yashchenko@intel.com>
* Revert "[BFN] Fans and Fantray platform APIs update (#7)" (#11)
This reverts commit c62a733443be49cbe4ba2d06047aac7516f0495e.
* Add support health monitor system (#15)
Signed-off-by: Petro Bratash <petrox.bratash@intel.com>
* Update chassis.py
* [BFN] Updated FANs and FAN Tray platform API (#14)
* Fix fix_alignment (#17)
Signed-off-by: Petro Bratash <petrox.bratash@intel.com>
* [BFN] Improvement show environment (#16)
* Added PSU temperature skip into platform.json (#18)
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* Do not skip psud on Newport
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* [BFN] fix fan status from Not OK to Ok (#19)
* [BFN] Updated SFP platform plugin (#13)
Signed-off-by: Volodymyr Boyko <volodymyrx.boiko@intel.com>
* [DPB] Fix typo for Ethernet0 2x200G[100G,40G] breakout mode (#21)
Signed-off-by: Mykola Gerasymenko <mykolax.gerasymenko@intel.com>
* [barefoot] Tmp fix vendor_rev (#22)
Signed-off-by: Volodymyr Boyko <volodymyrx.boiko@intel.com>
* Fixed python issues in sonic_platform/fan_drawer.py
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* Updated fan_drawer.py
* Fixing trailing white spaces in fan_drawer.py
* [BFN] Fix thrift for SFPs API
Signed-off-by: Volodymyr Boyko <volodymyrx.boiko@intel.com>
* In platform.json, replaced 'false' with '0' to workaround ast.literal_eval() issue
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* [Newport] Thermal manager (#23)
* Signed-off-by: Vadym Yashchenko <vadymx.yashchenko@intel.com>
* Revert "In platform.json, replaced 'false' with '0' to workaround ast.literal_eval() issue"
This reverts commit 1e73127830
.
* Removed 'controllable' options from platform.json to fix factory default config generation
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
* Update thermal_manager.py
* Migrated SFP plugin to sonic_xcvr API (#30)
Signed-off-by: Andriy Kokhan <andriyx.kokhan@intel.com>
Co-authored-by: KostiantynYarovyiBf <kostiantynx.yarovyi@intel.com>
Co-authored-by: Vadym Yashchenko <vadymx.yashchenko@intel.com>
Co-authored-by: Dmytro Lytvynenko <dmytrox.lytvynenko@intel.com>
Co-authored-by: Volodymyr Boiko <volodymyrx.boiko@intel.com>
Co-authored-by: Petro Bratash <petrox.bratash@intel.com>
Co-authored-by: Mykola Gerasymenko <mykolax.gerasymenko@intel.com>
208 lines
5.7 KiB
Python
208 lines
5.7 KiB
Python
#!/usr/bin/env python
|
|
|
|
try:
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
sys.path.append(os.path.dirname(__file__))
|
|
|
|
from .platform_thrift_client import thrift_try
|
|
|
|
from sonic_platform_base.psu_base import PsuBase
|
|
except ImportError as e:
|
|
raise ImportError (str(e) + "- required module not found")
|
|
|
|
class Psu(PsuBase):
|
|
"""Platform-specific PSU class"""
|
|
|
|
def __init__(self, index):
|
|
PsuBase.__init__(self)
|
|
self.__index = index
|
|
self.__info = None
|
|
self.__ts = 0
|
|
# STUB IMPLEMENTATION
|
|
self.color = ""
|
|
|
|
'''
|
|
Units of returned info object values:
|
|
vin - V
|
|
iout - mA
|
|
vout - V
|
|
pwr_out - mW
|
|
fspeed - RPM
|
|
'''
|
|
def __info_get(self):
|
|
def psu_info_get(client):
|
|
return client.pltfm_mgr.pltfm_mgr_pwr_supply_info_get(self.__index)
|
|
|
|
# Update cache once per 2 seconds
|
|
if self.__ts + 2 < time.time():
|
|
self.__info = None
|
|
try:
|
|
self.__info = thrift_try(psu_info_get, attempts=1)
|
|
finally:
|
|
self.__ts = time.time()
|
|
return self.__info
|
|
return self.__info
|
|
|
|
|
|
@staticmethod
|
|
def get_num_psus():
|
|
"""
|
|
Retrieves the number of PSUs available on the device
|
|
:return: An integer, the number of PSUs available on the device
|
|
"""
|
|
return 2
|
|
|
|
def get_name(self):
|
|
return f"psu-{self.__index}"
|
|
|
|
def get_powergood_status(self):
|
|
"""
|
|
Retrieves the oprational status of power supply unit (PSU) defined
|
|
by 1-based self.index <self.index>
|
|
:param self.index: An integer, 1-based self.index of the PSU of which to query status
|
|
:return: Boolean, True if PSU is operating properly, False if PSU is faulty
|
|
"""
|
|
info = self.__info_get()
|
|
if info is None:
|
|
return False
|
|
return info.ffault == False and info.vout != 0
|
|
|
|
def get_voltage(self):
|
|
"""
|
|
Retrieves current PSU voltage output
|
|
|
|
Returns:
|
|
A float number, the output voltage in volts,
|
|
e.g. 12.1
|
|
"""
|
|
info = self.__info_get()
|
|
return float(info.vout) if info else 0
|
|
|
|
def get_current(self):
|
|
"""
|
|
Retrieves present electric current supplied by PSU
|
|
|
|
Returns:
|
|
A float number, the electric current in amperes, e.g 15.4
|
|
"""
|
|
info = self.__info_get()
|
|
return info.iout / 1000 if info else 0
|
|
|
|
def get_power(self):
|
|
"""
|
|
Retrieves current energy supplied by PSU
|
|
|
|
Returns:
|
|
A float number, the power in watts, e.g. 302.6
|
|
"""
|
|
info = self.__info_get()
|
|
return info.pwr_out / 1000 if info else 0
|
|
|
|
def get_presence(self):
|
|
"""
|
|
Retrieves the presence status of power supply unit (PSU) defined
|
|
by 1-based self.index <self.index>
|
|
:param self.index: An integer, 1-based self.index of the PSU of which to query status
|
|
:return: Boolean, True if PSU is plugged, False if not
|
|
"""
|
|
def psu_present_get(client):
|
|
return client.pltfm_mgr.pltfm_mgr_pwr_supply_present_get(self.__index)
|
|
|
|
status = False
|
|
try:
|
|
status = thrift_try(psu_present_get)
|
|
finally:
|
|
return status
|
|
|
|
def set_status_led(self, color):
|
|
"""
|
|
Sets the state of the PSU status LED
|
|
|
|
Args:
|
|
color: A string representing the color with which to set the
|
|
PSU status LED
|
|
|
|
Returns:
|
|
bool: True if status LED state is set successfully, False if not
|
|
"""
|
|
# STUB IMPLEMENTATION
|
|
self.color = color
|
|
return True
|
|
|
|
def get_status_led(self):
|
|
"""
|
|
Gets the state of the PSU status LED
|
|
|
|
Returns:
|
|
A string, one of the predefined STATUS_LED_COLOR_* strings above
|
|
"""
|
|
# STUB IMPLEMENTATION
|
|
return self.color
|
|
|
|
# DeviceBase iface:
|
|
def get_serial(self):
|
|
"""
|
|
Retrieves the serial number of the device
|
|
|
|
Returns:
|
|
string: Serial number of device
|
|
"""
|
|
info = self.__info_get()
|
|
return info.serial if info else "N/A"
|
|
|
|
def get_model(self):
|
|
"""
|
|
Retrieves the model number (or part number) of the device
|
|
|
|
Returns:
|
|
string: Model/part number of device
|
|
"""
|
|
info = self.__info_get()
|
|
return info.model if info else "N/A"
|
|
|
|
def is_replaceable(self):
|
|
"""
|
|
Indicate whether this device is replaceable.
|
|
Returns:
|
|
bool: True if it is replaceable.
|
|
"""
|
|
return True
|
|
|
|
def get_revision(self):
|
|
"""
|
|
Retrieves the hardware revision of the device
|
|
|
|
Returns:
|
|
string: Revision value of device
|
|
"""
|
|
info = self.__info_get()
|
|
return info.rev if info else "N/A"
|
|
|
|
def get_status(self):
|
|
"""
|
|
Retrieves the operational status of the device
|
|
|
|
Returns:
|
|
A boolean value, True if device is operating properly, False if not
|
|
"""
|
|
return self.get_powergood_status()
|
|
|
|
def get_position_in_parent(self):
|
|
"""
|
|
Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position
|
|
for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned
|
|
Returns:
|
|
integer: The 1-based relative physical position in parent device or -1 if cannot determine the position
|
|
"""
|
|
return self.__index
|
|
|
|
def psu_list_get():
|
|
psu_list = []
|
|
for i in range(1, Psu.get_num_psus() + 1):
|
|
psu = Psu(i)
|
|
psu_list.append(psu)
|
|
return psu_list
|