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()