mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-11-18 03:26:17 +00:00
Update AppImage
This commit is contained in:
@@ -98,7 +98,7 @@ const getMonitoringToolRecommendation = (vendor: string): string => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (lowerVendor.includes("amd") || lowerVendor.includes("ati")) {
|
if (lowerVendor.includes("amd") || lowerVendor.includes("ati")) {
|
||||||
return "To get extended GPU monitoring information, please install radeontop package."
|
return "To get extended GPU monitoring information, please install amdgpu_top package. Download from: https://github.com/Umio-Yasuno/amdgpu_top/releases"
|
||||||
}
|
}
|
||||||
return "To get extended GPU monitoring information, please install the appropriate GPU monitoring tools for your hardware."
|
return "To get extended GPU monitoring information, please install the appropriate GPU monitoring tools for your hardware."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1734,7 +1734,9 @@ def get_ups_info():
|
|||||||
|
|
||||||
# Return first UPS for backward compatibility, or None if no UPS found
|
# Return first UPS for backward compatibility, or None if no UPS found
|
||||||
return ups_list[0] if ups_list else None
|
return ups_list[0] if ups_list else None
|
||||||
|
|
||||||
# </CHANGE>
|
# </CHANGE>
|
||||||
|
|
||||||
def identify_temperature_sensor(sensor_name, adapter):
|
def identify_temperature_sensor(sensor_name, adapter):
|
||||||
"""Identify what a temperature sensor corresponds to and assign a category"""
|
"""Identify what a temperature sensor corresponds to and assign a category"""
|
||||||
sensor_lower = sensor_name.lower()
|
sensor_lower = sensor_name.lower()
|
||||||
@@ -1756,7 +1758,7 @@ def identify_temperature_sensor(sensor_name, adapter):
|
|||||||
display_name = sensor_name
|
display_name = sensor_name
|
||||||
|
|
||||||
# GPU
|
# GPU
|
||||||
elif any(gpu in adapter_lower for gpu in ["nouveau", "amdgpu", "radeon", "i915", "nvidia"]):
|
elif "nouveau" in adapter_lower or "amdgpu" in adapter_lower or "radeon" in adapter_lower or "i915" in adapter_lower or "nvidia" in adapter_lower: # Check adapter for GPU drivers
|
||||||
category = "GPU"
|
category = "GPU"
|
||||||
display_name = f"GPU - {sensor_name}"
|
display_name = f"GPU - {sensor_name}"
|
||||||
elif any(gpu in sensor_lower for gpu in ["gpu", "vga", "graphics"]):
|
elif any(gpu in sensor_lower for gpu in ["gpu", "vga", "graphics"]):
|
||||||
@@ -2783,7 +2785,6 @@ def get_detailed_gpu_info(gpu):
|
|||||||
print(f"[v0] ===== Exiting get_detailed_gpu_info for GPU {slot} =====", flush=True)
|
print(f"[v0] ===== Exiting get_detailed_gpu_info for GPU {slot} =====", flush=True)
|
||||||
return detailed_info
|
return detailed_info
|
||||||
|
|
||||||
|
|
||||||
def get_pci_device_info(pci_slot):
|
def get_pci_device_info(pci_slot):
|
||||||
"""Get detailed PCI device information for a given slot"""
|
"""Get detailed PCI device information for a given slot"""
|
||||||
pci_info = {}
|
pci_info = {}
|
||||||
@@ -2883,6 +2884,72 @@ def get_network_hardware_info(pci_slot):
|
|||||||
|
|
||||||
return net_info
|
return net_info
|
||||||
|
|
||||||
|
def identify_gpu_type(gpu_name, vendor):
|
||||||
|
"""
|
||||||
|
Identify if a GPU is integrated or discrete based on its name and vendor.
|
||||||
|
|
||||||
|
Integrated GPUs:
|
||||||
|
- Intel: HD Graphics, UHD Graphics, Iris, Iris Xe (but NOT Arc)
|
||||||
|
- AMD: Radeon Vega (integrated), Radeon Graphics (APU), with keywords like "Integrated"
|
||||||
|
- NVIDIA: Tegra (rare in servers)
|
||||||
|
|
||||||
|
Discrete GPUs:
|
||||||
|
- Intel: Arc series (A380, A750, A770, etc.)
|
||||||
|
- NVIDIA: GeForce, Quadro, Tesla, RTX, GTX
|
||||||
|
- AMD: Radeon RX, Radeon Pro, FirePro, Radeon VII
|
||||||
|
"""
|
||||||
|
gpu_name_lower = gpu_name.lower()
|
||||||
|
|
||||||
|
# Keywords that indicate an integrated GPU
|
||||||
|
integrated_keywords = [
|
||||||
|
'integrated', 'on-board', 'built-in', 'onboard',
|
||||||
|
'hd graphics', 'uhd graphics', 'iris graphics', 'iris xe graphics',
|
||||||
|
'radeon vega', 'radeon graphics', # AMD APU integrated graphics
|
||||||
|
'tegra' # NVIDIA Tegra (rare)
|
||||||
|
]
|
||||||
|
|
||||||
|
# Keywords that indicate a discrete GPU
|
||||||
|
discrete_keywords = [
|
||||||
|
# Intel discrete
|
||||||
|
'arc a', 'arc graphics',
|
||||||
|
# NVIDIA discrete
|
||||||
|
'geforce', 'quadro', 'tesla', 'rtx', 'gtx', 'titan',
|
||||||
|
# AMD discrete
|
||||||
|
'radeon rx', 'radeon pro', 'radeon vii', 'radeon r9', 'radeon r7', 'radeon r5',
|
||||||
|
'firepro', 'firegl'
|
||||||
|
]
|
||||||
|
|
||||||
|
# Check for discrete keywords first (more specific)
|
||||||
|
for keyword in discrete_keywords:
|
||||||
|
if keyword in gpu_name_lower:
|
||||||
|
return 'Discrete'
|
||||||
|
|
||||||
|
# Check for integrated keywords
|
||||||
|
for keyword in integrated_keywords:
|
||||||
|
if keyword in gpu_name_lower:
|
||||||
|
return 'Integrated'
|
||||||
|
|
||||||
|
# Fallback logic based on vendor and common patterns
|
||||||
|
if vendor == 'Intel':
|
||||||
|
# Intel Arc is discrete, everything else is typically integrated
|
||||||
|
if 'arc' in gpu_name_lower:
|
||||||
|
return 'Discrete'
|
||||||
|
else:
|
||||||
|
return 'Integrated'
|
||||||
|
elif vendor == 'NVIDIA':
|
||||||
|
# Most NVIDIA GPUs are discrete (except Tegra which is already handled)
|
||||||
|
return 'Discrete'
|
||||||
|
elif vendor == 'AMD':
|
||||||
|
# AMD is tricky - check for APU indicators
|
||||||
|
# APUs typically have model numbers like "Ryzen X XXXX" with graphics
|
||||||
|
if 'ryzen' in gpu_name_lower or 'athlon' in gpu_name_lower:
|
||||||
|
return 'Integrated'
|
||||||
|
# Most other AMD GPUs are discrete
|
||||||
|
return 'Discrete'
|
||||||
|
|
||||||
|
# Default to Discrete if we can't determine
|
||||||
|
return 'Discrete'
|
||||||
|
|
||||||
def get_gpu_info():
|
def get_gpu_info():
|
||||||
"""Detect and return information about GPUs in the system"""
|
"""Detect and return information about GPUs in the system"""
|
||||||
gpus = []
|
gpus = []
|
||||||
@@ -2914,11 +2981,13 @@ def get_gpu_info():
|
|||||||
elif 'Intel' in gpu_name:
|
elif 'Intel' in gpu_name:
|
||||||
vendor = 'Intel'
|
vendor = 'Intel'
|
||||||
|
|
||||||
|
gpu_type = identify_gpu_type(gpu_name, vendor)
|
||||||
|
|
||||||
gpu = {
|
gpu = {
|
||||||
'slot': slot,
|
'slot': slot,
|
||||||
'name': gpu_name,
|
'name': gpu_name,
|
||||||
'vendor': vendor,
|
'vendor': vendor,
|
||||||
'type': 'Discrete' if vendor in ['NVIDIA', 'AMD'] else 'Integrated'
|
'type': gpu_type
|
||||||
}
|
}
|
||||||
|
|
||||||
pci_info = get_pci_device_info(slot)
|
pci_info = get_pci_device_info(slot)
|
||||||
@@ -2927,11 +2996,8 @@ def get_gpu_info():
|
|||||||
gpu['pci_driver'] = pci_info.get('driver', '')
|
gpu['pci_driver'] = pci_info.get('driver', '')
|
||||||
gpu['pci_kernel_module'] = pci_info.get('kernel_module', '')
|
gpu['pci_kernel_module'] = pci_info.get('kernel_module', '')
|
||||||
|
|
||||||
# detailed_info = get_detailed_gpu_info(gpu) # Removed this call here
|
|
||||||
# gpu.update(detailed_info) # It will be called later in api_gpu_realtime
|
|
||||||
|
|
||||||
gpus.append(gpu)
|
gpus.append(gpu)
|
||||||
print(f"[v0] Found GPU: {gpu_name} ({vendor}) at slot {slot}")
|
print(f"[v0] Found GPU: {gpu_name} ({vendor}, {gpu_type}) at slot {slot}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[v0] Error detecting GPUs from lspci: {e}")
|
print(f"[v0] Error detecting GPUs from lspci: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user