General-AI-Platform-Backend/website/util/sysinfo.py

182 lines
4.8 KiB
Python

import hashlib
import logging
import os
import socket
import subprocess
import uuid
from website import settings
def get_cpu_id():
p = subprocess.Popen(["dmidecode -t 4 | grep ID | tail -1"],
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
data = p.stdout
lines = []
while True:
line = str(data.readline(), encoding="utf-8")
if line == '\n':
break
if line:
d = dict([line.strip().split(': ')])
lines.append(d)
else:
break
return lines
def get_system_uuid():
p = subprocess.Popen(["dmidecode -s system-uuid"],
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
data = p.stdout
lines = []
while True:
line = str(data.readline(), encoding="utf-8")
if line == '\n':
break
if line:
lines.append(line)
else:
break
print("system uuid {}".format(lines))
return lines
def get_system_manufacture():
p = subprocess.Popen(["dmidecode -s processor-manufacturer | tail -1"],
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
data = p.stdout
lines = []
while True:
line = str(data.readline(), encoding="utf-8")
if line == '\n':
break
if line:
lines.append(line)
else:
break
return lines
def get_board_manufacturer():
p = subprocess.Popen(["dmidecode -s baseboard-manufacturer"],
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
data = p.stdout
lines = []
while True:
line = str(data.readline(), encoding="utf-8")
if line == '\n':
break
if line:
lines.append(line)
else:
break
return lines
def get_board_serial_number():
p = subprocess.Popen(["dmidecode -s baseboard-serial-number"],
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
data = p.stdout
lines = []
while True:
line = str(data.readline(), encoding="utf-8")
if line == '\n':
break
if line:
lines.append(line)
else:
break
return lines
def get_board_serialnumber():
p = subprocess.Popen(["dmidecode -t 2 | grep Serial"],
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
data = p.stdout
lines = []
while True:
line = str(data.readline(), encoding="utf-8")
if line == '\n':
break
if line:
d = dict([line.strip().split(': ')])
lines.append(d)
else:
break
return lines
def get_idntify_code_v2():
cpuid = get_cpu_id()
system_uuid = get_system_uuid()
system_manufacture = get_system_manufacture()
board_manufacturer = get_board_manufacturer()
board_serial_number = get_board_serial_number()
s = ""
if cpuid:
s += cpuid[0]["ID"]
print("cpuid: ", cpuid[0]["ID"])
if system_uuid:
print(system_uuid)
s += system_uuid[0].strip()
if system_manufacture:
print(system_manufacture)
s += system_manufacture[0].strip()
if board_manufacturer:
print(board_manufacturer)
s += board_manufacturer[0].strip()
if board_serial_number:
print(board_serial_number)
s += board_serial_number[0].strip()
s += settings.system_salt
# system_salt = "5bVQmI0ATh+QITf75WgVchT6TPN1DEOasSmrtMcTsPQ="
# s += system_salt
code = hashlib.sha256(s.encode("utf8")).hexdigest()
return code
def get_identify_code():
mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
mac_addr = ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
host_name = socket.getfqdn(socket.gethostname())
cpu_ids = get_cpu_id()
serialnumbers = get_board_serialnumber()
s = ""
if mac_addr:
s += mac_addr
if host_name:
s += host_name
if cpu_ids:
for cpu in cpu_ids:
s += cpu["ID"]
if serialnumbers:
for number in serialnumbers:
s += number["Serial Number"]
logging.info(s)
code = hashlib.new('md5', s.encode("utf8")).hexdigest()
return code
def get_docker_container_id():
# 获取当前 Docker 容器的 ID
cmd = "cat /proc/self/cgroup"
output = os.popen(cmd)
rests = output.readlines()
container_message = rests[-1]
if not container_message:
container_id = "abc"
else:
container_id = container_message.strip().split("docker/")[-1]
return container_id
if __name__ == "__main__":
print(get_idntify_code_v2())