92 lines
2.4 KiB
Python
92 lines
2.4 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: UTF-8 -*-
|
||
|
import click
|
||
|
import time
|
||
|
import traceback
|
||
|
from ragileutil import wait_docker, STARTMODULE, AVSUTIL
|
||
|
from rgutil.logutil import Logger
|
||
|
|
||
|
try:
|
||
|
from rest.rest import BMCMessage
|
||
|
except ImportError:
|
||
|
pass
|
||
|
|
||
|
CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])
|
||
|
logger = Logger("AVSCONTROL", syslog=True)
|
||
|
|
||
|
|
||
|
class AliasedGroup(click.Group):
|
||
|
def get_command(self, ctx, cmd_name):
|
||
|
rv = click.Group.get_command(self, ctx, cmd_name)
|
||
|
if rv is not None:
|
||
|
return rv
|
||
|
matches = [x for x in self.list_commands(ctx) if x.startswith(cmd_name)]
|
||
|
if not matches:
|
||
|
return None
|
||
|
elif len(matches) == 1:
|
||
|
return click.Group.get_command(self, ctx, matches[0])
|
||
|
ctx.fail("Too many matches: %s" % ", ".join(sorted(matches)))
|
||
|
|
||
|
|
||
|
def do_avs_ctrl():
|
||
|
index = 0
|
||
|
url = "/xyz/openbmc_project/hostchannel/attr/MacRov"
|
||
|
while True:
|
||
|
if (
|
||
|
"avscontrol_restful" in STARTMODULE
|
||
|
and STARTMODULE["avscontrol_restful"] == 1
|
||
|
):
|
||
|
try:
|
||
|
# for alibmc rest.py has define get_macrov_value function
|
||
|
get_macrov_value = getattr(BMCMessage(), "get_macrov_value", None)
|
||
|
if callable(get_macrov_value):
|
||
|
macrov_value = int(get_macrov_value())
|
||
|
else:
|
||
|
macrov_value = int(BMCMessage().getBmcValue(url))
|
||
|
if macrov_value >= 0:
|
||
|
break
|
||
|
except Exception as e:
|
||
|
time.sleep(2)
|
||
|
continue
|
||
|
else:
|
||
|
if AVSUTIL.mac_adj():
|
||
|
break
|
||
|
|
||
|
index += 1
|
||
|
if index >= 10:
|
||
|
logger.error("%%DEV_MONITOR-AVS: MAC Voltage adjust failed.")
|
||
|
exit(-1)
|
||
|
logger.info("%%AVSCONTROL success")
|
||
|
exit(0)
|
||
|
|
||
|
|
||
|
def run(interval):
|
||
|
while True:
|
||
|
try:
|
||
|
if wait_docker(timeout=0) == True:
|
||
|
time.sleep(10) # w10s
|
||
|
do_avs_ctrl()
|
||
|
time.sleep(interval)
|
||
|
except Exception as e:
|
||
|
traceback.print_exc()
|
||
|
print(e)
|
||
|
|
||
|
|
||
|
@click.group(cls=AliasedGroup, context_settings=CONTEXT_SETTINGS)
|
||
|
def main():
|
||
|
"""device operator"""
|
||
|
pass
|
||
|
|
||
|
|
||
|
@main.command()
|
||
|
def start():
|
||
|
"""start AVS control"""
|
||
|
logger.info("%%AVSCONTROL start")
|
||
|
interval = 5
|
||
|
run(interval)
|
||
|
|
||
|
|
||
|
##device_i2c operation
|
||
|
if __name__ == "__main__":
|
||
|
main()
|