Update state_manager.py

This commit is contained in:
DJObleezy 2025-03-27 09:51:42 -07:00 committed by GitHub
parent fbdade3837
commit b4b6995cc1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -343,6 +343,7 @@ class StateManager:
try: try:
previous_val = arrow_history[key][-1]["value"] previous_val = arrow_history[key][-1]["value"]
previous_unit = arrow_history[key][-1].get("unit", "") previous_unit = arrow_history[key][-1].get("unit", "")
previous_arrow = arrow_history[key][-1].get("arrow", "") # Get previous arrow
# Use the convert_to_ths function to normalize both values before comparison # Use the convert_to_ths function to normalize both values before comparison
if key.startswith("hashrate") and current_unit: if key.startswith("hashrate") and current_unit:
@ -350,23 +351,44 @@ class StateManager:
norm_curr_val = convert_to_ths(float(current_val), current_unit) norm_curr_val = convert_to_ths(float(current_val), current_unit)
norm_prev_val = convert_to_ths(float(previous_val), previous_unit if previous_unit else "th/s") norm_prev_val = convert_to_ths(float(previous_val), previous_unit if previous_unit else "th/s")
if norm_curr_val > norm_prev_val * 1.01: # 1% threshold to avoid minor fluctuations # Lower the threshold to 0.05% for more sensitivity
if norm_curr_val > norm_prev_val * 1.0005:
arrow = "" arrow = ""
elif norm_curr_val < norm_prev_val * 0.99: # 1% threshold elif norm_curr_val < norm_prev_val * 0.9995:
arrow = "" arrow = ""
else:
arrow = previous_arrow # Preserve previous arrow if change is insignificant
else: else:
# For non-hashrate values or when units are missing # For non-hashrate values or when units are missing
if float(current_val) > float(previous_val) * 1.01: # Try to convert to float for comparison
arrow = "" try:
elif float(current_val) < float(previous_val) * 0.99: curr_float = float(current_val)
arrow = "" prev_float = float(previous_val)
# Lower the threshold to 0.05% for more sensitivity
if curr_float > prev_float * 1.0005:
arrow = ""
elif curr_float < prev_float * 0.9995:
arrow = ""
else:
arrow = previous_arrow # Preserve previous arrow
except (ValueError, TypeError):
# If values can't be converted to float, compare directly
if current_val != previous_val:
arrow = "" if current_val > previous_val else ""
else:
arrow = previous_arrow # Preserve previous arrow
except Exception as e: except Exception as e:
logging.error(f"Error calculating arrow for {key}: {e}") logging.error(f"Error calculating arrow for {key}: {e}")
# Keep previous arrow on error instead of empty string
if arrow_history[key] and arrow_history[key][-1].get("arrow"):
arrow = arrow_history[key][-1]["arrow"]
if key not in arrow_history: if key not in arrow_history:
arrow_history[key] = [] arrow_history[key] = []
if not arrow_history[key] or arrow_history[key][-1]["time"] != current_second: if not arrow_history[key] or arrow_history[key][-1]["time"] != current_second:
# Create new entry
entry = { entry = {
"time": current_second, "time": current_second,
"value": current_val, "value": current_val,
@ -378,8 +400,11 @@ class StateManager:
arrow_history[key].append(entry) arrow_history[key].append(entry)
else: else:
# Update existing entry
arrow_history[key][-1]["value"] = current_val arrow_history[key][-1]["value"] = current_val
arrow_history[key][-1]["arrow"] = arrow # Only update arrow if it's not empty - this preserves arrows between changes
if arrow:
arrow_history[key][-1]["arrow"] = arrow
# Update unit if available # Update unit if available
if current_unit: if current_unit:
arrow_history[key][-1]["unit"] = current_unit arrow_history[key][-1]["unit"] = current_unit