[Mellanox] enhance the reboot cause handling on 201811 (#3253)
* [Mellanox/mlnx-platform-api] enable mellanox's platform-api to be loaded as a whole. * [chassis] update reboot-cause handling code to adapt the hw-management currently running on 201811 * [chassis]handle the case that reboot cause file can be any dir matching pattern "hwmonX".
This commit is contained in:
parent
c07c48218b
commit
ca38147744
@ -0,0 +1,2 @@
|
|||||||
|
__all__ = ["platform", "chassis"]
|
||||||
|
from sonic_platform import *
|
@ -13,6 +13,8 @@ import sys
|
|||||||
try:
|
try:
|
||||||
from sonic_platform_base.chassis_base import ChassisBase
|
from sonic_platform_base.chassis_base import ChassisBase
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
from glob import glob
|
||||||
|
import os
|
||||||
import io
|
import io
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
@ -20,10 +22,13 @@ try:
|
|||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError (str(e) + "- required module not found")
|
raise ImportError (str(e) + "- required module not found")
|
||||||
|
|
||||||
|
# The default dir for reboot cause files
|
||||||
HWMGMT_SYSTEM_ROOT = '/var/run/hw-management/system/'
|
HWMGMT_SYSTEM_ROOT = '/var/run/hw-management/system/'
|
||||||
|
# The hwmon root dir used in case of the hw-mgmt v1.x.x is used.
|
||||||
|
HWMON_ROOT_PATTERN = '/sys/devices/platform/mlxplat/mlxreg-io/hwmon/hwmon*'
|
||||||
|
|
||||||
#reboot cause related definitions
|
#reboot cause related definitions
|
||||||
REBOOT_CAUSE_ROOT = HWMGMT_SYSTEM_ROOT
|
REBOOT_CAUSE_ROOT = None
|
||||||
|
|
||||||
REBOOT_CAUSE_POWER_LOSS_FILE = 'reset_main_pwr_fail'
|
REBOOT_CAUSE_POWER_LOSS_FILE = 'reset_main_pwr_fail'
|
||||||
REBOOT_CAUSE_AUX_POWER_LOSS_FILE = 'reset_aux_pwr_or_ref'
|
REBOOT_CAUSE_AUX_POWER_LOSS_FILE = 'reset_aux_pwr_or_ref'
|
||||||
@ -37,18 +42,37 @@ REBOOT_CAUSE_FILE_LENGTH = 1
|
|||||||
|
|
||||||
# ========================== Syslog wrappers ==========================
|
# ========================== Syslog wrappers ==========================
|
||||||
SYSLOG_IDENTIFIER = "mlnx-chassis"
|
SYSLOG_IDENTIFIER = "mlnx-chassis"
|
||||||
def log_warning(msg, also_print_to_console=False):
|
def log_warning(msg):
|
||||||
syslog.openlog(SYSLOG_IDENTIFIER)
|
syslog.openlog(SYSLOG_IDENTIFIER)
|
||||||
syslog.syslog(syslog.LOG_WARNING, msg)
|
syslog.syslog(syslog.LOG_WARNING, msg)
|
||||||
syslog.closelog()
|
syslog.closelog()
|
||||||
|
|
||||||
|
def log_info(msg):
|
||||||
|
syslog.openlog(SYSLOG_IDENTIFIER)
|
||||||
|
syslog.syslog(syslog.LOG_INFO, msg)
|
||||||
|
syslog.closelog()
|
||||||
|
|
||||||
class Chassis(ChassisBase):
|
class Chassis(ChassisBase):
|
||||||
"""Platform-specific Chassis class"""
|
"""Platform-specific Chassis class"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
global REBOOT_CAUSE_ROOT
|
||||||
super(Chassis, self).__init__()
|
super(Chassis, self).__init__()
|
||||||
|
|
||||||
|
# adaptively reboot cause root dir initialization
|
||||||
|
REBOOT_CAUSE_ROOT = HWMGMT_SYSTEM_ROOT
|
||||||
|
if not os.path.exists(REBOOT_CAUSE_ROOT):
|
||||||
|
log_warning("reboot cause dir {} doesn't exist, trying other alternatives".format(REBOOT_CAUSE_ROOT))
|
||||||
|
possible_reboot_cause_dir_list = glob(HWMON_ROOT_PATTERN)
|
||||||
|
if possible_reboot_cause_dir_list is None or len(possible_reboot_cause_dir_list) == 0:
|
||||||
|
log_warning("can't find reboot cause files in {}".format(HWMON_ROOT_PATTERN))
|
||||||
|
else:
|
||||||
|
REBOOT_CAUSE_ROOT = possible_reboot_cause_dir_list[0]
|
||||||
|
if len(possible_reboot_cause_dir_list) > 1:
|
||||||
|
log_warning("found multiple reboot cause dir {}, pick the first one".format(possible_reboot_cause_dir_list))
|
||||||
|
else:
|
||||||
|
log_info("pick {} as reboot cause file".format(REBOOT_CAUSE_ROOT))
|
||||||
|
|
||||||
def _read_generic_file(self, filename, len):
|
def _read_generic_file(self, filename, len):
|
||||||
"""
|
"""
|
||||||
Read a generic file, returns the contents of the file
|
Read a generic file, returns the contents of the file
|
||||||
|
Reference in New Issue
Block a user