correctly submit hashrates of custom miner - V5.2.5
This commit is contained in:
parent
15e0810359
commit
81e2659024
|
@ -455,7 +455,7 @@ class CloreClient:
|
||||||
async def submit_specs(self, current_specs):
|
async def submit_specs(self, current_specs):
|
||||||
try:
|
try:
|
||||||
if type(current_specs) == dict:
|
if type(current_specs) == dict:
|
||||||
current_specs["backend_version"]=14
|
current_specs["backend_version"]=15
|
||||||
current_specs["update_hw"]=True
|
current_specs["update_hw"]=True
|
||||||
smallest_pcie_width = 999
|
smallest_pcie_width = 999
|
||||||
for gpu in current_specs["gpus"]["nvidia"]:
|
for gpu in current_specs["gpus"]["nvidia"]:
|
||||||
|
|
|
@ -4,6 +4,20 @@ import asyncio
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
def extract_json_with_key(text, key):
|
||||||
|
json_pattern = r'({.*?})'
|
||||||
|
json_strings = re.findall(json_pattern, text, re.DOTALL)
|
||||||
|
json_objects_with_key = []
|
||||||
|
for json_str in json_strings:
|
||||||
|
try:
|
||||||
|
json_obj = json.loads(json_str)
|
||||||
|
if key in json.dumps(json_obj):
|
||||||
|
json_objects_with_key.append(json_obj)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
continue
|
||||||
|
return json_objects_with_key
|
||||||
|
|
||||||
async def async_run_bash_command(command):
|
async def async_run_bash_command(command):
|
||||||
process = await asyncio.create_subprocess_exec(
|
process = await asyncio.create_subprocess_exec(
|
||||||
|
@ -55,7 +69,7 @@ async def get_session_start_time(pid):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def get_miner_stats(miner_dir, api_timeout=15):
|
async def get_miner_stats(miner_dir, api_timeout=15):
|
||||||
stdout, stderr, code = await async_run_bash_command(f'export PATH=$PATH:/hive/sbin:/hive/bin && export API_TIMEOUT={api_timeout}'+''' && read -t $((API_TIMEOUT + 5)) -d "" pid khs stats < <(function run_miner_scripts { echo "$BASHPID"; cd '''+miner_dir+''' || exit; source h-manifest.conf; source h-config.sh; source h-stats.sh; printf "%q\n" "$khs"; echo "$stats"; }; run_miner_scripts) && [[ $? -ge 128 ]] && [[ ! -z "$pid" && "$pid" -ne $$ ]] && kill -9 "$pid" 2>/dev/null ; echo $stats''')
|
stdout, stderr, code = await async_run_bash_command(f'export PATH=$PATH:/hive/sbin:/hive/bin && export API_TIMEOUT={api_timeout}'+''' && read -t $((API_TIMEOUT + 5)) -d "" pid khs stats < <(function run_miner_scripts { echo "$BASHPID"; cd '''+miner_dir+''' || exit; cd '''+miner_dir+'''; source h-manifest.conf; cd '''+miner_dir+'''; source h-config.sh; cd '''+miner_dir+'''; source h-stats.sh; printf "%q\n" "$khs"; echo "$stats"; }; run_miner_scripts) && [[ $? -ge 128 ]] && [[ ! -z "$pid" && "$pid" -ne $$ ]] && kill -9 "$pid" 2>/dev/null ; echo $stats''')
|
||||||
try:
|
try:
|
||||||
if stdout and not stderr and code == 0:
|
if stdout and not stderr and code == 0:
|
||||||
stats = json.loads(stdout)
|
stats = json.loads(stdout)
|
||||||
|
@ -63,6 +77,10 @@ async def get_miner_stats(miner_dir, api_timeout=15):
|
||||||
else:
|
else:
|
||||||
return 'fail'
|
return 'fail'
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
try:
|
||||||
|
miner_stat_jsons = extract_json_with_key(stdout, "hs_units")
|
||||||
|
return miner_stat_jsons[0] if len(miner_stat_jsons) > 0 else 'fail'
|
||||||
|
except Exception :
|
||||||
return 'fail'
|
return 'fail'
|
||||||
|
|
||||||
async def get_miner_uptime_stats():
|
async def get_miner_uptime_stats():
|
||||||
|
@ -85,6 +103,7 @@ def extract_miner_names(rig_conf):
|
||||||
if key[:5]=="MINER" and (len(key)==5 or str(key[5:]).isdigit()):
|
if key[:5]=="MINER" and (len(key)==5 or str(key[5:]).isdigit()):
|
||||||
if value.startswith('"') and value.endswith('"'):
|
if value.startswith('"') and value.endswith('"'):
|
||||||
value = value.strip('"')
|
value = value.strip('"')
|
||||||
|
if len(value)>0:
|
||||||
miner_names.append(value)
|
miner_names.append(value)
|
||||||
return miner_names
|
return miner_names
|
||||||
|
|
||||||
|
@ -92,7 +111,7 @@ def extract_miner_config(miner_names, wallet_conf):
|
||||||
lines = wallet_conf.split('\n')
|
lines = wallet_conf.split('\n')
|
||||||
meta_config = {}
|
meta_config = {}
|
||||||
miners = {}
|
miners = {}
|
||||||
for miner_name in miner_names:
|
for miner_idx, miner_name in enumerate(miner_names):
|
||||||
remaining_lines = []
|
remaining_lines = []
|
||||||
algos = []
|
algos = []
|
||||||
for line in lines:
|
for line in lines:
|
||||||
|
@ -105,6 +124,8 @@ def extract_miner_config(miner_names, wallet_conf):
|
||||||
if key[:len(miner_name.replace('-','_'))+1].lower() == f"{miner_name.replace('-','_')}_".lower():
|
if key[:len(miner_name.replace('-','_'))+1].lower() == f"{miner_name.replace('-','_')}_".lower():
|
||||||
if key.split('_')[-1][:4].lower()=="algo":
|
if key.split('_')[-1][:4].lower()=="algo":
|
||||||
algos.append(value)
|
algos.append(value)
|
||||||
|
elif miner_name.lower()=="custom" and key.lower()=="custom_miner":
|
||||||
|
miner_names[miner_idx] = os.path.join(miner_names[miner_idx],value)
|
||||||
elif key.lower()=="meta":
|
elif key.lower()=="meta":
|
||||||
try:
|
try:
|
||||||
meta_config=json.loads(value)
|
meta_config=json.loads(value)
|
||||||
|
@ -118,11 +139,13 @@ def extract_miner_config(miner_names, wallet_conf):
|
||||||
"coins":[]
|
"coins":[]
|
||||||
}
|
}
|
||||||
for miner_name in miner_names:
|
for miner_name in miner_names:
|
||||||
|
if "custom/" in miner_name.lower():
|
||||||
|
miner_name = "custom"
|
||||||
if miner_name in meta_config and type(meta_config[miner_name]) == dict:
|
if miner_name in meta_config and type(meta_config[miner_name]) == dict:
|
||||||
for key in meta_config[miner_name].keys():
|
for key in meta_config[miner_name].keys():
|
||||||
if "coin" in key:
|
if "coin" in key:
|
||||||
miners[miner_name]["coins"].append(meta_config[miner_name][key])
|
miners[miner_name]["coins"].append(meta_config[miner_name][key])
|
||||||
return miners
|
return miner_names, miners
|
||||||
|
|
||||||
def sum_numbers_in_list(lst):
|
def sum_numbers_in_list(lst):
|
||||||
if all(isinstance(i, (int, float)) for i in lst):
|
if all(isinstance(i, (int, float)) for i in lst):
|
||||||
|
@ -146,7 +169,7 @@ class hive_interface:
|
||||||
async def get_configured_miners(self):
|
async def get_configured_miners(self):
|
||||||
rig_conf, wallet_conf = await asyncio.gather(*[check_and_read_file(self.hive_rig_config), check_and_read_file(self.hive_wallet_config)])
|
rig_conf, wallet_conf = await asyncio.gather(*[check_and_read_file(self.hive_rig_config), check_and_read_file(self.hive_wallet_config)])
|
||||||
miner_names = extract_miner_names(rig_conf)
|
miner_names = extract_miner_names(rig_conf)
|
||||||
miner_config = extract_miner_config(miner_names, wallet_conf)
|
miner_names, miner_config = extract_miner_config(miner_names, wallet_conf)
|
||||||
return miner_names, miner_config
|
return miner_names, miner_config
|
||||||
|
|
||||||
async def export_miner_stats(self, get_hashrates=False):
|
async def export_miner_stats(self, get_hashrates=False):
|
||||||
|
@ -160,6 +183,8 @@ class hive_interface:
|
||||||
output["miners"]=miner_config
|
output["miners"]=miner_config
|
||||||
if get_hashrates:
|
if get_hashrates:
|
||||||
miners_stats = await self.get_miners_stats(miner_names)
|
miners_stats = await self.get_miners_stats(miner_names)
|
||||||
|
for idx, miner_name in enumerate(miner_names):
|
||||||
|
miner_names[idx] = "custom" if "custom/" in miner_name.lower() else miner_name
|
||||||
for idx, miner_stats in enumerate(miners_stats):
|
for idx, miner_stats in enumerate(miners_stats):
|
||||||
if type(miner_stats) == dict:
|
if type(miner_stats) == dict:
|
||||||
for key in miner_stats.keys():
|
for key in miner_stats.keys():
|
||||||
|
|
Loading…
Reference in New Issue