def create_s3ip_psu_sysfs()

in platform/pddf/i2c/utils/pddf_s3ip.py [0:0]


def create_s3ip_psu_sysfs():
    print("Creating the System PSU sysfs ..")
    log_os_system('sudo mkdir -p -m 777 /sys_switch/psu', 1)
    num_psus = pddf_api.data['PLATFORM']['num_psus'] if 'num_psus' in pddf_api.data['PLATFORM'] else 0
    cmd = 'sudo echo "{}" > /sys_switch/psu/number'.format(num_psus)
    log_os_system(cmd, 1)

    for p in range(1, num_psus+1):
        cmd = 'sudo mkdir -p -m 777 /sys_switch/psu/psu{}'.format(p)
        log_os_system(cmd, 1)

        # model name
        try:
            model = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_model_name'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                model = ''.join(c for c in output if 0 < ord(c) < 127)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/model_name'.format(model, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/model_name'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/model_name'.format(model, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/model_name'.format(model, p)

        log_os_system(cmd, 1)

        # hardware_version
        hw_rev = 'NA'
        cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/hardware_version'.format(hw_rev, p)
        log_os_system(cmd, 1)

        # serial_number
        try:
            serial = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_serial_num'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                serial = ''.join(c for c in output if 0 < ord(c) < 127)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/serial_number'.format(serial, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/serial_number'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/serial_number'.format(serial, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/serial_number'.format(serial, p)

        log_os_system(cmd, 1)

        # part_number ?? same as model name ??
        part_num = 'NA'
        cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/part_number'.format(part_num, p)
        log_os_system(cmd, 1)

        # type (AC or DC. Fixing it to AC for now)
        psutype = 1 # for AC
        cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/type'.format(psutype, p)
        log_os_system(cmd, 1)

        # in_curr (input current in milli amps)
        try:
            in_curr = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_i_in'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                if output.replace('.', '', 1).isdigit():
                    in_curr = float(output)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_curr'.format(in_curr, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/in_curr'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_curr'.format(in_curr, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_curr'.format(in_curr, p)

        log_os_system(cmd, 1)

        # in_vol (input current in milli volts)
        try:
            in_vol = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_v_in'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                if output.replace('.', '', 1).isdigit():
                    in_vol = float(output)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_vol'.format(in_vol, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/in_vol'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_vol'.format(in_vol, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_vol'.format(in_vol, p)

        log_os_system(cmd, 1)

        # in_power (input current in micro watts)
        try:
            in_power = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_p_in'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                if output.replace('.', '', 1).isdigit():
                    in_power = float(output)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_power'.format(in_power, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/in_power'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_power'.format(in_power, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_power'.format(in_power, p)

        log_os_system(cmd, 1)

        # out_max_power (input current in micro watts)
        try:
            out_max_power = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_p_out_max'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                if output.replace('.', '', 1).isdigit():
                    out_max_power = float(output)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_max_power'.format(out_max_power, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_max_power'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_max_power'.format(out_max_power, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_max_power'.format(out_max_power, p)

        log_os_system(cmd, 1)

        # out_curr (input current in milli amps)
        try:
            out_curr = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_i_in'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                if output.replace('.', '', 1).isdigit():
                    out_curr = float(output)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_curr'.format(out_curr, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_curr'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_curr'.format(out_curr, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_curr'.format(out_curr, p)

        log_os_system(cmd, 1)

        # out_vol (input current in milli volts)
        try:
            out_vol = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_v_in'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                if output.replace('.', '', 1).isdigit():
                    out_vol = float(output)
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_vol'.format(out_vol, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_vol'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_vol'.format(out_vol, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_vol'.format(out_vol, p)

        log_os_system(cmd, 1)

        # number of temps
        ntemps = 1 # fixing it for now
        cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/num_temp_sensors'.format(ntemps, p)
        log_os_system(cmd, 1)

        for t in range(1, ntemps+1):
            cmd = 'sudo mkdir -p -m 777 /sys_switch/psu/psu{}/temp{}'.format(p, t)
            log_os_system(cmd, 1)

            # Add PSU temperature sensors attributes

        # number of power sensors
        npowers = 1
        cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/num_power_sensors'.format(npowers, p)
        log_os_system(cmd, 1)

        for power in range(1, npowers+1):
            cmd = 'sudo mkdir -p -m 777 /sys_switch/psu/psu{}/power_sensor{}'.format(p, power)
            log_os_system(cmd, 1)

            # Add PSU power sensors attributes here

        # present
        try:
            pres = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_present'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                pres = output
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/present'.format(pres, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/present'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/present'.format(pres, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/present'.format(pres, p)

        log_os_system(cmd, 1)

        # out_status
        try:
            status = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_power_good'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                status = output
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_status'.format(status, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_status'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_status'.format(status, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_status'.format(status, p)

        log_os_system(cmd, 1)

        # in_status
        in_status = 'NA'
        cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_status'.format(in_status, p)
        log_os_system(cmd, 1)

        # fan_speed
        try:
            fan_speed = 'NA'
            dev = 'PSU{}'.format(p)
            attr = 'psu_fan1_speed_rpm'
            bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
            if bmc_attr is not None and bmc_attr!={}:
                output = pddf_api.bmc_get_cmd(bmc_attr)
                output = output.rstrip()
                if output.replace('.', '', 1).isdigit():
                    fan_speed = int(float(output))
                cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_speed'.format(fan_speed, p)
            else:
                # I2C based attribute
                node = pddf_api.get_path(dev, attr)
                if node:
                    cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/fan_speed'.format(node, p)
                else:
                    cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_speed'.format(fan_speed, p)
        except Exception as err:
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_speed'.format(fan_speed, p)

        log_os_system(cmd, 1)

        # fan_ratio
        fan_ratio = 'NA'
        cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_ratio'.format(fan_ratio, p)
        log_os_system(cmd, 1)

        # led_status
        result, output = pddf_api.get_system_led_color("PSU{}_LED".format(p))
        if result:
            node = "/sys/kernel/{}/psu{}_led".format(pddf_api.get_led_cur_state_path(), p)
            cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/led_status'.format(node, p)
        else:
            led_status = 'NA'
            cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/led_status'.format(led_status, p)
        log_os_system(cmd, 1)

    print("Completed PSU sysfs creation")