feature: parse vnish presets
This commit is contained in:
committed by
Brett Rowan
parent
7f74b083d3
commit
1ba0f8ed83
@@ -245,13 +245,13 @@ class MinerConfig(BaseModel):
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_vnish(cls, web_settings: dict) -> "MinerConfig":
|
||||
def from_vnish(cls, web_settings: dict, web_presets: list[dict]) -> "MinerConfig":
|
||||
"""Constructs a MinerConfig object from web settings for VNish miners."""
|
||||
return cls(
|
||||
pools=PoolConfig.from_vnish(web_settings),
|
||||
fan_mode=FanModeConfig.from_vnish(web_settings),
|
||||
temperature=TemperatureConfig.from_vnish(web_settings),
|
||||
mining_mode=MiningModeConfig.from_vnish(web_settings),
|
||||
mining_mode=MiningModeConfig.from_vnish(web_settings, web_presets),
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -346,12 +346,27 @@ class MiningModeHashrateTune(MinerConfigValue):
|
||||
|
||||
|
||||
class MiningModePreset(MinerConfigValue):
|
||||
mode: str = field(init=False, default="preset")
|
||||
|
||||
active_preset: MiningPreset
|
||||
available_presets: list[MiningPreset] = field(default_factory=list)
|
||||
|
||||
def as_vnish(self) -> dict:
|
||||
return {"overclock": {**self.active_preset.as_vnish()}}
|
||||
|
||||
@classmethod
|
||||
def from_vnish(
|
||||
cls, web_overclock_settings: dict, web_presets: list[dict]
|
||||
) -> "MiningModePreset":
|
||||
active_preset = None
|
||||
for preset in web_presets:
|
||||
if preset["name"] == web_overclock_settings["preset"]:
|
||||
active_preset = preset
|
||||
return cls(
|
||||
active_preset=MiningPreset.from_vnish(active_preset),
|
||||
available_presets=[MiningPreset.from_vnish(p) for p in web_presets],
|
||||
)
|
||||
|
||||
|
||||
class ManualBoardSettings(MinerConfigValue):
|
||||
freq: float
|
||||
@@ -571,7 +586,7 @@ class MiningModeConfig(MinerConfigOption):
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_vnish(cls, web_settings: dict):
|
||||
def from_vnish(cls, web_settings: dict, web_presets: list[dict]):
|
||||
try:
|
||||
mode_settings = web_settings["miner"]["overclock"]
|
||||
except KeyError:
|
||||
@@ -580,7 +595,7 @@ class MiningModeConfig(MinerConfigOption):
|
||||
if mode_settings["preset"] == "disabled":
|
||||
return MiningModeManual.from_vnish(mode_settings)
|
||||
else:
|
||||
return cls.power_tuning(power=int(mode_settings["preset"]))
|
||||
return MiningModePreset.from_vnish(mode_settings, web_presets)
|
||||
|
||||
@classmethod
|
||||
def from_boser(cls, grpc_miner_conf: dict):
|
||||
|
||||
@@ -12,3 +12,23 @@ class MiningPreset(MinerConfigValue):
|
||||
if self.name is not None:
|
||||
return {"preset": self.name}
|
||||
return {}
|
||||
|
||||
@classmethod
|
||||
def from_vnish(cls, web_preset: dict):
|
||||
name = web_preset["name"]
|
||||
hr_power_split = web_preset["pretty"].split("~")
|
||||
if len(hr_power_split) == 1:
|
||||
power = None
|
||||
hashrate = None
|
||||
else:
|
||||
power = hr_power_split[0].replace("watt", "").strip()
|
||||
hashrate = hr_power_split[1].replace("TH", "").strip()
|
||||
tuned = web_preset["status"] == "tuned"
|
||||
modded_psu = web_preset["modded_psu_required"]
|
||||
return cls(
|
||||
name=name,
|
||||
power=power,
|
||||
hashrate=hashrate,
|
||||
tuned=tuned,
|
||||
modded_psu=modded_psu,
|
||||
)
|
||||
|
||||
@@ -266,7 +266,8 @@ class VNish(VNishFirmware, BMMiner):
|
||||
async def get_config(self) -> MinerConfig:
|
||||
try:
|
||||
web_settings = await self.web.settings()
|
||||
web_presets = await self.web.autotune_presets()
|
||||
except APIError:
|
||||
return self.config
|
||||
self.config = MinerConfig.from_vnish(web_settings)
|
||||
self.config = MinerConfig.from_vnish(web_settings, web_presets)
|
||||
return self.config
|
||||
|
||||
Reference in New Issue
Block a user