switch from hardware object to string

and replace mac address to disk serial number
for more predictable hash key
This commit is contained in:
Alex Bezdieniezhnykh
2025-05-02 09:41:04 +03:00
parent 28069f63f9
commit 59eb39d447
7 changed files with 16 additions and 50 deletions
+8 -33
View File
@@ -1,25 +1,6 @@
import re
import subprocess
import psutil
import pynvml
cdef class HardwareInfo:
def __init__(self, str cpu, str gpu, str memory, str mac_address):
self.cpu = cpu
self.gpu = gpu
self.memory = memory
self.mac_address = mac_address
cdef to_json_object(self):
return {
"CPU": self.cpu,
"GPU": self.gpu,
"MacAddress": self.mac_address,
"Memory": self.memory
}
def __str__(self):
return f'CPU: {self.cpu}. GPU: {self.gpu}. Memory: {self.memory}. MAC Address: {self.mac_address}'
cdef class HardwareService:
"""Handles hardware information retrieval and hash generation."""
@@ -35,15 +16,6 @@ cdef class HardwareService:
print('Error during os type checking')
self.is_windows = False
cdef get_mac_address(self, interface="Ethernet"):
addresses = psutil.net_if_addrs()
for interface_name, interface_info in addresses.items():
if interface_name == interface:
for addr in interface_info:
if addr.family == psutil.AF_LINK:
return addr.address.replace('-', '')
return None
@staticmethod
cdef has_nvidia_gpu():
try:
@@ -67,13 +39,14 @@ cdef class HardwareService:
print('Failed to shutdown pynvml cause probably no NVidia GPU')
pass
cdef HardwareInfo get_hardware_info(self):
cdef str get_hardware_info(self):
if self.is_windows:
os_command = (
"powershell -Command \""
"Get-CimInstance -ClassName Win32_Processor | Select-Object -ExpandProperty Name | Write-Output; "
"Get-CimInstance -ClassName Win32_VideoController | Select-Object -ExpandProperty Name | Write-Output; "
"Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -ExpandProperty TotalVisibleMemorySize | Write-Output"
"Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -ExpandProperty TotalVisibleMemorySize | Write-Output; "
"(Get-Disk | Where-Object {$_.IsSystem -eq $true}).SerialNumber"
"\""
)
else:
@@ -81,6 +54,7 @@ cdef class HardwareService:
"/bin/bash -c \" lscpu | grep 'Model name:' | cut -d':' -f2 && "
"lspci | grep VGA | cut -d':' -f3 && "
"free -g | grep Mem: | awk '{print $2}' && \""
"udevadm info --query=property --name=\"/dev/$(lsblk -no pkname \"$(findmnt -n -o SOURCE --target /)\")\" | grep -E 'ID_SERIAL=|ID_SERIAL_SHORT=' | cut -d'=' -f2- | head -n1 && "
)
# in case of subprocess error do:
# cdef bytes os_command_bytes = os_command.encode('utf-8')
@@ -90,7 +64,8 @@ cdef class HardwareService:
cdef str cpu = lines[0].replace("Name=", "").replace(" ", " ")
cdef str gpu = lines[1].replace("Name=", "").replace(" ", " ")
cdef str memory = lines[2].replace("TotalVisibleMemorySize=", "").replace(" ", " ")
cdef str mac_address = self.get_mac_address()
# could be multiple gpus
cdef str memory = lines[-2].replace("TotalVisibleMemorySize=", "").replace(" ", " ")
cdef str drive_serial = lines[-1]
return HardwareInfo(cpu, gpu, memory, mac_address)
return f'CPU: {cpu}. GPU: {gpu}. Memory: {memory}. Drive Serial: {drive_serial}'