mirror of
https://github.com/lkddi/dell-fans-controller-docker.git
synced 2026-05-18 21:57:29 +08:00
降低IPMI会话失败时的控制器压力
This commit is contained in:
@@ -36,7 +36,8 @@ class FanController:
|
||||
return -1 # 表示应切换到自动模式
|
||||
|
||||
def run(self):
|
||||
temperature: int = max(self.ipmi.temperature())
|
||||
sensor_data = self.ipmi.sensor()
|
||||
temperature: int = max(self.ipmi.temperature(sensor_data))
|
||||
logger.info(f'当前最高温度: {temperature}')
|
||||
|
||||
required_speed = self.get_required_fan_speed(temperature)
|
||||
@@ -59,18 +60,12 @@ class FanController:
|
||||
self.is_auto_mode = False
|
||||
|
||||
# 获取当前风扇转速
|
||||
current_speed = self.ipmi.get_fan_duty_cycle()
|
||||
current_speed = self.ipmi.get_fan_duty_cycle(sensor_data)
|
||||
|
||||
# 只有在当前转速与所需转速不同时才调整
|
||||
# 如果无法获取当前转速(返回-1),则检查是否已记录之前设置的速度
|
||||
if current_speed == -1:
|
||||
# 如果无法获取当前转速,但上次设置的速度与所需速度不同,则更新
|
||||
if self.last_set_speed != required_speed:
|
||||
logger.info(f'无法获取当前风扇转速,但上次设置({self.last_set_speed}%)与需要({required_speed}%)不同,进行设置')
|
||||
self.set_fan_speed(required_speed)
|
||||
self.last_set_speed = required_speed
|
||||
else:
|
||||
logger.info(f'无法获取当前风扇转速,且未改变设置,无需操作')
|
||||
logger.warning('无法获取当前风扇转速,为避免IPMI会话不稳定时盲目写入,本轮跳过设置')
|
||||
elif current_speed != required_speed:
|
||||
logger.info(f'当前风扇转速: {current_speed}%, 需要转速: {required_speed}%')
|
||||
self.set_fan_speed(required_speed)
|
||||
|
||||
+8
-6
@@ -61,12 +61,14 @@ class IpmiTool:
|
||||
"""
|
||||
return self.run_cmd(cmd='sdr')
|
||||
|
||||
def temperature(self) -> list:
|
||||
def temperature(self, data: str = None) -> list:
|
||||
"""
|
||||
get current temperature
|
||||
获取当前温度传感器列表
|
||||
:return:
|
||||
"""
|
||||
data = self.sensor()
|
||||
if data is None:
|
||||
data = self.sensor()
|
||||
|
||||
temperatures = []
|
||||
import re
|
||||
|
||||
@@ -108,9 +110,9 @@ class IpmiTool:
|
||||
continue
|
||||
return fan_speeds
|
||||
|
||||
def get_fan_duty_cycle(self) -> int:
|
||||
def get_fan_duty_cycle(self, sensor_data: str = None) -> int:
|
||||
"""
|
||||
get current fan duty cycle/percentage
|
||||
获取当前风扇占空比/百分比
|
||||
:return: current fan duty cycle in percentage
|
||||
"""
|
||||
try:
|
||||
@@ -134,7 +136,7 @@ class IpmiTool:
|
||||
|
||||
# If raw command fails or returns 0, get fan speeds from sensor data and convert to approximate percentage
|
||||
try:
|
||||
data = self.sensor()
|
||||
data = sensor_data if sensor_data is not None else self.sensor()
|
||||
fan_rpm_values = []
|
||||
import re
|
||||
|
||||
|
||||
@@ -19,12 +19,14 @@ if __name__ == '__main__':
|
||||
if not password:
|
||||
raise RuntimeError('未设置 PASSWORD 环境变量')
|
||||
|
||||
client = FanController(host=host, username=username, password=password)
|
||||
|
||||
while True:
|
||||
try:
|
||||
client = FanController(host=host, username=username, password=password)
|
||||
client.run()
|
||||
time.sleep(60)
|
||||
except Exception as err:
|
||||
logger.error(
|
||||
f'运行控制器失败 {err}. {traceback.format_exc()}'
|
||||
)
|
||||
time.sleep(60)
|
||||
|
||||
Reference in New Issue
Block a user