HEX
Server: Apache/2.2.34 (Unix) mod_fastcgi/mod_fastcgi-SNAP-0910052141
System: Linux Kou-Etsu-Dou 4.4.59+ #25556 SMP PREEMPT Thu Mar 4 18:03:46 CST 2021 x86_64
User: hosam (1026)
PHP: 7.2.29
Disabled: NONE
Upload Files
File: //usr/syno/bin/user.data.collector/synouserdata_hw_config
#!/usr/bin/python

from subprocess import check_output
from os import listdir
import StringIO
import json
import sys
import os
import ConfigParser

COLLECTOR_VERSION_KEY = "collector_version"
COLLECTOR_VERSION = 1

FAN_SPEED = "fan_speed"
ZRAM = "zram"
BUZZEROFF_CFG = "buzzeroff_cfg"
LED_BRIFGTNESS = "led_brightness"
HIBERNATION = "hibernation"
UPS = "ups"

DUMMY_SECTION = "dummy_section"
SZ_DEFAULT = "default"
SZ_NO = "no"
SZ_YES = "yes"
SZ_NOT_SNMP = "snmp_not_enabled"
SZ_DISABLED = "disabled"
SZ_NOT_SUPPORT = "not_support"

SZF_SYNOINFO_CONF = "/etc/synoinfo.conf"
SZF_VERSION = "/etc.defaults/VERSION"
SZF_UPS_CONF_DSM7 = "/usr/syno/etc/ups/synoups.conf"

def getConfig(config_file):
    append_dummy_fp = StringIO.StringIO('[' + DUMMY_SECTION + ']\n' + open(config_file, 'r').read())
    config = ConfigParser.RawConfigParser()
    config.readfp(append_dummy_fp)
    return config

def getValueFromConfig(config, key):
    try:
        ret = config.get(DUMMY_SECTION, key)
    except ConfigParser.NoOptionError:
        raise ConfigParser.NoOptionError
    except:
        ret = ""
    ret = ret.strip('\"')
    return ret

def getFanSpeed(config):
    try:
        res = getValueFromConfig(config, "fan_config_type_internal")
    except:
        res = SZ_DEFAULT
    return res

def getZram(config):
    try:
        if ("yes" == getValueFromConfig(config, "support_zram")):
            res = getValueFromConfig(config, "enable_zram")
        else:
            res = SZ_NOT_SUPPORT
    except:
        res = SZ_NOT_SUPPORT
    return res

def getBuzzerConfig(config):
    try:
        res = getValueFromConfig(config, "buzzeroffcfg")
    except:
        res = SZ_NOT_SUPPORT
    return res

def getLedBrightness(config):
    try:
        if ("yes" == getValueFromConfig(config, "support_led_brightness_adjustment")):
            res = getValueFromConfig(config, "led_brightness_adjusted_level")
        else:
            res = SZ_NOT_SUPPORT
    except:
        res = SZ_NOT_SUPPORT
    return res

def getHibernation(config):
    res_json = {"standbytimer" : 0,
                "usb_standbytimer" : 0,
                "sata_deep_sleep_en" : SZ_DEFAULT}
    try:
        res_json["standbytimer"] = int(getValueFromConfig(config, "standbytimer"))
    except:
        res_json["standbytimer"] = -1

    try:
        res_json["usb_standbytimer"] = int(getValueFromConfig(config, "usb_standbytimer"))
    except:
        res_json["usb_standbytimer"] = -1

    try:
        res_json["sata_deep_sleep_en"] = getValueFromConfig(config, "sata_deep_sleep_en")
    except:
        res_json["sata_deep_sleep_en"] = SZ_NOT_SUPPORT
    return res_json

def getUPS(config, majorversion):
    res_json = {"majorversion" : 0,
                "ups_enabled" : SZ_DEFAULT,
                "ups_type" : SZ_DEFAULT,
                "ups_shutdown" : SZ_DEFAULT,
                "ups_waittime" : -1,
                "ups_acl_enabled" : SZ_DEFAULT,
                "ups_snmp_version" : 0,
                "ups_snmp_mib" : "auto"}
    res_json["majorversion"] = majorversion

    try:
        if (SZ_YES == getValueFromConfig(config, "supportups")):
            try:
                res_json["ups_enabled"] = getValueFromConfig(config, "ups_enabled")
            except:
                res_json["ups_enabled"] = SZ_NO

            if res_json["ups_enabled"] == SZ_YES :
                try:
                    res_json["ups_type"] = getValueFromConfig(config, "ups_mode")
                except:
                    res_json["ups_type"] = SZ_NOT_SUPPORT
            else:
                res_json["ups_type"] = SZ_DISABLED

            try:
                res_json["ups_shutdown"] = getValueFromConfig(config, "ups_safeshutdown")
            except:
                res_json["ups_shutdown"] = SZ_YES

            try:
                res_json["ups_waittime"] = int(getValueFromConfig(config, "ups_wait_time"))
            except:
                res_json["ups_waittime"] = -1

            try:
                if (getValueFromConfig(config, "ups_safeshutdown").startswith("|")):
                    res_json["ups_acl_enabled"] = SZ_NO
                else:
                    res_json["ups_acl_enabled"] = SZ_YES
            except:
                res_json["ups_acl_enabled"] = SZ_NO

            if ("snmp" == res_json["ups_type"]):
                try:
                    res_json["ups_snmp_version"] = getValueFromConfig(config, "ups_snmp_version")
                except:
                    res_json["ups_snmp_version"] = SZ_NOT_SUPPORT

                try:
                    res_json["ups_snmp_mib"] = getValueFromConfig(config, "ups_snmp_mib")
                except:
                    res_json["ups_snmp_mib"] = SZ_NOT_SUPPORT

            else:
                res_json["ups_snmp_version"] = SZ_NOT_SNMP
                res_json["ups_snmp_mib"] = SZ_NOT_SNMP

    except:
        res_json["ups_enabled"] = SZ_NOT_SUPPORT
        res_json["ups_type"] = SZ_NOT_SUPPORT
        res_json["ups_shutdown"] = SZ_NOT_SUPPORT
        res_json["ups_waittime"] = -1
        res_json["ups_acl_enabled"] = SZ_NOT_SUPPORT
        res_json["ups_snmp_version"] = SZ_NOT_SUPPORT
        res_json["ups_snmp_mib"] = SZ_NOT_SUPPORT

    return res_json

def main():
    result = {
        COLLECTOR_VERSION_KEY: COLLECTOR_VERSION,
        FAN_SPEED : SZ_DEFAULT,
        ZRAM : SZ_DEFAULT,
        BUZZEROFF_CFG : SZ_DEFAULT,
        LED_BRIFGTNESS : SZ_DEFAULT,
        HIBERNATION : {},
        UPS : {}
    }

    synoinfo_config = getConfig(SZF_SYNOINFO_CONF)
    version_config = getConfig(SZF_VERSION)

    majorversion = int(getValueFromConfig(version_config, "majorversion"))

    result[FAN_SPEED] = getFanSpeed(synoinfo_config)
    result[ZRAM] = getZram(synoinfo_config)
    result[BUZZEROFF_CFG] = getBuzzerConfig(synoinfo_config)
    result[LED_BRIFGTNESS] = getLedBrightness(synoinfo_config)
    result[HIBERNATION] = getHibernation(synoinfo_config)
    result[UPS] = getUPS(synoinfo_config, majorversion)

    sys.stdout.write(json.dumps(result))

if __name__ == '__main__':
    main()